CentOS 7 搭建 Samba 文件共享并配置用户、部门权限与 SELinux
1. 服务介绍
Samba 在 Linux/Unix 系统上实现 SMB/CIFS 协议,使 Windows、Linux 和其他支持 SMB 的客户端能够访问共享目录与打印资源。它适合局域网文件交换、部门资料隔离、统一账号认证及跨平台协作。
本实验先创建仅指定用户可读写的基础共享,再完成学校公共目录、教务处目录和招生办目录的权限隔离。公共目录允许所有人只读;部门目录只允许校长和对应部门成员访问、写入。
2. 准备运行环境
• 服务端:CentOS 7.x,示例地址10.1.100.101。
• 客户端:Windows 10/11 或安装了samba-client的 Linux 主机。
• 权限:使用root,或通过sudo执行管理命令。
• 网络:客户端与服务端互通,YUM 软件源可用。
• 名称解析:没有 DNS 时直接使用服务端 IP;需要使用主机名时提前配置 DNS 或 hosts。
先确认系统和网络:
cat /etc/centos-release ip addr ip route ping -c 4 10.1.100.1 yum repolist3. 相关知识
• SMB 主要使用 TCP 445;旧版 NetBIOS 场景还会使用 TCP 139、UDP 137 和 UDP 138。
• Samba 用户必须先存在于 Linux 系统,再通过smbpasswd -a 用户名加入 Samba 密码库。系统密码与 Samba 密码可以不同。
• 访问权限取 Samba 配置、Linux 文件权限、SELinux 标签和防火墙规则四者交集。任一层拒绝,客户端都无法正常访问。
•valid users控制允许访问的用户;write list控制可写用户;read only = yes表示只读;用户组前加@。
•testparm -s可在重启前检查语法和最终生效配置。配置错误时不要反复重启服务。
• CentOS 7 使用tdbsam作为常见密码后端,不应再配置已废弃的smbpassword file。出现Unknown parameter encountered: "smbpassword file"时,应删除该参数。
• Windows 会缓存 SMB 凭据。切换测试账号前可执行net use * /delete /y清理旧连接。
• 不建议用chmod 777、停防火墙或关闭 SELinux解决权限问题。应配置最小目录权限、放行 Samba 服务并设置正确 SELinux 类型。
4. 实验步骤
4.1 安装 Samba 与管理工具
yum -y install samba samba-client samba-common-tools policycoreutils-python acl rpm -qa | grep '^samba' | sort也可以用 YUM 查看已安装组件:
yum list installed 'samba*'正确的 RPM 查询命令是rpm -qa,不是原记录中的rm -qa:
4.2 创建基础共享用户和目录
创建共享组、两个禁止交互登录的系统用户,并设置目录最小权限:
groupadd smbusers useradd -M -s /sbin/nologin -G smbusers qwe useradd -M -s /sbin/nologin -G smbusers ewq mkdir -p /srv/samba/basic chown root:smbusers /srv/samba/basic chmod 2770 /srv/samba/basic2770中的首位2表示 SGID,新文件会继承smbusers组;组成员可读写,其他用户无权限。
4.3 创建部门用户、用户组和目录
实验权限需求如下:
创建教务处和招生办用户组:
groupadd gjwc groupadd gzsb useradd -M -s /sbin/nologin rector useradd -M -s /sbin/nologin liu2 useradd -M -s /sbin/nologin zhang3 useradd -M -s /sbin/nologin li4 useradd -M -s /sbin/nologin wang5 usermod -aG gjwc,gzsb rector usermod -aG gjwc liu2 usermod -aG gjwc zhang3 usermod -aG gzsb li4 usermod -aG gzsb wang5创建公共目录和部门目录:
mkdir -p /srv/samba/school/{share,jwc,zsb} chown root:root /srv/samba/school/share chmod 0755 /srv/samba/school/share chown root:gjwc /srv/samba/school/jwc chmod 2770 /srv/samba/school/jwc chown root:gzsb /srv/samba/school/zsb chmod 2770 /srv/samba/school/zsb原实验中目录创建结果如下;本文改用/srv/samba/school统一管理共享数据:
4.4 配置 Samba
备份原配置:
cp -a /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date +%F-%H%M%S)编辑/etc/samba/smb.conf:
[global] workgroup = WORKGROUP security = user map to guest = Bad User passdb backend = tdbsam log file = /var/log/samba/log.%m max log size = 1000 [basic] comment = Basic authenticated share path = /srv/samba/basic browseable = yes read only = no valid users = @smbusers force group = smbusers create mask = 0660 directory mask = 2770 [share] comment = Public read-only share path = /srv/samba/school/share browseable = yes guest ok = yes read only = yes [jwc] comment = Academic Affairs Office path = /srv/samba/school/jwc browseable = yes read only = no valid users = @gjwc write list = @gjwc force group = gjwc create mask = 0660 directory mask = 2770 [zsb] comment = Admissions Office path = /srv/samba/school/zsb browseable = yes read only = no valid users = @gzsb write list = @gzsb force group = gzsb create mask = 0660 directory mask = 2770先检查配置,确认没有报错:
testparm -s4.5 添加 Samba 密码
逐个执行并输入 SMB 密码:
smbpasswd -a qwe smbpasswd -a ewq smbpasswd -a rector smbpasswd -a liu2 smbpasswd -a zhang3 smbpasswd -a li4 smbpasswd -a wang5 pdbedit -L下面旧截图中的用户已添加成功,但同时出现Unknown parameter encountered: "smbpassword file":
该警告由旧配置项smbpassword file引起。删除它并保留passdb backend = tdbsam,再执行testparm -s,不应继续出现警告。
4.6 配置 SELinux 和防火墙
为共享目录设置持久 SELinux 文件类型:
semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?" restorecon -Rv /srv/samba ls -Zd /srv/samba /srv/samba/basic /srv/samba/school/*放行 Samba 服务,不关闭防火墙:
firewall-cmd --permanent --add-service=samba firewall-cmd --reload firewall-cmd --list-services启用并启动服务:
systemctl enable --now smb nmb systemctl restart smb nmb4.7 Windows 客户端访问
按Win + R,输入:
\\10.1.100.101输入 Samba 用户名和密码后,可看到基础共享、公共共享及有权限访问的部门目录:
切换账号测试前,在 Windows 命令提示符执行:
net use * /delete /y net use \\10.1.100.101\jwc /user:liu25. 验证结果
5.1 服务端验证
testparm -s systemctl --no-pager --full status smb nmb ss -lntup | egrep ':445|:139|:137|:138' pdbedit -L smbclient -L //127.0.0.1 -U qwe smbstatus journalctl -u smb -u nmb -n 100 --no-pager验证 SELinux 和防火墙:
getenforce ls -Zd /srv/samba /srv/samba/basic /srv/samba/school/* firewall-cmd --query-service=samba5.2 Linux 客户端验证
yum -y install samba-client cifs-utils smbclient -L //10.1.100.101 -U qwe smbclient //10.1.100.101/basic -U qwe进入smbclient后,用ls查看目录,用put 文件名测试上传,用get 文件名测试下载。
5.3 Windows 客户端验证
Test-NetConnection 10.1.100.101 -Port 445 Get-SmbConnection net use预期结果:
• 匿名用户能读取share,不能写入。
•qwe、ewq能读写basic。
•liu2、zhang3和rector能访问并写入jwc;招生办普通用户不能访问。
•li4、wang5和rector能访问并写入zsb;教务处普通用户不能访问。
•testparm -s无错误,445 端口监听,日志没有持续认证或权限拒绝。