网络服务器配置与管理教辅书 Help

3-2 Samba文件共享

视频

介绍

Samba,是种用来让UNIX系列的操作系统与微软Windows操作系统的SMB/CIFS(Server Message Block/Common Internet File System)网络协议做链接的自由软件。 第三版不仅可访问及分享SMB的文件夹及打印机,本身还可以集成入Windows Server的网域,扮演为网域控制站(Domain Controller)以及加入Active Directory成员。 简而言之,此软件在Windows与UNIX系列操作系统之间搭起一座桥梁,让两者的资源可互通有无。

学校机房虚拟机准备

  1. 2G内存。

  2. 网卡桥接或NAT。学校机房由于同时安装了Virtualbox跟VMware冲突,需要禁用Windows宿主机上的Virtualbox虚拟网卡,启用VMnet8网卡,来确保VMware桥接和NAT网卡模式正常。

    3 2

  3. 机房电脑CentOS版本较旧,电脑关机自动还原,因此如果在线安装,每次都需要换软件源。

安装-方法1-在线安装方式

  1. 换源,CentOS 8系统官方源停止维护,换国内软件源。

    # 换腾讯云源 sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-* sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.cloud.tencent.com|g" /etc/yum.repos.d/CentOS-* yum makecache
  2. 安装samba服务端软件。

    yum install samba

    安装过程中有询问是否确认安装和接受软件源的公钥,键入y然后回车 。返回信息如下

    上次元数据过期检查:0:03:13 前,执行于 2024年10月11日 星期五 07时43分27秒。 依赖关系解决。 ================================================================================ 软件包 架构 版本 仓库 大小 ================================================================================ 安装: samba x86_64 4.19.4-4.el8 baseos 1.0 M 安装依赖关系: libnetapi x86_64 4.19.4-4.el8 baseos 217 k samba-common-tools x86_64 4.19.4-4.el8 baseos 543 k samba-dcerpc x86_64 4.19.4-4.el8 baseos 756 k samba-ldb-ldap-modules x86_64 4.19.4-4.el8 baseos 113 k samba-libs x86_64 4.19.4-4.el8 baseos 205 k 事务概要 ================================================================================ 安装 6 软件包 总下载:2.8 M 安装大小:8.1 M 确定吗?[y/N]: y 下载软件包: (1/6): libnetapi-4.19.4-4.el8.x86_64.rpm 1.3 MB/s | 217 kB 00:00 (2/6): samba-common-tools-4.19.4-4.el8.x86_64.r 2.0 MB/s | 543 kB 00:00 (3/6): samba-4.19.4-4.el8.x86_64.rpm 2.9 MB/s | 1.0 MB 00:00 (4/6): samba-dcerpc-4.19.4-4.el8.x86_64.rpm 3.4 MB/s | 756 kB 00:00 (5/6): samba-ldb-ldap-modules-4.19.4-4.el8.x86_ 881 kB/s | 113 kB 00:00 (6/6): samba-libs-4.19.4-4.el8.x86_64.rpm 1.4 MB/s | 205 kB 00:00 -------------------------------------------------------------------------------- 总计 5.7 MB/s | 2.8 MB 00:00 CentOS Stream 8 - BaseOS 1.6 MB/s | 1.6 kB 00:00 导入 GPG 公钥 0x8483C65D: Userid: "CentOS (CentOS Official Signing Key) <security@centos.org>" 指纹: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D 来自: /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial 确定吗?[y/N]: y 导入公钥成功 运行事务检查 事务检查成功。 运行事务测试 事务测试成功。 运行事务 准备中 : 1/1 安装 : samba-libs-4.19.4-4.el8.x86_64 1/6 安装 : libnetapi-4.19.4-4.el8.x86_64 2/6 安装 : samba-dcerpc-4.19.4-4.el8.x86_64 3/6 安装 : samba-ldb-ldap-modules-4.19.4-4.el8.x86_64 4/6 安装 : samba-common-tools-4.19.4-4.el8.x86_64 5/6 安装 : samba-4.19.4-4.el8.x86_64 6/6 运行脚本: samba-4.19.4-4.el8.x86_64 6/6 验证 : libnetapi-4.19.4-4.el8.x86_64 1/6 验证 : samba-4.19.4-4.el8.x86_64 2/6 验证 : samba-common-tools-4.19.4-4.el8.x86_64 3/6 验证 : samba-dcerpc-4.19.4-4.el8.x86_64 4/6 验证 : samba-ldb-ldap-modules-4.19.4-4.el8.x86_64 5/6 验证 : samba-libs-4.19.4-4.el8.x86_64 6/6 已安装: libnetapi-4.19.4-4.el8.x86_64 samba-4.19.4-4.el8.x86_64 samba-common-tools-4.19.4-4.el8.x86_64 samba-dcerpc-4.19.4-4.el8.x86_64 samba-ldb-ldap-modules-4.19.4-4.el8.x86_64 samba-libs-4.19.4-4.el8.x86_64 完毕!

安装-方法2-离线包方式

(在线安装方式和离线安装方式任选其一)
(离线安装包由老师整理提供。)

  1. 获取安装包:老师下发准备好的安装包至学生机桌面。文件名形如samba-installers.tar.gz ,Windows默认不显示后缀的情况下.gz不可见。

  2. 复制到虚拟机:在宿主机桌面安装包右键复制,在虚拟机图形化文件管理器中右键复制。(Vmware会自动帮我们搭建宿主机与虚拟机的桥梁,像普通的复制粘贴一样,而不需要ftp文件传输。)

    3-2拖动安装程序到虚拟机.png

  3. 解压缩和解包:
    .gz是一种类似Windows上rar的压缩算法,gzip解压文件,命令略。
    .tar是一种类似Windows上zip的打包,tar命令可以解包,命令略。
    经常用的是压缩/解压缩、封包/解包二合一命令。参数-z gzip压缩/解压缩,-x extract检出文件解压缩,-v verbose打印详细过程,-f file跟压缩文件名。

    # ⚠️下发文件名可能跟下面命令中的文件名不同,自行调整 tar -zxvf samba-installer.tar.gz
  4. 安装 rpm(red hat package manager)相当于windows上的.exe,用rpm命令安装。
    参数-i install安装,-v verbose详细信息,-h hash解压时打印文件哈希值, --force强制安装 因为有的依赖库系统上已经有了这里需要覆盖掉以保证版本正确, --nodeps no dependencies因为安装包已经包含依赖和机器未换源、安装某个rpm时就不用再检查依赖了。

    rpm -iv --force --nodeps ./samba-installer/*.rpm
  5. (可选)验证 yum list installed | grep smb

准备共享目录、客户端用户

  1. 创建文件共享目录和测试文件

    # 注意是/share,否则会创建到当前目录下。 mkdir /share touch /share/1.txt touch /share/2.mp4

配置文件

  1. 编辑配置文件

    nano /etc/samba/smb.conf

    在文件最后添加新配置块配置关于/share目录行为。

    # 前面的是配置文件自带的一些配置,可以看到全局配置、用户家目录共享、打印机共享 # 要追加的内容在最后 [global] workgroup = SAMBA security = user # 安全级别 passdb backend = tdbsam # 用户密码和权限存储于数据库 printing = cups printcap name = cups load printers = yes cups options = raw # 没有host allow配置代表允许所有客户端ip访问 # Install samba-usershares package for support include = /etc/samba/usershares.conf [homes] # 默认会共享运行服务的用户的家目录 comment = Home Directories valid users = %S, %D %w %S # (个人备注:此处字符引起WriteSide bug) browseable = No # 在共享邻居中是否可见 read only = No # 是否所有人只读 inherit acls = Yes [printers] # 打印机用不上,放着不动或注释掉 comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775 # 👇👇新增内容-------------- # ❌注意:每行后面不要写抄写注释,=号后面的内容会被认为是值导致报错。 [share] path = /share # 共享文件夹路径 hosts allow = ALL # 允许的客户端IP,允许网段的写法是172.31.5. ,ALL代表允许所有客户端ip browsable = yes # 可浏览 writeable = yes # 可读写。美中配置有多种写法,writeable=yes最终会生成为readonly=no guest ok = yes # 允许匿名访问不需要密码

    保存,nano中保存快捷键ctrl+O,询问是否修改文件名时直接回车。
    退出,nano中退出快捷键ctrl+X。
    (课外)其它功能和精细权限控制需要查看英文文档samba doc 。第一次实验时建议不要加权限更容易成功。

  2. 校验配置是否正确:

    testparm

    如果正确,返回信息OK

    Load smb config files from /etc/samba/smb.conf Loaded services file OK. Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback) Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions

    回车后打印最终配置内容,与我们编辑的略微差异,因为同一个配置项有不同名字,例如writeable=yes和readonly=no一个意思。

添加系统本地用户至samba后台白名单

打个比方,每个手机卡有个pin码密码,但你用这个手机号注册百度网盘,那需要为这个产品服务再设置一个密码。
系统本地用户有多个zhangsan、lisi,但只允许zhangsan用这个服务,就要在samba的管理后端把用户添加至白名单。

  1. 创建操作系统本地用户。
    用户名zhangsan 密码设置123456

    useradd zhangsan # linux设置密码时没有占位提示 # 设置密码时虽然返回信息说密码太简单无效,但其实能设置成功 passwd zhangsan
    新的 密码: 无效的密码: 密码是一个回文 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。

  2. 添加本地用户到samba白名单中

    smbpasswd -a zhangsan

    添加用户授权使用samba服务。
    为了好记,设置改用户访问samba服务时的密码为123456
    ⚠️后面客户端连接用的就是这个密码(不是上一步本地用户的密码,但因为两个密码设置的一样,减少你失败的可能性)。

    New SMB password: Retype new SMB password: Added user zhangsan.

  3. (可选)修改文件夹和文件允许所有人访问。
    root用户创建的/share文件夹和文件,其它人没有访问权限,最后即使能看到共享文件夹也点不进去。 可选,因为配置文件中guest = ok已经允许所有人访问。

    chmod -R 777 /share

启动服务

  1. 启动服务nmb.service(负责域名解析)和smb.service后台服务。因为smb.service依赖nmb.service,只启动smb.service就可以,后缀.service可以省略。

    systemctl start smb # (可选)设置服务为开机自启动,因为机房电脑关机还原,所以不需要这句 # systemctl enable smb # 如果修改了配置文件,需要重启服务 # systemctl restart smb
  2. 查看服务状态

    systemctl status smb

    返回信息active(running)和日志无报错为成功

    smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset:> Active: active (running) since Fri 2024-10-11 08:25:23 EDT; 12s ago Docs: man:smbd(8) man:samba(7) man:smb.conf(5) Main PID: 34890 (smbd) Status: "smbd: ready to serve connections..." Tasks: 3 (limit: 14017) Memory: 11.5M CGroup: /system.slice/smb.service ├─34890 /usr/sbin/smbd --foreground --no-process-group ├─34892 /usr/sbin/smbd --foreground --no-process-group └─34893 /usr/sbin/smbd --foreground --no-process-group 10月 11 08:25:23 localhost.localdomain systemd[1]: Starting Samba SMB Daemon... 10月 11 08:25:23 localhost.localdomain smbd[34890]: [2024/10/11 08:25:23.294607> 10月 11 08:25:23 localhost.localdomain smbd[34890]: smbd version 4.19.4 start> 10月 11 08:25:23 localhost.localdomain smbd[34890]: Copyright Andrew Tridgell> 10月 11 08:25:23 localhost.localdomain systemd[1]: Started Samba SMB Daemon.

  3. 关闭防火墙
    正规做法是放通端口,这里为了简单整个关闭掉。

    systemctl stop firewalld
  4. 关闭SElinux
    SElinux是负责进程间资源隔离的安全软件

    setenforce 0
  5. 记录下服务端ip地址
    Linux桌面右上角设置-网络-详细设置中查看。 或nmcli命令。
    ⚠️桥接网络下教室的ip形如172.31.5.123 ,根据实际情况变化。
    ⚠️NAT网络下服务器ip形如192.168.140.130 ,根据事情情况变化。
    本文中假设服务端IP172.31.5.100

⬆️服务端内容结束⬆️

⬇️以下为Windows客户端⬇️

Windows客户端测试

Windows系统本身资源管理器就支持samba协议,而且有图形界面,"网上邻居"中可发现samba服务(由于服务端配置问题,可能不可直接看见,但能访问)。

  1. 访问服务端IP: 桌面打开我的电脑或快捷键win+E打开资源管理器。

3-2window客户端访问服务端ip.png
  1. 输入用户名密码: 初次访问输入之前添加的smb用户名zhangsan和smb密码111111

3-2输入凭证.png
  1. 🎉访问文件夹内文件成功🎉,测试文件读写权限。

3-2访问共享文件夹成功.png

⬇️(课外)以下为Linux客户端

linux客户端测试

(下面命令未完整测试)

[root@node01 ~]# dnf -y install samba-client cifs-utils # with [smbclient] command access # smbclient (share name) -U (user name) [root@node01 ~]# smbclient '\\smb.srv.world\Share01' -U cent Enter SAMBA\cent's password: Try "help" to get a list of possible commands. smb: \> ls . D 0 Mon Mar 15 21:38:38 2021 .. D 0 Mon Mar 15 21:35:20 2021 testfile.txt N 15 Mon Mar 15 21:38:33 2021 testdir D 0 Mon Mar 15 21:38:38 2021 27245572 blocks of size 1024. 24883772 blocks available # download a file smb: \> mget testfile.txt Get file testfile.txt? y getting file \testfile.txt of size 15 as testfile.txt (4.9 KiloBytes/sec) (average 4.9 KiloBytes/sec) smb: \> !ls anaconda-ks.cfg testfile.txt smb: \> exit # with [mount] command access # [vers=(SMB protocol version)] [root@node01 ~]# mount -t cifs -o vers=3.0,username=cent '\\smb.srv.world\Share01' /mnt Password for cent@\smb.srv.world\Share01: ******** # password [root@node01 ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/cs-root xfs 26G 2.3G 24G 9% / /dev/vda1 xfs 1014M 259M 756M 26% /boot tmpfs tmpfs 374M 0 374M 0% /run/user/0 \\smb.srv.world\Share01 cifs 26G 2.3G 24G 9% /mnt # if share does not require authentication, specify [none] for username [root@node01 ~]# mount -t cifs -o vers=3,username=none,password=none '\\smb.srv.world\Share' /mnt

(课外)客户端管理

查看当前分享的目录和连接的客户端用户,管理会话。参考课本、PPT和网上文章,详细略。

smbstatus

(课外)制作离线安装包:

  1. 在一台软件源正常的已联网电脑上。

  2. 安装一个包管理的工具 yum install yum-utils

  3. 下载软件和软件的所有依赖 repotrack samba ,得到许多rpm安装包。

  4. 压缩,cd到上层文件夹, tar -zcvf samba-installers.tar.gz ./samba-installers-dir

22 十二月 2025