目录
环境准备
- 一台已经安装好的 CentOS 7/8/9 服务器。
- 一个具有
sudo或root权限的用户账户。 - 确保服务器和客户端(Windows 或其他 Linux 机器)在同一个局域网内,并且可以相互
ping通。
安装 Samba
更新系统的软件包列表,然后安装 Samba。

# 更新软件包缓存 sudo dnf update -y # 安装 Samba 软件包 sudo dnf install samba samba-common -y
创建 Samba 用户和共享目录
Samba 使用自己的用户密码数据库,而不是直接使用系统用户,我们将创建一个系统用户,然后为这个用户设置 Samba 密码。
1 创建系统用户(可选但推荐)
虽然可以直接为系统用户设置 Samba 密码,但为了安全和管理方便,我们通常创建一个专门用于访问 Samba 共享的用户。
# 创建一个名为 sambauser 的系统用户(不会创建主目录,不可登录) sudo useradd -s /sbin/nologin sambauser # (可选) 为这个系统用户设置一个登录密码,方便管理 sudo passwd sambauser
2 创建共享目录
我们将创建一个目录 /srv/samba/share 作为共享文件夹。
# 创建共享目录 sudo mkdir -p /srv/samba/share # 设置目录所有者为我们刚刚创建的 sambauser sudo chown -R sambauser:sambauser /srv/samba/share # 设置适当的权限,让用户可以在里面读写 sudo chmod -R 770 /srv/samba/share
3 为用户设置 Samba 密码
这是最关键的一步,使用 smbpasswd 命令为 sambauser 用户设置 Samba 专用的密码。

# -a 参数表示添加用户 sudo smbpasswd -a sambauser
系统会提示你输入并确认一个密码,这个密码将用于从客户端访问 Samba 共享。
配置 Samba 主配置文件
Samba 的主要配置文件是 /etc/samba/smb.conf,我们将对其进行编辑。
# 使用你喜欢的文本编辑器打开文件,vim sudo vim /etc/samba/smb.conf
打开文件后,可以清空或注释掉所有内容,然后添加以下基本配置,这是一个清晰、易于管理的结构。
#======================= Global Settings ======================= [global] # 工作组,需要与你的 Windows 工作组一致,通常是 WORKGROUP workgroup = WORKGROUP # 设置服务器描述信息,在网络上显示为 server string = Samba Server %v # 设置日志文件路径和级别 log file = /var/log/samba/log.%m max log size = 50 # 安全级别,我们使用 user,表示需要用户名和密码验证 security = user # 如果你想让所有用户都能看到这个共享,但需要密码才能访问,可以取消下面这行的注释 # map to guest = Bad User #======================= Share Definitions ======================= [share] # 共享的名称,客户端将看到这个名字 comment = Public Share # 共享的路径 path = /srv/samba/share # 是否允许 guests 访问,我们设置为 no,因为需要用户认证 guest ok = no # 是否允许写入 writable = yes # 新创建的文件和目录的权限掩码 # 设置为 0770 表示所有者和组有读写执行权限,其他用户无权限 # 这与目录的权限设置相匹配 create mask = 0770 directory mask = 0770 # 共享目录的有效用户列表,只有列表中的用户可以访问 # 我们这里设置为我们的 sambauser valid users = sambauser
配置解释:

[global]: 全局设置,影响整个 Samba 服务器。[share]: 这是一个共享段的定义,你可以定义多个共享段([public],[dev]等)。security = user: 这是最重要的安全设置,它要求每个连接的客户端都必须提供一个有效的用户名和密码,并且该用户必须是服务器上已存在的 Samba 用户。path: 指向你要共享的本地目录。writable = yes: 允许用户向共享目录写入文件。valid users = sambauser: 限制只有sambauser这个用户可以访问此共享,如果你想允许多个用户,可以用逗号分隔,valid users = user1, user2, @sambagroup。
保存并退出编辑器。
设置 SELinux 和防火墙
在 CentOS 上,SELinux 和防火墙是必须正确配置的,否则 Samba 服务将无法正常访问。
1 配置 SELinux
SELinux 默认会阻止 Samba 访问文件系统,我们可以使用 setsebool 命令来调整策略。
# 允许 Samba 对用户主目录和公共目录的读写访问 sudo setsebool -P samba_enable_home_dirs on # 允许 Samba 共享和写入非标准目录(如 /srv/samba) sudo setsebool -P samba_export_all_rw on
提示: 使用
-P参数可以使设置永久生效,重启后依然有效。
2 配置防火墙
使用 firewall-cmd 命令开放 Samba 所需的端口(139/TCP, 445/TCP 以及用于 NetBIOS 名称服务的 137/UDP 和 138/UDP)。
# 永久添加 samba 服务到防火墙规则中 sudo firewall-cmd --permanent --add-service=samba # 重新加载防火墙规则以使更改生效 sudo firewall-cmd --reload
启动并设置开机自启
启动 smb 服务(Samba的核心文件共享服务)和 nmb 服务(负责 NetBIOS 名称解析),并设置它们在系统启动时自动运行。
# 启动 smb 和 nmb 服务 sudo systemctl start smb sudo systemctl start nmb # 设置开机自启 sudo systemctl enable smb sudo systemctl enable nmb # 检查服务状态,确保是 active (running) sudo systemctl status smb sudo systemctl status nmb
从客户端连接测试
你的 Samba 服务器已经配置完成!可以从客户端进行测试。
在 Windows 上测试
- 打开“文件资源管理器”。
- 在地址栏输入
\\<你的服务器IP地址>,然后按回车。\\192.168.1.100
- 系统会弹出身份验证窗口。
- 用户名: 输入
sambauser - 密码: 输入你在第 3.3 步中设置的 Samba 密码。
- 你应该能看到名为
share的共享文件夹,并且可以像访问本地磁盘一样读写文件。
在 Linux 上测试
- 确保你的 Linux 客户端安装了
samba-client包。sudo dnf install samba-client -y
- 使用
smbclient命令进行命令行测试。# -L 参数列出服务器上的所有共享 # -U 指定用户名 smbclient -L //localhost/ -U sambauser
系统会提示你输入密码,成功后,你会看到
share共享。
