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

相关推荐
KING-WU51211 分钟前
Linux 工具之Make 与 Makefile
java·linux·服务器
阿乔外贸日记13 分钟前
全球电子产业高度集中:中、韩、日和中国台湾地区占全球数字硬件产能八成
大数据·服务器·人工智能·物联网·云计算
Lsetea29 分钟前
OpenSSL报certificate is not yet valid:error 9与notBefore时间排查
linux·运维·https·ssl证书·openssl
魔法阵维护师30 分钟前
Linux 命令行入门踩坑记录:从 VMware 装系统到文件管理
linux·运维·服务器
打工仔折腾 AI1 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
qq_543447821 小时前
DNS解析怎么排查?故障处理与运维实用手册
运维·服务器·网络·php
DeviceHub1 小时前
AI服务器电源设计进阶:TLVR电感的应用解析与选型验证指南
运维·服务器·人工智能
Apipi*1 小时前
30天速通Linux 第七章进程间通信
linux·运维·服务器
emo_2b1 小时前
Pycharm配置conda解释器时遇到的问题及解决方法
linux·pycharm·conda
极光通讯1 小时前
服务器内存替代料选型方法论:主料号缺货时如何找到Pin-to-Pin兼容型号
运维·服务器