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 救援模式” 挂载根分区后恢复备份文件。