CentOS 7 Samba 共享配置完整教程

当一台 CentOS 服务器上跑着网站,运维同事却要在 Windows 里直接改服务器目录里的文件时,最省事的方案往往不是开 FTP,而是装一个 Samba。Samba 实现了 SMB/CIFS 协议,让 Windows 可以把 Linux 目录映射成网络驱动器,像操作本地文件夹一样读写,拖拽上传、直接编辑都很自然。

本文以网站环境常见的目录结构为例:把 /www/wwwroot 共享出去,Windows 用户通过 \\IP地址\web 访问。以下操作默认以 root 用户执行。

1. 安装 Samba

yum install samba samba-client -y

samba-client 用来在服务器本地测试连接,例如用 smbclient -L localhost -U www 检查共享是否可见。

2. 启动服务

systemctl start nmb.service && systemctl start smb.service

nmb.service 负责 NetBIOS 名称解析与主机广播,smb.service 提供文件和打印共享,两个服务都要启动。建议同时设置开机自启:

systemctl enable nmb.service smb.service

3. 备份配置文件

cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

4. 修改配置文件

vi /etc/samba/smb.conf

内容如下:

[global]
server string = mysite samba
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd

# web 为访问时的共享名,path 为服务器实际路径
[web]
workgroup = www
netbios name = www
path = /www/wwwroot
browseable = yes
writeable = yes

几个关键项说明:

  • security = user 表示采用用户级认证,客户端必须以有效 Samba 账户登录;
  • encrypt passwords = yes 启用密码加密传输,早期协议默认明文,必须开启;
  • browseable = yes 让共享出现在"网络邻居"里,writeable = yes 允许写入。

如果希望只允许指定网段的机器访问,可以在 [web] 段加一行 hosts allow = 192.168.1.0/24

5. 建立 smbpasswd

cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd

提示:新版 Samba 已不推荐 mksmbpasswd.sh 这种整体导入方式,更稳妥的做法是先建立系统用户 useradd -s /sbin/nologin www,再单独执行 smbpasswd -a www 设置 Samba 密码。按原文步骤操作也可以,二者最终效果一致。

添加 www 用户并设置 www 的密码:

smbpasswd -a www

/etc/samba/smbusers 中添加 www 用户映射:

www = network service

6. 重启 Samba 服务

systemctl restart smb.service

7. 设置目录权限

/www/wwwroot 目录的属主设置为 www,并给予 www 用户所有权限:

chown -R www:www /www/wwwroot && chmod -R 755 /www/wwwroot

注意:755 对属主可写、对组和其他用户只读。如果希望多个人协作编辑,可以把组改为 775,并把协作者加入 www 组。权限设置不正确是"能连上但写不了"最常见的根因。

8. Windows 客户端访问

在 Windows 资源管理器地址栏输入 \\IP地址\web,弹出登录框后输入 www 及其 Samba 密码即可进入。也可以在"映射网络驱动器"里指定盘符,这样每次开机都能直接访问。macOS 则在 Finder 中按 Cmd+K 输入 smb://IP地址/web

一键配置安装命令(推荐)

yum install samba samba-client -y && systemctl start nmb.service && systemctl start smb.service
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

sudo tee /etc/samba/smb.conf <<-'EOF'
[global]
server string = web samba
security = user
encrypt passwords = yes
smb passwd file = /etc/samba/smbpasswd

[web]
workgroup = www
netbios name = www
path = /www/wwwroot
browseable = yes
writeable = yes
EOF

cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
smbpasswd -a www

输入 www 的密码后继续执行下面的代码:

echo 'www = network service' >> /etc/samba/smbusers
echo 'systemctl start nmb.service && systemctl start smb.service' >> /etc/rc.d/rc.local && chmod +x /etc/rc.d/rc.local
chown -R www:www /www/wwwroot && chmod -R 755 /www/wwwroot
systemctl restart smb.service && echo "Samba install success."

把启动命令写进 /etc/rc.d/rc.local 并赋予执行权限,可以保证重启后 Samba 自动运行,适合不希望额外写 systemd 单元的简易场景。

安全与多用户建议

共享目录直接暴露在局域网里,有几个安全点值得注意:

  • 不要用 root 映射 Samba 账户:给每个协作者建立独立的系统用户和 Samba 密码,方便审计谁改了什么;
  • 限制网段:在 [web] 段加 hosts allow = 192.168.1.0/24,只允许内网访问,避免共享直接暴露在公网;
  • 只共享必要目录:别把整个家目录或根目录共享出去,按需开最小权限;
  • 及时回收账户:员工离职后记得执行 smbpasswd -x 用户名 删除对应 Samba 账户。

如果希望某部分对匿名访客只读,可以在 [global] 段加 map to guest = Bad User,并在共享段去掉 writeable = yes。但网站目录一般不建议开 guest,容易留下安全隐患。

配置完成后,Linux 客户端同样可以用 cifs 挂载这份共享,实现服务器之间、桌面与服务器之间共用同一目录:

yum install cifs-utils -y
mount -t cifs //服务器IP/web /mnt/web -o username=www,password=你的密码

一个典型的多用户场景

假设一个三人小团队要共享 /www/wwwroot:设计师要可读写,两位后端只读。可以拆成两个共享:

[web]
path = /www/wwwroot
valid users = designer, dev1, dev2
read only = yes

[web-write]
path = /www/wwwroot
valid users = designer
writeable = yes

给设计师的账户 writeable = yes,其他人只读,再配合目录权限 chmod -R 750 /www/wwwroot,把设计师设为属主、其他人加入同一组。这样既能满足协作,又不会因为某人误删文件造成事故。

常见问题排查

  1. Windows 提示网络错误:先检查防火墙是否放行 Samba 端口(TCP 139/445、UDP 137/138):

    firewall-cmd --permanent --add-service=samba && firewall-cmd --reload
    
  2. 能连上但无法写入:按第 7 步确认目录属主与权限;另外 CentOS 7 默认开启 SELinux,如果出现权限异常,检查并放行相关布尔值:

    setsebool -P samba_export_all_rw on
    
  3. 修改配置不生效:Samba 会缓存配置,改完 smb.conf 后必须 systemctl restart smb.service,并用 testparm 检查语法:

    testparm
    
  4. 老设备连不上(旧款打印机、监控录像机、老电视等):这类设备通常只支持 SMB1,而新版本 Samba 默认禁用了旧协议。确实需要兼容时,可以在 [global] 段加一行 server min protocol = NT1,但 SMB1 存在已知安全漏洞,仅建议在隔离的内网使用,公网环境应保持禁用。

  5. 提示文件被占用、无法保存:多人同时编辑同一文件时 Samba 会加锁。用 smbstatus 能查看当前所有活跃连接和锁定的文件,快速定位是谁占用了目标文件:

    smbstatus
    

    排查权限或认证问题时,也可以实时观察访问日志,认证失败、路径不存在等错误都会记录在里面,比逐项猜原因快得多:

    journalctl -u smb -f
    

配置好 Samba 服务端后,其他机器可以通过 cifs 方式挂载该共享目录,方法可参考CentOS 服务器之间相互挂载(Samba)。更多服务器配置与运维内容请查看云服务器分类。

参考:Samba 官方文档 https://www.samba.org/samba/docs/,原文链接:https://www.cnblogs.com/cqzhuomi/articles/17283676.html(博客园 CQZHUOMI,转载)