Samba 文件共享跨平台
bash sudo apt update sudo apt install samba samba-common-bin
`samba-common-bin` 包含 `smbpasswd` 等管理工具,建议一并安装。
**CentOS 7/8 或 RHEL 系列**
```bash
# CentOS 7
sudo yum install samba samba-client
# CentOS 8 或 Rocky Linux 8+
sudo dnf install samba samba-client
安装完成后,启用并启动 Samba 服务:
sudo systemctl enable --now smbd nmbd
检查服务状态,确保没有报错:
sudo systemctl status smbd nmbd
步骤二:配置基础共享目录
相关系统用户与目录准备
首先创建一个系统用户和用于共享的目录。假设我们要创建一个用户 shareuser 并分享 /srv/shared 文件夹。
# 创建用于共享的目录
sudo mkdir -p /srv/shared
# 创建系统用户(如果是真实使用,请用您的实际用户名)
sudo useradd -m shareuser
# 设置系统用户密码
sudo passwd shareuser
# 将共享目录的所有权交给该用户
sudo chown shareuser:shareuser /srv/shared
# 设置合适的权限(可根据需要调整)
chmod 755 /srv/shared
备份原始配置并开始编辑
Samba 的配置文件位于 /etc/samba/smb.conf。在进行修改前,请一定备份:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
然后用你熟悉的编辑器打开配置文件:
sudo nano /etc/samba/smb.conf
全局设置优化
在 [global] 段中加入或修改以下关键参数,这些设置能提升兼容性和性能:
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
# 日志与调试
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
# 网络相关
interfaces = 127.0.0.0/8 eth0
bind interfaces only = yes
# 安全与认证
security = user
map to guest = bad user
# 协议优化(强制使用 SMB2 以上版本)
server min protocol = SMB2_02
client min protocol = SMB2_02
# 解决 macOS Finder 某些显示问题
vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:metadata = stream
fruit:model = MacSamba
fruit:veto_appledouble = no
fruit:posix_rename = yes
fruit:wipe_intentionally_left_blank_rfork = yes
说明:
interfaces和bind interfaces only按你的实际网卡名称填写(可用ip a查看)。fruit相关设置是专门为 macOS 客户端优化的,可以更好地支持 Spotlight 索引和文件扩展属性。
添加一个需要身份验证的共享
在文件末尾追加一个共享定义,例如:
[MySharedFolder]
comment = 内部文件共享
path = /srv/shared
browseable = yes
read only = no
create mask = 0640
directory mask = 0750
valid users = shareuser
参数解释:
path:共享目录的绝对路径。browseable:是否在网络邻居中可见,设为yes。read only = no:允许写入。create mask/directory mask:新建文件和目录的权限掩码。valid users:仅允许该用户(或用户组)访问,多个用户用空格分隔。
添加公共只读共享(可选)
如果需要一个所有人都能读取的共享,可以增加类似这样的段落:
[PublicReadOnly]
comment = 公共只读资料
path = /srv/public_readonly
read only = yes
guest ok = yes
browseable = yes
确保对应的目录存在且权限至少为 755,所有文件为 644。
测试配置文件语法
每次修改 smb.conf 后,务必检查语法是否正确:
testparm
它会显示配置有效内容,并指出可能的错误。无错误后,重启 Samba 服务使新配置生效:
sudo systemctl restart smbd nmbd
步骤三:创建 Samba 用户并设置密码
前面创建的 shareuser 还是一个系统用户,现在为他设立独立的 Samba 密码:
sudo smbpasswd -a shareuser
输入并确认密码。以后若要禁用某用户:sudo smbpasswd -d 用户名;若要删除:sudo smbpasswd -x 用户名。
重要:Samba 服务重启后,用户认证信息才会完全刷新,若无特殊需要,建议创建用户后也重启一次服务。
步骤四:配置防火墙
如果服务器运行防火墙,需要允许 Samba 相关服务。
UFW(Ubuntu)
sudo ufw allow samba
firewalld(CentOS/RHEL)
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
iptables(传统方式)
若使用 iptables,需要放开 137-139(UDP/TCP) 和 445(TCP) 端口。通常不建议手动添加复杂规则,使用服务名配置更为安全。
步骤五:从不同平台连接共享
Windows 连接
方法一:通过文件资源管理器
- 打开文件资源管理器,在地址栏输入
\\服务器IP地址或\\主机名,例如\\192.168.1.100或\\fileserver。 - 首次连接时可能会要求输入凭据,使用之前设置的 Samba 用户名和密码(格式:
服务器名\用户名或直接输入用户名,有时系统会自动加前缀)。 - 登录后即可看到所有你有权访问的共享文件夹,右键映射网络驱动器以获得长久访问。
常见问题:如果提示“无法访问”,请检查:
- 两台电脑是否在同一局域网或VPN内。
- Samba 服务是否正在运行,防火墙是否放行。
- 在 Windows 中启用 SMB 1.0/CIFS 支持(不推荐,SMB1 有严重安全漏洞)。我们配置已关闭 SMB1,所以应确保您的 Windows 版本支持 SMB2/3(Win 8以后默认支持)。如果必须连接老旧设备,可临时添加
server min protocol = NT1并重启 Samba,但务必限制用途。
macOS 连接
方式一:Finder 侧栏连接
- 在桌面点按“前往” -> “连接服务器…” (或快捷键
Command+K)。 - 在服务器地址栏输入:
smb://服务器IP地址或smb://主机名.local,例如smb://192.168.1.100。 - 点按“连接”,选择“注册用户”,输入 Samba 用户名和密码。
- 选择想要挂载的共享卷即可在 Finder 中出现。
方式二:终端使用 mount 命令(高级)
mkdir ~/mnt_shared
mount -t smbfs //用户名@服务器IP/MySharedFolder ~/mnt_shared
按提示输入密码。卸载使用 umount ~/mnt_shared。
若使用我们在 [global] 中添加的 fruit 模块,macOS 的 Time Machine 甚至可以备份到 Samba 共享(需要额外设置 fruit:time machine = yes,本教程作为基础配置未展开)。
Linux 客户端连接(使用 CIFS)
多数现代 Linux 桌面环境内置了 Samba 客户端。例如在 GNOME 的文件管理器中按 Ctrl+L 输入 smb://服务器IP/ 即可浏览。
命令行挂载(适用于无桌面环境或脚本)
安装 cifs-utils:
sudo apt install cifs-utils # Debian/Ubuntu
sudo dnf install cifs-utils # RHEL/CentOS
创建挂载点并手动挂载:
mkdir ~/myshare
sudo mount -t cifs //服务器IP/MySharedFolder ~/myshare -o username=shareuser,uid=$(id -u),gid=$(id -g)
它会提示密码输入。若要避免交互,可将凭据写入文件(例如 ~/.smbcredentials):
username=shareuser
password=你的密码
dom=WORKGROUP
然后挂载命令改为:
sudo mount -t cifs //服务器IP/MySharedFolder ~/myshare -o credentials=/home/你的用户/.smbcredentials,uid=1000,gid=1000,iocharset=utf8
开机自动挂载:在 /etc/fstab 中添加类似条目:
//192.168.1.100/MySharedFolder /home/你的用户/myshare cifs credentials=/home/你的用户/.smbcredentials,uid=1000,gid=1000,iocharset=utf8,nofail 0 0
注意 nofail 是为了防止服务器暂时不可用时导致系统启动卡住。
步骤六:日常管理与问题排查
查看当前连接和打开的文件
sudo smbstatus
输出会显示正在连接的客户端、访问的共享以及锁定的文件。对于排查权限问题非常有用。
实时日志监控
Samba 日志通常存放于 /var/log/samba/,其中 log.smbd 和 log.nmbd 包含服务器常规信息。每台客户端也会生成独立日志 log.客户端名称。
实时跟踪日志以调试认证失败:
sudo tail -f /var/log/samba/log.smbd