Linux Samba 共享配置实战:防火墙与 SELinux 严格模式下的完美部署
目录
Samba的简述
1️⃣ Samba 是什么
-
Samba 是一个 开源实现的 SMB/CIFS 协议套件。
-
SMB(Server Message Block)是 Windows 文件共享协议;
-
CIFS(Common Internet File System)是 SMB 的扩展版本。
Samba 在 Linux 系统中实现了 SMB 协议,因此:
-
Linux 主机可以作为 SMB 服务器;
-
Windows、macOS、Linux 等都能作为 客户端 访问它。
2️⃣ Samba 的主要组成服务
| 组件 | 作用 |
|---|---|
| smbd | 提供文件共享、打印共享服务,处理认证与文件访问 |
| nmbd | 提供 NetBIOS 名称解析,让局域网中能用主机名访问共享 |
| winbindd | 用于集成 Windows 域认证(如 AD 域) |
-
samba的实际操作
一、环境准备与规划
-
共享目录:
/srv/samba/share -
共享名:
public_share -
共享账户:
smbuser -
客户端访问: 通过
smbuser账户进行读写 -
防火墙状态:开启
-
selinux:强制状态(Enforcing)
二、安装 Samba 服务
# 安装 Samba 软件包
[root@web1 ~]# yum -y install samba samba-client samba-common
# 启动服务并设置开机自启
[root@web1 ~]# systemctl enable smb nmb --now
三、创建共享目录与设置权限
# 1. 创建共享目录
[root@web1 ~]# mkdir -p /srv/samba/share
# 2. 设置目录权限(确保其它用户有执行权限,否则无法访问)
[root@web1 ~]# chown smbuser:smbuser /srv/samba/share/
[root@web1 ~]# chmod 755 /srv/samba/share/
# 3. 检查目录的 SELinux 上下文(此时还不是 samba 共享类型)
[root@web1 ~]# ls -laZ /srv/samba/
如果目录权限没有设置得当,后续客户端测试会出现Permission Denied(权限拒绝)错误
四、创建 Samba 共享用户
重要:Samba 用户必须对应一个已有的 Linux 系统用户
# 1. 创建系统用户(不创建家目录,不设置登录shell)
[root@web1 ~]# useradd -s /sbin/nologin -M smbuser
# 2. 设置系统用户密码(可选,Samba 有自己的密码)
[root@web1 ~]# echo 123 | passwd --stdin smbuser
# 3. 将用户添加到 Samba 数据库,并设置 Samba 密码
[root@web1 ~]# smbpasswd -a smbuser
# 根据提示输入两次 Samba 密码,这个密码用于客户端连接
# 这里我设置的密码为123
如果缺少第3步,后续测试共享时会出现NT_STATUS_LOGON_FAILURE(登录失败)
五、配置 Samba 主配置文件
备份并编辑 /etc/samba/smb.conf:
# 备份原配置
[root@web1 ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
# 编辑配置
[root@web1 ~]# vim /etc/samba/smb.conf
在文件末尾添加以下配置:
[public_share]
# 共享描述
comment = Public Shared Directory
# 共享目录路径
path = /srv/samba/share
# 允许访问的用户
valid users = smbuser
# 可浏览(在网络上可见)
browseable = yes
# 可写入
writable = yes
# 新创建文件的权限
create mask = 0664
# 新创建目录的权限
directory mask = 0775
# 禁止匿名访问
public = no
# 允许写入
read only = no
# 来宾账户不可访问
guest ok = no
六、配置 SELinux 策略
这是最关键的一步,确保 SELinux 允许 Samba 访问共享目录
# 1.安装提供semanage命令的包
[root@web1 ~]# yum -y install policycoreutils-python-2.5-22.el7.x86_64
# 2. 将共享目录的 SELinux 上下文改为 samba_share_t
[root@web1 ~]# semanage fcontext -a -t samba_share_t "/srv/samba/share(/.*)?"
# 3. 恢复该目录的默认 SELinux 上下文(应用上一步的设置)
[root@web1 ~]# restorecon -Rv /srv/samba/share/
# 4. 允许 Samba 对共享目录进行读写操作
[root@web1 ~]# setsebool -P samba_export_all_ro on
[root@web1 ~]# setsebool -P samba_export_all_rw on
# 5. 验证目录的 SELinux 上下文
[root@web1 ~]# ls -laZ /srv/samba/share/
应该看到上下文类型变为: unconfined_u:object_r:samba_share_t:s0
七、配置防火墙规则
允许 Samba 服务通过防火墙:
# 查看 Samba 相关服务在防火墙中的定义
[root@web1 ~]# firewall-cmd --get-services | grep samba
# 永久开放 Samba 服务
[root@web1 ~]# firewall-cmd --permanent --add-service=samba
# 重新加载防火墙配置
[root@web1 ~]# firewall-cmd --reload
# 验证规则
[root@web1 ~]# firewall-cmd --list-all
应该看到 samba 在 services: 列表中
八、测试与验证
1. 测试配置文件语法:
[root@web1 ~]# testparm
看到 Loaded services file OK. 表示配置正确
2. 重启 Samba 服务:
[root@web1 ~]# systemctl restart smb nmb
3. 在服务器本地测试共享:
[root@web1 ~]# smbclient //localhost/public_share -U smbuser
Enter SAMBA\smbuser's password:
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Sun Oct 12 06:23:06 2025
.. D 0 Sun Oct 12 06:23:06 2025
18555904 blocks of size 1024. 16601212 blocks available
smb: \> exit
4. 检查共享列表:
[root@web1 ~]# smbclient -L localhost -U smbuser
Enter SAMBA\smbuser's password:
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
public_share Disk Public Shared Directory
IPC$ IPC IPC Service (Samba 4.7.1)
smbuser Disk Home Directories
Reconnecting with SMB1 for workgroup listing.
Server Comment
--------- -------
Workgroup Master
--------- -------
SAMBA WEB1
九、客户端连接测试
在 Linux 客户端:
# 安装客户端
[root@web2 ~]# yum -y install cifs-utils
# 创建挂载点
[root@web2 ~]# mkdir /mnt/samba_share
# 挂载共享
[root@web2 ~]# mount -t cifs -o username=smbuser,password=123 //192.168.4.100/public_share /mnt/samba_share
# 测试读写
[root@web2 ~]# touch /mnt/samba_share/test.txt
[root@web2 ~]# ls /mnt/samba_share/
test.txt
在 Windows 客户端:
-
打开文件资源管理器
-
地址栏输入:
\\服务器IP\public_share -
输入用户名
smbuser和密码 -
应该能正常访问并创建/删除文件



可正常创建文件夹
samba共享完成!
补充:专门针对跨操作系统兼容性的优化配置
在/etc/samba/smb.conf的现有配置中添加:
[global]
# 协议兼容:确保 Win10+/macOS/Linux 都能连接
server min protocol = SMB2
# 字符集兼容:解决中文乱码问题
dos charset = CP936
unix charset = UTF-8
# macOS 特殊支持
vfs objects = fruit
这些配置能显著改善不同系统间的文件共享体验
更多推荐
所有评论(0)