Samba 文件共享跨平台

FreeGuideOnline 25阅读 2026-07-11

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

说明interfacesbind 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 连接

方法一:通过文件资源管理器

  1. 打开文件资源管理器,在地址栏输入 \\服务器IP地址\\主机名,例如 \\192.168.1.100\\fileserver
  2. 首次连接时可能会要求输入凭据,使用之前设置的 Samba 用户名和密码(格式:服务器名\用户名 或直接输入用户名,有时系统会自动加前缀)。
  3. 登录后即可看到所有你有权访问的共享文件夹,右键映射网络驱动器以获得长久访问。

常见问题:如果提示“无法访问”,请检查:

  • 两台电脑是否在同一局域网或VPN内。
  • Samba 服务是否正在运行,防火墙是否放行。
  • 在 Windows 中启用 SMB 1.0/CIFS 支持(不推荐,SMB1 有严重安全漏洞)。我们配置已关闭 SMB1,所以应确保您的 Windows 版本支持 SMB2/3(Win 8以后默认支持)。如果必须连接老旧设备,可临时添加 server min protocol = NT1 并重启 Samba,但务必限制用途。

macOS 连接

方式一:Finder 侧栏连接

  1. 在桌面点按“前往” -> “连接服务器…” (或快捷键 Command+K)。
  2. 在服务器地址栏输入:smb://服务器IP地址smb://主机名.local,例如 smb://192.168.1.100
  3. 点按“连接”,选择“注册用户”,输入 Samba 用户名和密码。
  4. 选择想要挂载的共享卷即可在 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.smbdlog.nmbd 包含服务器常规信息。每台客户端也会生成独立日志 log.客户端名称

实时跟踪日志以调试认证失败:

sudo tail -f /var/log/samba/log.smbd