Samba 在类 Unix 系统上实现服务器消息块协议,使 Linux、Windows、macOS 和其他客户端能够共享文件与打印机。现代部署使用当前 SMB 方言;旧称 CIFS 仍出现在 Linux 客户端工具中,但这并不意味着应该启用已经过时的 SMB1。
网络共享 · 第 5 课
Samba
学习如何配置、验证、访问并保护基本 Samba 文件共享。
规划共享
安装或更改 Samba 前,应定义授权客户端、身份、读写需求、网络区域、数据所有者、备份策略和所需 SMB 方言。使用专用目录,避免无意中公开主目录或系统目录树。
访问同时受 Samba 策略和底层文件系统权限控制。在 smb.conf 中允许写入,无法为本来没有文件系统访问权限的账户授予权限。
用户通过 Samba 共享写入时,哪些部分必须允许?
定义基本共享
主配置通常是 /etc/samba/smb.conf。下面是一个受限示例:
[team]
path = /srv/samba/team
browseable = yes
read only = no
valid users = @teamshare
创建目录,并为 Unix 组应用经过审查的所有权和权限:
$ sudo install -d -o root -g teamshare -m 2770 /srv/samba/team
设置组 ID 位有助于新条目继承目录组,但协作访问可能还需要 ACL 或谨慎选择的创建掩码。应测试实际文件和目录结果,而不是假定继承已经足够。
valid users = @teamshare 表达什么?
配置身份
在独立 Samba 配置中,账户通常需要对应的 Unix 身份和已启用的 Samba 凭据:
$ sudo smbpasswd -a alice
目录域部署使用不同的身份设计。不要把密码放入 shell 历史记录或无关用户可读的配置中,也不要假定 Samba 密码自动与 Unix 账户密码相同。
在独立服务器上,smbpasswd -a alice 通常会做什么?
验证并应用配置
重新加载服务前检查解析后的配置:
$ testparm -s
审查意外默认值和错误,然后通过服务管理器重新加载发行版的 Samba 服务。服务名称各不相同,常见名称包括 smbd.service 或 smb.service。支持时,重新加载比重启中断更小,但仍要验证状态、监听套接字、防火墙范围和日志。
使用明确用户从客户端测试:
$ smbclient //server.example.net/team -U alice
应用 Samba 更改前为什么运行 testparm -s?
从 Linux 挂载
Linux 客户端通常使用 cifs 文件系统驱动程序和挂载辅助工具。不要在命令行中放入密码,因为参数可能通过历史记录或进程检查泄漏。应使用只有 root 可读的凭据文件或获准的凭据机制:
$ sudo mount -t cifs //server.example.net/team /mnt/team \
-o credentials=/root/.smb-team,vers=3.1.1
保护凭据文件,确认双方支持的方言,并有意定义 UID、GID、权限和加密要求。挂载后使用 findmnt 验证,执行获得授权的读写测试,并在协调活动用户后卸载。
为什么要避免直接在挂载命令中使用 password=...?
课程已完成
你已完成 Samba
现在,你可以在同时考虑协议与文件系统安全的情况下配置 Samba 共享。
首先定义客户端、身份、网络范围和数据策略。
限制共享,并调整底层权限。
通过正确的身份模型管理 Samba 凭据。
使用
testparm验证,并执行端到端客户端测试。保护客户端凭据,并验证挂载后的访问。