CentOS 7 搭建 Samba 文件共享并配置用户、部门权限与 SELinux CentOS 7 搭建 Samba 文件共享并配置用户、部门权限与 SELinux1. 服务介绍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 -qa4.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-servicesamba 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-servicesamba5.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 端口监听日志没有持续认证或权限拒绝。

本月热点