Linux 系统中搭建 SMB 服务器是实现跨平台文件共享的常见需求,SMB(Server Message Block)协议允许 Windows、Linux 和 macOS 等操作系统通过网络共享文件和打印机,本文将详细介绍在 Linux 环境下配置 SMB 服务器的完整流程,包括安装、配置、权限管理及常见问题解决,帮助用户快速搭建稳定高效的文件共享服务。

SMB 服务器的核心优势与适用场景
SMB 协议因其简单高效的特点,被广泛应用于企业内部文件共享、家庭局域网数据同步等场景,与 FTP 协议相比,SMB 支持实时文件锁定、用户权限精细控制,并能直接集成到操作系统的文件管理器中(如在 Windows 中通过 \\IP地址 访问),对于 Linux 服务器而言,通过 SMB 共享存储数据,可方便 Windows 用户与 Linux 系统进行文件交互,尤其适合混合操作环境的企业团队协作。
安装 SMB 服务器软件
在 Linux 中,最常用的 SMB 服务器软件是 Samba,它实现了 SMB/CIFS 协议,并提供了丰富的配置选项,以下以 Ubuntu/Debian 和 CentOS/RHEL 系统为例,介绍安装步骤。
Ubuntu/Debian 系统
sudo apt update sudo apt install samba -y
CentOS/RHEL 系统
sudo yum install samba samba-client samba-common -y
安装完成后,检查 Samba 服务状态:
sudo systemctl status smbd # 查看SMB服务状态 sudo systemctl enable smbd # 设置开机自启
配置共享目录与用户权限
Samba 的核心配置文件为 /etc/samba/smb.conf,用户可通过修改该文件定义共享目录、访问权限、用户认证等信息,以下是详细配置步骤:

备份原始配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
编辑配置文件
使用 vim 或 nano 打开 /etc/samba/smb.conf,清空默认内容(或保留 [global] 全局配置段),添加自定义共享配置,以下为示例配置:
[global] workgroup = WORKGROUP # 设置工作组,需与Windows工作组一致 server string = Linux Samba Server # 服务器描述信息 netbios name = LINUX-SAMBA # NetBIOS名称,用于Windows识别 security = user # 安全级别,"user"表示需用户认证 encrypt passwords = yes # 启用密码加密 map to guest = bad user # 拒绝匿名用户时映射为guest用户(可选) [shared] # 共享名称,Windows访问时显示 comment = Public Shared Folder # 共享描述 path = /home/samba/shared # 共享目录路径 browseable = yes # 是否在共享列表中可见 writable = yes # 是否允许写入 guest ok = no # 是否允许匿名访问 valid users = @samba_users # 允许访问的用户组(需提前创建) create mask = 0664 # 新建文件权限 directory mask = 0775 # 新建目录权限
创建共享目录并设置权限
sudo mkdir -p /home/samba/shared # 创建共享目录 sudo chmod -R 775 /home/samba/shared # 设置目录权限 sudo chown -R root:samba_users /home/samba/shared # 设置所有者与所属组
添加 Samba 用户
Samba 用户需为系统已存在的用户,并通过 smbpasswd 命令设置密码:
sudo useradd -M -s /sbin/nologin samba_user1 # 创建系统用户(不允许登录) sudo smbpasswd -a samba_user1 # 设置Samba密码 sudo groupadd samba_users # 创建用户组 sudo usermod -aG samba_users samba_user1 # 将用户加入用户组
启动服务与防火墙配置
启动 Samba 服务
sudo systemctl restart smbd # 重启SMB服务 sudo systemctl restart nmbd # 重启NetBIOS名称服务(用于局域网发现)
配置防火墙
允许 Samba 服务通过防火墙(以 Ubuntu 为例):
sudo ufw allow samba # 允许Samba相关端口(139, 445)
对于 CentOS/RHEL 系统:

sudo firewall-cmd --permanent --add-service=samba sudo firewall-cmd --reload
客户端访问测试
Windows 客户端
在文件资源管理器地址栏输入 \\Linux服务器IP\shared(如 \\192.168.1.100\shared),输入 Samba 用户名和密码即可访问共享目录。
Linux 客户端
安装 smbclient 工具进行命令行访问:
sudo apt install smbclient # Ubuntu/Debian sudo yum install samba-client # CentOS/RHEL
列出共享资源:
smbclient -L //Linux服务器IP -U samba_user1
挂载共享目录到本地:
sudo mkdir /mnt/samba_share sudo mount -t cifs //Linux服务器IP/shared /mnt/samba_share -o username=samba_user1,password=密码
高级配置与优化
多共享目录配置
在 smb.conf 中添加多个 [共享名称] 段即可,
[project] path = /home/samba/project writable = yes valid users = @samba_users
用户权限精细控制
- 只读用户:在
valid users中指定用户,并设置writable = no。 - 读写用户:确保用户对目录有写入权限,并通过
create mask和directory mask控制文件权限。
日志配置
在 [global] 段添加以下参数开启日志:
log file = /var/log/samba/log.%m # 按机器名生成日志 max log size = 50 # 日志文件最大50MB,超过则轮转
常见问题排查
- 无法访问共享目录:检查防火墙设置、共享目录权限、Samba 用户密码是否正确。
- 权限错误:确保
valid users中的用户对目录有操作权限,并检查selinux状态(可通过setenforce 0临时关闭测试)。
相关问答 FAQs
问题1:如何修改 Samba 共享目录的访问权限,仅允许特定用户读写?
解答:在 smb.conf 的共享配置段中,通过 valid users 指定用户,并关闭匿名访问。
[private] path = /home/samba/private writable = yes guest ok = no valid users = user1,user2 # 仅允许user1和user2访问
修改后重启 smbd 服务,并将用户加入系统用户组并设置 Samba 密码。
问题2:Linux 客户端挂载 Samba 共享时报错“mount error(13): Permission denied”如何解决?
解答:通常由权限或 SELinux 导致,可尝试以下方法:
- 检查共享目录权限:
chmod -R 775 目录 && chown -R 用户:组 目录。 - 临时关闭 SELinux:
sudo setenforce 0,若问题解决则需配置 SELinux 策略(semanage fcontext -a -t samba_share_t "目录路径" && restorecon -Rv 目录路径)。 - 确认 Samba 用户密码正确,且客户端挂载时使用的用户名与 Samba 用户一致。
