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 替代群晖。

相关推荐
liudanzhengxi1 小时前
CRM系统技术文章
linux·服务器·网络·人工智能·新人首发
南境十里·墨染春水1 小时前
守护进程编程流程
linux·学习
STDD2 小时前
Teeworlds / DDNet 服务器搭建:经典 2D 竞技平台游戏
服务器·游戏·github
在繁华处2 小时前
轻棋局(一):项目总览与架构设计
人工智能·windows
eggrall2 小时前
Linux进程信号——像收快递一样理解 Linux 信号
linux·开发语言·c++
灰色人生qwer2 小时前
Python 规则:带默认值的参数必须放在不带默认值的后面
linux·windows·python
STDD3 小时前
Alien Swarm《异星虫群》: Reactive Drop 专用服务器搭建教程
运维·服务器·github
嘿嘿嘿x33 小时前
Linux-实践
linux·运维·算法
lzh200409193 小时前
手撕线程池:巩固Linux线程知识
linux·c++