Samba 共享配置(防火墙开启且 SELinux 强制模式)
·
目录
一、实验目标
✅ 系统防火墙处于启用状态;
✅ SELinux 处于 Enforcing(强制)模式;
✅ 创建一个 Samba 用户 smbuser;
✅ 客户端使用该用户可以 读写共享目录;
✅ Samba 服务在安全规则下正常运行。
二、准备环境
1️⃣ 检查 SELinux 状态
getenforce
输出应为:
Enforcing
2️⃣ 检查防火墙状态
systemctl status firewalld
三、安装 Samba
yum -y install samba samba-client samba-common
四、创建共享目录
mkdir -p /srv/samba/private
chmod -R 770 /srv/samba/private

五、创建系统用户 + Samba 用户
# 创建系统账户
useradd smbuser
echo smbuser | passwd --stdin smbuser
# 添加为 Samba 账户
smbpasswd -a smbuser #添加smbuser用户
smbpasswd -e smbuser #启用smbuser用户
5.1创建用户并设置密码

5.2添加smbuser用户

5.3启用smbuser用户

5.4设置目录权限给该用户:
chown -R smbuser:smbuser /srv/samba/private
六、配置 Samba 主文件
编辑配置文件 /etc/samba/smb.conf:
[global]
workgroup = SAMBA # 工作组名,Windows默认是WORKGROUP,Linux默认是SAMBA)
security = user # 以用户验证方式访问(推荐)
map to guest = Bad User # 当无效用户访问时映射为 guest
server string = Samba Server # 服务器描述,可随意写
log file = /var/log/samba/%m.log # 不同客户端生成独立日志
max log size = 50 # 日志最大 50KB
server role = standalone server # 独立服务器模式(非域成员)
[private]
comment = Private Share # 共享描述
path = /srv/samba/private # 实际共享目录路径
valid users = smbuser # 仅允许 smbuser 访问
writable = yes # 可写
browseable = yes # 可在“网络邻居”中看到
guest ok = no # 禁止匿名访问
create mask = 0660 # 文件权限:rw-rw----
directory mask = 0770 # 目录权限:rwxrwx---
七、启动 Samba 服务
systemctl enable smb nmb
systemctl restart smb nmb
八、防火墙放行 Samba 服务
firewall-cmd --permanent --add-service=samba
systemctl restart firewalld
firewall-cmd --list-services
8.1永久开放 Samba 服务端口
8.2重新加载防火墙配置
8.3验证是否生效
九、配置 SELinux 权限(重点)
SELinux 默认会阻止 Samba 访问非标准目录。
我们创建的 /srv/samba/private 不在默认路径 /var/lib/samba 下,因此需要给它打标签:
9.1查看 Samba 共享相关布尔值
getsebool -a | grep samba
9.2开启允许 Samba 访问用户自定义目录
setsebool -P samba_enable_home_dirs on
setsebool -P samba_export_all_rw on

9.3给共享目录设置正确的 SELinux 上下文
yum -y install setroubleshoot
semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?"
restorecon -Rv /srv/samba
设置SELinux安全上下文并启用
查看是否生效

十、客户端测试访问
10.1Windows 客户端:
在文件资源管理器中输入:
\\<服务器IP>\private
系统会提示输入用户名密码:

成功后可读写目录


10.2Linux 客户端测试:
yum install -y samba samba-client samba-common #另一台虚拟机需要安装软件
smbclient //192.168.4.100/private -U smbuser
输入密码后,进入交互式命令行,可测试:
smb: \> ls #列出当前共享目录中的文件和子目录。
smb: \> put test.txt #将本地客户端目录下的 test.txt 上传到 Samba 共享目录。
smb: \> get test.txt #从 Samba 共享目录下载文件到本地客户端。

若读写成功,即配置完成 ✅。
十一、总结表
| 项目 | 说明 |
|---|---|
| Samba 服务 | 已启动并开机自启 |
| SELinux 状态 | Enforcing |
| 防火墙状态 | Active |
| 用户 | smbuser |
| 共享路径 | /srv/samba/private |
| SELinux 标签 | samba_share_t |
| 功能 | 可正常读写文件 |
十二、常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 客户端连接被拒绝 | 防火墙未放行 | firewall-cmd --add-service=samba |
| 访问提示拒绝 | SELinux 阻止目录访问 | 使用 semanage fcontext + restorecon |
| 登录失败 | Samba 用户未添加 | smbpasswd -a username |
| 无法写入 | 权限不足 | 检查目录属主与 directory mask |
更多推荐









所有评论(0)