Samba 文件共享:Linux 服务器与 Windows/Mac 共享文件夹

Samba 文件共享:Linux 服务器与 Windows/Mac 共享文件夹

NFS 是 Linux 之间共享文件的方案,但 Windows 不支持 NFS(需要额外安装组件)。Samba 实现了 SMB/CIFS 协议,让 Linux 服务器上的目录在 Windows 文件资源管理器里显示为网络驱动器,Mac 的 Finder 也原生支持。家庭 NAS、办公文件服务器、开发环境文件同步,Samba 是最通用的跨平台文件共享方案。

Samba 适用场景

  • 家庭 NAS:服务器上的影视、照片目录挂载到 Windows/Mac 直接访问
  • 办公文件服务器:团队共享文档,Windows 客户端映射网络驱动器
  • 开发环境:Windows 开发机访问 Linux 服务器上的代码目录
  • Time Machine 备份:Mac 通过 Samba 备份到 Linux 服务器

服务器配置

最低 1 核 1GB,Samba 很轻量,主要是磁盘 I/O 要够。

雨云服务器 rainyun+com 有大容量数据盘机型,非常适合搭文件服务器。注册填优惠码 2026off 领 5 折优惠券。

安装 Samba

bash 复制代码
sudo apt update
sudo apt install -y samba samba-common-bin

# 验证安装
smbd --version

配置共享目录

场景一:匿名只读共享(媒体文件)

bash 复制代码
# 创建共享目录
sudo mkdir -p /srv/share/media
sudo chmod 755 /srv/share/media

# 放一些测试文件
sudo cp /etc/issue /srv/share/media/test.txt

编辑 Samba 配置:

bash 复制代码
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo nano /etc/samba/smb.conf

在文件末尾添加:

ini 复制代码
[global]
   workgroup = WORKGROUP
   server string = My File Server
   # 服务器 NetBIOS 名称(Windows 网络邻居显示的名称)
   netbios name = MYSERVER
   security = user
   # 日志
   log file = /var/log/samba/log.%m
   max log size = 1000

# 匿名只读共享(不需要密码)
[media]
   comment = Media Files
   path = /srv/share/media
   public = yes
   writable = no
   guest ok = yes
   read only = yes

场景二:需要密码的读写共享

bash 复制代码
# 创建共享目录
sudo mkdir -p /srv/share/documents
sudo chown -R nobody:nogroup /srv/share/documents
sudo chmod -R 775 /srv/share/documents

# 创建 Samba 用户(必须是系统用户)
sudo useradd -M -s /usr/sbin/nologin sambauser
sudo smbpasswd -a sambauser
# 输入密码两次

smb.conf 里添加:

ini 复制代码
[documents]
   comment = Shared Documents
   path = /srv/share/documents
   valid users = sambauser
   writable = yes
   browseable = yes
   create mask = 0660
   directory mask = 0771

场景三:多用户共享(团队协作)

bash 复制代码
# 创建组和用户
sudo groupadd staff
sudo useradd -M -s /usr/sbin/nologin alice
sudo useradd -M -s /usr/sbin/nologin bob
sudo usermod -aG staff alice
sudo usermod -aG staff bob
sudo smbpasswd -a alice
sudo smbpasswd -a bob

# 创建组共享目录
sudo mkdir -p /srv/share/team
sudo chown root:staff /srv/share/team
sudo chmod 2775 /srv/share/team    # SGID,新文件自动属于 staff 组
ini 复制代码
[team]
   comment = Team Files
   path = /srv/share/team
   valid users = @staff
   writable = yes
   browseable = yes
   create mask = 0660
   directory mask = 2770
   force group = staff

重启并测试

bash 复制代码
# 检查配置语法
testparm

# 重启 Samba
sudo systemctl restart smbd nmbd
sudo systemctl enable smbd nmbd

# 查看共享列表
smbclient -L localhost -N

防火墙配置

bash 复制代码
# Samba 使用的端口
sudo ufw allow Samba
# 等同于:
# sudo ufw allow 445/tcp
# sudo ufw allow 139/tcp
# sudo ufw allow 137/udp
# sudo ufw allow 138/udp

安全建议:只允许内网 IP 访问,不要把 Samba 暴露到公网:

bash 复制代码
sudo ufw allow from 192.168.1.0/24 to any app Samba
sudo ufw deny Samba

在 Windows 上挂载

方式一:文件资源管理器

  1. 打开文件资源管理器
  2. 地址栏输入 \\服务器IP\共享名(如 \\192.168.1.100\documents
  3. 输入 Samba 用户名和密码

方式二:映射网络驱动器(永久)

powershell 复制代码
# PowerShell 命令
net use Z: \\服务器IP\documents /user:sambauser 密码 /persistent:yes

在 macOS 上挂载

  1. Finder → 前往 → 连接服务器(⌘K)
  2. 输入 smb://服务器IP/共享名
  3. 输入用户名密码

自动挂载(每次开机):

bash 复制代码
# 在 /etc/fstab 里添加(macOS)
//sambauser@服务器IP/documents /Volumes/documents smbfs credentials=/etc/samba-creds 0 0

Mac Time Machine 备份配置

让 Mac 通过 Samba 做 Time Machine 备份:

bash 复制代码
# 创建备份目录
sudo mkdir -p /srv/share/timemachine
sudo chown sambauser:sambauser /srv/share/timemachine

# 在 smb.conf 里添加特殊配置
[timemachine]
   comment = Time Machine
   path = /srv/share/timemachine
   valid users = sambauser
   writable = yes
   vfs objects = catia fruit streams_xattr
   fruit:time machine = yes
   fruit:time machine max size = 500G
bash 复制代码
sudo systemctl restart smbd

然后在 Mac 的「系统偏好设置」→「Time Machine」→「选择磁盘」里,找到并选择这个 Samba 共享。

查看连接状态

bash 复制代码
# 查看当前连接的用户
smbstatus

# 查看 Samba 日志
sudo tail -f /var/log/samba/log.smbd

Samba 是最通用的跨平台文件共享方案,Windows、macOS、Linux 三端都能无缝访问。在雨云rainyun上搭建文件服务器,可以配合大容量数据盘存储媒体和文档,大容量机型价格实惠,搭一台私有 NAS 替代群晖。

相关推荐
Methy4 分钟前
IoTHub半个月崩了五次?都是裸rethrow惹的祸
服务器·c++·后端
Wang's Blog9 分钟前
Java 项目实战: 外卖平台-后台系统登录功能开发
java·服务器·redis
AxureMost34 分钟前
VideoProc Converter AI 视频转换/下载/超分辨率
windows
天天喝旺仔38 分钟前
Linux 性能排查实战:用 perf、strace 与火焰图定位 CPU、内存与 IO 瓶颈
linux·性能优化·运维开发
LuminousCPP44 分钟前
Linux系统编程(二):从目录树到命令执行|路径、环境变量、alias 与文件操作入门
linux·经验分享·笔记
第十人i1 小时前
Linux 系统初始化配置清单:新服务器快速部署
linux·服务器
LongRunning1 小时前
【Linux】RK3568-OpenCV+YOLO(七)
linux
j7~1 小时前
【Linux】三十八.C++ 手写 HTTP 服务器:裸 socket + fork 多进程,从 HTTP 报文解析到浏览器打开网页
linux·网络·网络协议·学习·http·网络编程
李小白杂货铺1 小时前
从 macOS 免密 SSH 到 Windows 10 完整配置指南
windows·win10·openssh·踩坑·ssh服务器·免密连接·安装和配置
傲世仙尊2 小时前
设计者的取舍-路径fork的诞生与全局文件队列
linux