概述
Samba 是一个开源软件套件,它实现了 SMB/CIFS 协议,允许 Linux/Unix 系统与 Windows 系统进行文件和打印机共享,配置 Samba 服务器主要有三个核心步骤:

- 安装 Samba 软件包
- 配置 Samba (创建共享目录、设置用户权限)
- 启动并启用服务,并配置防火墙
第一步:安装 Samba
我们需要更新系统软件包列表并安装 Samba 主程序包。
- 打开终端 (Terminal)。
- 更新系统:
sudo dnf update -y
- 安装 Samba:
sudo dnf install samba -y
- 验证安装:
samba --version
如果看到版本信息,说明安装成功。
第二步:配置 Samba
这是最关键的一步,我们将创建一个名为 public 的公共共享目录和一个名为 secure 的需要用户名和密码才能访问的私有共享目录。
创建共享目录
建议在 /srv 目录下创建共享,这是 Linux 系统中用于存放服务数据的推荐位置。

# 创建公共共享目录 sudo mkdir -p /srv/samba/public # 创建私有共享目录 sudo mkdir -p /srv/samba/secure # 设置目录所有者为 root,samba 组为共享组 sudo chown -R root:samba /srv/samba
创建 Samba 用户和设置密码
Samba 的用户必须是您系统中的有效用户,我们将为现有用户(fedora)创建一个 Samba 密码。
-
添加系统用户到
samba组 (如果还没有的话):# 将用户 fedora 添加到 samba 组 sudo usermod -aG samba fedora
提示:您也可以创建一个专门用于 Samba 访问的系统用户,
sudo useradd -s /sbin/nologin smbuser。 -
为用户设置 Samba 密码: 这个密码独立于用户的系统登录密码。
(图片来源网络,侵删)sudo smbpasswd -a fedora
系统会提示您输入并确认一个新密码,这个密码就是将来在 Windows 中访问共享时需要输入的密码。
编辑 Samba 主配置文件
Samba 的主要配置文件是 /etc/samba/smb.conf,我们建议先备份原始文件,然后进行编辑。
# 备份原始配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak # 使用您喜欢的编辑器打开配置文件,nano 或 vim sudo nano /etc/samba/smb.conf
在文件末尾添加以下配置内容:
# ==================================================================== # Samba Share Configurations # ==================================================================== [global] # 设置工作组,以便在 Windows 网络中正确显示 workgroup = WORKGROUP # 设置服务器描述信息 server string = Fedora Samba Server # 允许 Windows 客户端浏览共享列表 netbios name = FEDORA-SAMBA # 允许guest账户,用于公共共享 map to guest = Bad User # ==================================================================== # 公共共享 - 无需密码即可访问 # ==================================================================== [public] comment = Public Share - No Password Required path = /srv/samba/public browsable = yes guest ok = yes # 允许 guest 访问 read only = yes # 只读模式 force user = nobody # 所有文件的所有者设为 nobody create mask = 0644 # 新建文件的权限 directory mask = 0755 # 新建目录的权限 # ==================================================================== # 私有共享 - 需要用户名和密码才能访问 # ==================================================================== [secure] comment = Secure Share - Requires Authentication path = /srv/samba/secure browsable = yes valid users = fedora # 只有 fedora 用户可以访问 guest ok = no # 禁止 guest 访问 writable = yes # 允许写入 create mask = 0664 # 新建文件的权限 directory mask = 0775 # 新建目录的权限 # ==================================================================== # 打印机共享 (可选) # ==================================================================== #[printers] # comment = All Printers # path = /var/spool/samba # browseable = no # guest ok = no # writable = no # printable = yes
配置解释:
[global]: 全局设置。workgroup: 必须与您 Windows 的工作组名称一致(通常是WORKGROUP)。map to guest = Bad User: 当用户无法验证时,将其作为 guest 用户对待,这对于公共共享很重要。
[public]: 共享名称,在 Windows 网络中会显示为public。path: 共享的绝对路径。guest ok = yes: 允许来宾用户(无需密码)访问。read only = yes: 来宾用户只能读取,不能修改。
[secure]: 需要认证的共享。valid users = fedora: 明确指定只有fedora用户可以访问。writable = yes: 允许此用户写入。guest ok = no: 禁止来宾访问。
验证配置文件语法
保存并关闭编辑器后,运行以下命令检查 smb.conf 文件是否有语法错误:
testparm -s
如果输出 Loaded services file OK.,则表示配置文件语法正确。
第三步:设置 SELinux 和防火墙
Fedora 默认启用 SELinux 和 firewalld,这是安全的关键,但需要我们为 Samba 服务进行正确的配置。
配置 SELinux
SELinux 默认会阻止 Samba 访问共享目录,我们需要为共享目录设置正确的 SELinux 上下文。
- 为公共共享目录设置上下文:
sudo semanage fcontext -a -t samba_share_t "/srv/samba/public(/.*)?"
- 为私有共享目录设置上下文:
sudo semanage fcontext -a -t samba_share_t "/srv/samba/secure(/.*)?"
- 应用新的上下文:
sudo restorecon -Rv /srv/samba/
注意:
semanage命令提示 "Command not found",您需要先安装policycoreutils-python-utils包:sudo dnf install policycoreutils-python-utils。
配置防火墙
firewalld 默认会阻止 Samba 所需的端口(139, 445 以及用于 NetBIOS 的 137, 138),我们需要将这些端口永久开放。
# 添加 Samba 服务到防火墙规则集(推荐方式) sudo firewall-cmd --permanent --add-service=samba # 重新加载防火墙规则以使更改生效 sudo firewall-cmd --reload
第四步:启动并启用 Samba 服务
所有配置都已完成,我们可以启动服务并设置为开机自启。
# 启动 smb 服务 (处理文件和打印共享) sudo systemctl start smb # 启动 nmb 服务 (处理 NetBIOS 名称解析,用于网络浏览) sudo systemctl start nmb # 将 smb 和 nmb 服务设置为开机自启 sudo systemctl enable smb sudo systemctl enable nmb
检查服务状态
# 查看服务是否正在运行 sudo systemctl status smb nmb # 查看最近的日志,排查问题 journalctl -u smb
第五步:从客户端访问共享
您的 Samba 服务器已经准备就绪!
从 Windows 访问
- 在 Windows 的文件资源管理器地址栏中,输入
\\<你的FedoraIP地址>。\\192.168.1.100
- 您应该能看到两个共享文件夹:
public和secure。 - 访问
public:直接双击即可,无需输入密码。 - 访问
secure:双击后,系统会提示您输入用户名和密码。- 用户名:
FEDORA-SAMBA\fedora或者直接fedora - 密码:您之前用
smbpasswd设置的密码。
- 用户名:
从 Linux (Fedora) 访问
- 使用文件管理器:
- 在地址栏输入
smb://<你的FedoraIP地址>。 - 您会看到
public和secure共享。public可以直接访问,secure会弹出身份验证窗口。
- 在地址栏输入
- 使用命令行挂载 (可选):
- 创建一个本地挂载点:
mkdir ~/mnt/secure
- 挂载私有共享:
# -o username=你的用户名,password=你的密码 sudo mount -t cifs //192.168.1.100/secure /home/你的用户名/mnt/secure -o username=fedora,password=你的密码,iocharset=utf8
- 卸载时使用:
sudo umount /home/你的用户名/mnt/secure
- 创建一个本地挂载点:
故障排除
如果遇到问题,请检查以下几点:
- 防火墙:确认
firewalld已允许samba服务。sudo firewall-cmd --list-all
- SELinux:如果怀疑是 SELinux 问题,可以临时将其设置为
Permissive模式进行测试(不推荐长期使用)。sudo setenforce 0
如果问题解决,请恢复为
Enforcing模式 (sudo setenforce 1) 并重新检查 SELinux 上下文设置。 - SELinux 布尔值:某些操作可能需要启用特定的 SELinux 布尔值。
# 允许 Samba 写入公共目录 sudo setsebool -P samba_enable_home_dirs on
- 日志文件:查看 Samba 的日志是排查问题的最佳方式。
- 主要日志:
/var/log/samba/log.smbd和/var/log/samba/log.nmbd - 使用
tail -f /var/log/samba/log.smbd可以实时查看日志。
- 主要日志:
- 网络:确保您的 Fedora 服务器和客户端在同一个局域网内,并且可以互相
ping通。
至此,您已经成功在 Fedora 上配置好了一个功能完善的 Samba 服务器!
