第一部分:Samba 服务器基础配置
这部分将教你如何快速搭建一个简单的、允许匿名用户访问的共享目录。

安装 Samba
确保你的系统已经更新,然后安装 samba 包。
# 更新系统软件包 sudo yum update -y # 安装 Samba sudo yum install samba -y
安装完成后,Samba 的服务 smb 和 nmb 会被创建,但默认是未启动的。
创建共享目录
我们将在 /home 目录下创建一个名为 public_share 的共享目录,并设置适当的权限。
# 创建共享目录 sudo mkdir -p /home/public_share # 设置目录所有者为 root,组为 samba sudo chown -R root:samba /home/public_share # 设置目录权限为 775 (所有者和组成员可读写执行,其他用户可读执行) sudo chmod -R 775 /home/public_share
配置 Samba
Samba 的主配置文件是 /etc/samba/smb.conf,在修改之前,最好先备份一份。

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
编辑 smb.conf 文件,你可以使用 vi 或 nano 等文本编辑器。
sudo vi /etc/samba/smb.conf
在文件末尾添加以下内容,来定义我们的共享 [public_share]:
[global] # 设置工作组,确保与你的 Windows 工作组一致 workgroup = WORKGROUP # 设置服务器描述,在网络上会显示这个名字 server string = Samba Server %v # 允许客户端查看共享列表 netbios name = CENTOSSMB # 日志文件路径 log file = /var/log/samba/log.%m # 最大日志大小 max log size = 50 # ======================== 共享定义 ======================== [public_share] # 共享的注释说明 comment = Public Share Directory # 共享的路径 path = /home/public_share # 是否允许guest用户访问 guest ok = yes # 将guest用户映射为系统用户nobody guest account = nobody # 是否允许写入 writable = yes # 新创建的文件/目录的权限掩码 create mask = 0777 # 新创建的目录的权限掩码 directory mask = 0777
配置解释:
[global]: 全局设置,影响整个 Samba 服务器。[public_share]: 这是共享的名称,Windows 系统访问时会看到这个名字。path: 共享目录的实际路径。guest ok = yes: 允许匿名用户(guest)访问此共享,无需密码。writable = yes: 允许用户在此共享目录中写入文件。create mask和directory mask: 设置新创建文件和目录的默认权限。
设置 SELinux 和防火墙
CentOS 7 默认启用 SELinux 和防火墙,这会阻止 Samba 的访问,需要进行相应配置。

临时关闭 SELinux(不推荐,仅用于测试)
# 临时关闭,重启后恢复 sudo setenforce 0
永久关闭 SELinux(不推荐)
编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled,然后重启系统。
正确配置 SELinux(推荐) 这是最安全、正确的方法,我们需要为 Samba 共享目录设置正确的 SELinux 上下文。
# 为共享目录设置正确的 SELinux 上下文 sudo semanage fcontext -a -t samba_share_t "/home/public_share(/.*)?" # 应用新的 SELinux 上下文 sudo restorecon -R -v /home/public_share
samba_share_t是 Samba 共享文件的标准安全上下文。
配置防火墙
# 永久开放 Samba 服务所需的端口 sudo firewall-cmd --permanent --add-service=samba # 重新加载防火墙规则使配置生效 sudo firewall-cmd --reload
启动并设置开机自启 Samba 服务
# 启动 Samba 服务 sudo systemctl start smb nmb # 设置开机自启 sudo systemctl enable smb nmb # 检查服务状态 sudo systemctl status smb nmb
测试
你的 Samba 服务器已经配置完成。
从 Windows 客户端测试:
- 在文件资源管理器的地址栏中,输入
\\<你的CentOS_IP地址>。 \\192.168.1.100。- 你应该能看到一个名为
public_share的共享文件夹。 - 双击进入,你应该可以无密码地读取和写入文件。
从 Linux 客户端测试:
你可以使用 smbclient 命令行工具进行测试。
# 安装 smbclient (如果还没有) sudo yum install samba-client -y # 匿名访问测试 smbclient //localhost/public_share -U guest
成功连接后,会看到 smb: \> 提示符,你可以使用 get、put、ls 等命令来操作文件。
第二部分:创建用户共享目录(需要密码验证)
上面的配置是匿名的,不安全,在实际生产环境中,我们通常希望为不同用户创建私有目录,并通过密码访问。
创建 Samba 用户
Samba 用户必须是系统用户,我们首先创建一个系统用户 sambauser。
# 创建系统用户 sudo useradd sambauser # 为该用户设置一个系统登录密码(可选) sudo passwd sambauser
使用 smbpasswd 命令为该用户创建一个 Samba 专用的密码。
# -a 选项表示添加一个 Samba 用户 sudo smbpasswd -a sambauser # 接着输入两次你想要的 Samba 密码
创建用户私有共享目录
# 创建用户私有目录 sudo mkdir -p /home/private_share # 设置目录所有者为 sambauser sudo chown -R sambauser:sambauser /home/private_share # 设置目录权限为 700 (仅所有者可读写执行) sudo chmod -R 700 /home/private_share
修改 smb.conf 文件
在 smb.conf 文件中添加一个新的共享定义 [private_share]:
[private_share] comment = Private Share for sambauser path = /home/private_share # 不允许匿名访问 guest ok = no # 允许写入 writable = yes # 设置可以访问此共享的用户或组 valid users = sambauser # 新创建的文件/目录的所有者 force user = sambauser # 新创建的文件/目录的组 force group = sambauser
配置解释:
guest ok = no: 禁止匿名访问。valid users = sambauser: 指定只有sambauser这个用户可以访问此共享。force user = sambauser: 无论哪个用户登录,在此共享中创建的文件所有者都将是sambauser,这是一个很好的安全实践,可以防止用户创建不属于自己或组权限的文件。
重启 Samba 服务
sudo systemctl restart smb
测试
从 Windows 客户端测试:
- 在文件资源管理器中访问
\\<你的CentOS_IP地址>。 - 双击
private_share,系统会提示你输入用户名和密码。 - 输入
sambauser和你设置的 Samba 密码。 - 登录成功后,你就可以对这个目录进行读写操作了,但其他用户无法看到或访问它。
第三部分:排错与管理
常见问题
-
无法访问,提示“找不到网络路径”或“拒绝访问”
- 检查防火墙:确认
firewall-cmd已开放samba服务。 - 检查 SELinux:确认
semanage fcontext和restorecon已正确执行,可以使用ls -Z /home/public_share查看上下文是否为samba_share_t。 - 检查服务状态:
systemctl status smb,确保服务正在运行。 - 检查日志:
/var/log/samba/目录下的日志文件是排错的关键,特别是log.smbd。
- 检查防火墙:确认
-
权限问题
- 使用
ls -l检查共享目录及其内部文件的 Linux 权限和所有者。 - 如果是用户共享,确保
valid users设置正确,并且用户密码正确。
- 使用
常用管理命令
# 添加 Samba 用户 sudo smbpasswd -a <username> # 删除 Samba 用户 sudo smbpasswd -x <username> # 修改 Samba 用户密码 sudo smbpasswd <username> # 列出所有 Samba 用户 sudo pdbedit -L -v # 查看共享列表 smbclient -L localhost -U <username> # 测试配置文件语法 testparm -s /etc/samba/smb.conf
通过以上步骤,你已经学会了在 CentOS 7 上配置一个既支持匿名共享也支持用户密码验证的 Samba 服务器。
- 基础配置:适用于临时文件共享,简单快捷。
- 用户配置:适用于需要安全、私有访问的场景,是生产环境中的标准做法。
- 安全要点:SELinux 和防火墙是 CentOS 环境下必须正确配置的两个关键点,也是最常见的排错点。
希望这份详细的教程对你有帮助!
