Ubuntu 20.04、22.04 下 Samba 服务完整配置指南:从文件共享到开机自动挂载
概述
Samba 是一款在 Linux/UNIX 上实现 SMB/CIFS 协议的开源工具,核心作用就是打通 Linux 和 Windows、MacOS 这些系统之间的 “文件共享壁垒”—— 装上 Samba,局域网里不同系统的设备(比如 Ubuntu 服务器、Windows 电脑、Mac 笔记本)就能互相访问共享的文件、打印机这些资源,是中小局域网里跨平台资源共享的 “标配工具”。
它的核心原理可以拆成两点来看:
- 协议兼容:SMB(Server Messages Block,服务器消息块)是微软主导的局域网共享协议,Samba 在 Linux 上把这个协议重新实现了一遍,让非 Windows 系统也能 “听懂” 并响应 SMB 请求;
- 跨网扩展:靠着 “NetBIOS over TCP/IP” 这套机制,Samba 不光能在局域网内共享资源,还能通过公网(得配端口映射)让远程设备也安全访问(不过要注意权限控制)。
一、第一步:安装 Samba 服务(Ubuntu 通用)
在 Ubuntu 下用 apt 包管理器就能很快装好 Samba,不用自己编译源码,命令如下(Ubuntu 20.04、22.04 以及后续版本都适用):
# 更新软件源索引(可选,确保安装最新版本)
sudo apt update -y
# 安装 Samba 服务(-y 自动确认安装,无需手动输入 y)
sudo apt install -y samba
装完之后,可以用下面这条命令看看服务是不是正常起来了:
# 查看 Samba 主服务(smbd)状态
sudo systemctl status smbd.service
如果输出里显示 active (running),就说明 Samba 服务已经成功启动了。
二、第二步:配置 Samba 共享目录(核心步骤)
Samba 的配置文件在 /etc/samba/smb.conf,得改这个文件来定义 “共享名称、共享路径、访问权限” 这些关键参数。下面以 “共享 Ubuntu 用户 roger 的主目录 /home/roger” 为例,把完整的配置流程走一遍。
1. 备份原始配置文件(避免误操作无法恢复)
改系统配置文件之前,建议先把原文件备份一下,万一改错了还能恢复:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
2. 编辑 Samba 配置文件
用 vi 或者 nano 编辑配置文件(不熟悉 vi 的话,可以换成 sudo nano /etc/samba/smb.conf,操作更简单):
sudo vi /etc/samba/smb.conf
在配置文件的末尾加上下面这段共享规则(注释里写了每个参数是啥意思,你可以按实际需要改):
# 共享名称:客户端访问时显示的名称(如 Windows 下会看到“share”文件夹)
[share]
comment = Ubuntu Samba Share # 共享描述(可选,用于说明共享用途)
path = /home/roger # 实际共享的目录路径(需确保路径存在)
create mask = 0755 # 客户端新建文件时的默认权限(所有者 rwx,其他 rx)
directory mask = 0755 # 客户端新建目录时的默认权限(与文件权限一致)
valid users = roger # 允许访问的用户(仅 roger 可访问,多个用户用逗号分隔)
force user = roger # 强制将共享目录的操作归属为 roger(避免权限混乱)
force group = roger # 强制将共享目录的组归属为 roger
public = yes # 是否允许匿名访问(yes/no,此处设为 yes 仅允许 valid users 访问)
available = yes # 是否启用该共享(yes 为启用)
browseable = yes # 客户端是否可见该共享(yes 则在“网络邻居”中显示)
writable = yes # 是否允许写入操作(yes 则客户端可修改/删除文件)
3. 添加 Samba 用户并设置密码
Samba 有自己一套独立的用户认证体系,哪怕系统里已经有 roger 这个用户了(可以用 cat /etc/passwd | grep roger 确认),也还得单独给它设一个 Samba 密码:
# -a:添加 Samba 用户(需与系统用户同名,此处为 roger)
sudo smbpasswd -a roger
输完密码会让你输两遍(屏幕上不显示,建议跟系统密码设成一样的,好记)。
要是想删掉某个 Samba 用户,执行 sudo smbpasswd -x 用户名 就行。
4. 重启 Samba 服务,使配置生效
改完配置得重启 smbd 服务,新的共享规则才会生效:
# 重启 Samba 主服务
sudo systemctl restart smbd.service
# 可选:设置 Samba 开机自启(Ubuntu 默认已启用,保险起见可执行)
sudo systemctl enable smbd.service
5. 验证共享是否可用(本地测试)
在 Ubuntu 本地可以用 smbclient 这个工具测一下共享能不能连上(得先装):
# 安装 smbclient(Samba 客户端工具)
sudo apt install -y smbclient
# 连接本地共享(//localhost/共享名称,此处为 share)
smbclient //localhost/share -U roger
如果输完密码进到了 smb: > 这个交互界面,就说明共享配置成功了,可以用 ls 看共享目录里有什么,exit 退出。
三、第三步:配置开机自动挂载(以 NTFS 分区为例)
如果共享目录 /home/roger/share 背后是一块独立的 NTFS 分区(比如 /dev/sda1,常见于 “Ubuntu 和 Windows 双系统” 的场景),那就得把它配进 /etc/fstab,实现 “开机自动挂载”,免得每次重启还得手动挂。
1. 确认分区信息(关键:避免挂载错误分区)
首先用 lsblk 或者 fdisk 命令确认一下要挂的 NTFS 分区路径(比如 /dev/sda1):
# 列出所有块设备(清晰显示分区与路径对应关系)
lsblk
找到 TYPE 是 part、SIZE 跟你预期对得上的那块 NTFS 分区(一般 Windows 分区的 LABEL 会显示 Windows 或者 Data)。
2. 创建挂载点(目录需提前存在)
挂载点就是 “分区要挂到哪个目录”,这里用的是 /home/roger/share,得先确保这个目录存在:
# 若目录不存在,执行以下命令创建
mkdir -p /home/roger/share
-p 表示 “递归创建目录”,上级目录不存在也会一并建好。
3. 编辑 /etc/fstab,添加自动挂载规则
/etc/fstab 是系统开机时的 “挂载配置文件”,每一行对应一个分区的挂载规则,格式是: 分区路径 挂载点 文件系统类型 挂载选项 dump pass
编辑这个文件:
sudo vi /etc/fstab
在文件末尾加下面这段内容(针对 NTFS 分区的通用配置):
# NTFS 分区自动挂载规则(Ubuntu 开机后自动挂载 /dev/sda1 到 /home/roger/share)
/dev/sda1 /home/roger/share ntfs defaults 0 0
各字段含义说明:
| 字段 | 含义 |
|---|---|
| /dev/sda1 | 待挂载的分区路径(需与 lsblk 查看到的一致) |
| /home/roger/share | 挂载点(分区要关联的目录) |
| ntfs | 文件系统类型(NTFS 分区填 ntfs,ext4 分区填 ext4) |
| defaults | 挂载选项(默认包含 rw(读写)、suid、dev 等,满足大多数场景) |
| 0 | dump 备份开关(0 表示不备份,1 表示备份,一般设为 0) |
| 0 | fsck 检查顺序(0 表示不检查,根分区设为 1,其他分区设为 2) |
4. 测试挂载(避免开机后无法启动)
加完 fstab 规则之后,建议先手动挂一下试试,确认没问题再重启(要是 fstab 配错了,可能导致系统开不了机):
# 执行挂载(-a:按 /etc/fstab 配置挂载所有未挂载的分区)
sudo mount -a
如果执行完没报错,用下面这条命令验证一下挂载结果:
# 查看已挂载的分区(过滤 ntfs 类型)
df -hT | grep ntfs
如果输出里显示 /dev/sda1 已经挂到 /home/roger/share 了,就说明配置成功,重启后这个分区会自动挂载。
5. 常见问题:NTFS 挂载后无写入权限
如果挂载完之后在 /home/roger/share 里建不了文件,多半是 NTFS 分区的权限没配好,可以在 fstab 的挂载选项里改一下:
# 修改后的规则(添加 uid 和 gid,指定所有者为 roger)
/dev/sda1 /home/roger/share ntfs defaults,uid=1000,gid=1000 0 0
其中 uid=1000 和 gid=1000 是 roger 用户的默认 ID(可以用 id roger 看,输出里会有 uid=1000(roger) gid=1000(roger)),改完执行 sudo mount -a 生效。
四、客户端访问指南(补充:Windows/MacOS 如何连接)
配置好之后,局域网里的 Windows 或者 MacOS 设备可以用下面这些方式连上 Samba 共享:
1. Windows 客户端(以 Windows 10/11 为例)
- 打开 “此电脑”,在地址栏输入 \Ubuntu 服务器 IP\share(如 \192.168.1.100\share);
- 按提示输入 Samba 用户名(roger)和密码,就能进共享目录了,支持复制、粘贴、改文件(前提是 writable=yes)。
2. MacOS 客户端
- 打开 “访达”,按 Command + K,在 “服务器地址” 里输入 smb://Ubuntu 服务器 IP/share;
- 选 “注册用户”,输入 Samba 用户名和密码,点 “连接” 就行。
五、注意事项(避坑指南)
- 防火墙放行 Samba 端口:如果 Ubuntu 开了 ufw 防火墙,得把 Samba 相关的端口(139、445)放行,不然客户端连不上:
# 放行 139 和 445 端口(TCP 协议)
sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
# 重启 ufw 生效
sudo ufw reload
- 共享目录权限检查:确保 /home/roger 这个目录的系统权限允许 roger 读写(ls -ld /home/roger 应该显示 drwxr-xr-x 或者更高权限),权限不够的话执行 sudo chmod 755 /home/roger;
- fstab 配置备份:改 /etc/fstab 之前最好先备份(sudo cp /etc/fstab /etc/fstab.bak),万一配错导致开机黑屏,可以进 “Ubuntu 救援模式” 挂载根分区后把备份恢复回去。