UNIX/Linux系统管理技术手册-读书笔记-第二十二章
《UNIX/Linux系统管理技术手册-读书笔记-第二十二章
SMB
1. SMB概述
1.1 什么是SMB
| 概念 | 说明 | 能做什么 |
|---|---|---|
| SMB(Server Message Block) | 微软主导的文件共享协议,始于20世纪80年代 | Windows与UNIX/Linux间共享文件、打印机 |
| CIFS(Common Internet File System) | SMB的营销版本(1996年),现已弃用 | 历史遗留术语,实际仍是SMB |
| SMB版本演进 | SMB 1.0 → SMB 2.0(2006)→ SMB 3.0(2012) | 性能、安全性持续改进 |
1.2 Samba
| 概念 | 说明 |
|---|---|
| Samba | 在UNIX/Linux上实现SMB服务端的开源软件包(GPL) |
| 作者 | Andrew Tridgell(1992年逆向工程) |
| 版本 | 本章聚焦Samba 4 |
| 功能范围 | 文件共享、打印共享、认证/授权、名称解析、服务宣告、AD域控制器(基础) |
1.3 SMB vs NFS
| 对比 | SMB | NFS |
|---|---|---|
| 位置 | 用户空间(守护进程) | 内核(线程) |
| 进程模型 | 每用户一个进程 | 多线程共享 |
| 访问控制 | 依赖OS权限 + 自身ACL | 依赖OS权限 |
| 挂载方 | 通常个人用户 | 通常系统管理员 |
| 适用场景 | 混合环境(含Windows) | UNIX/Linux纯环境 |
| 性能 | 优秀 | 最佳(内核级) |
2. Samba安装与配置
2.1 安装
| 系统 | 软件包 |
|---|---|
| Debian/Ubuntu | samba-common |
| RHEL/CentOS | samba |
| FreeBSD | pkg install samba44 |
配置文件位置:
- Linux:
/etc/samba/smb.conf - FreeBSD:
/usr/local/etc/smb4.conf
2.2 两种认证方式
| 认证方式 | 适用场景 | 密码管理 |
|---|---|---|
本地认证(security = user) |
小型环境,无集中目录 | 单独维护SMB密码(smbpasswd) |
AD集成认证(security = ads) |
企业环境,有Active Directory | 通过AD/Kerberos集中认证 |
本地认证配置(smb.conf):
[global]
workgroup = ulsh
security = user
netbios name = freebsd-book
设置SMB密码:
SMB密码与UNIX密码分开管理,用户需单独设置。此方法在现代企业环境中已显过时。
AD集成认证配置(smb.conf):
[global]
workgroup = ulsah
realm = ulsah.example.com
security = ads
dedicated keytab file = FILE:/etc/samba/samba.keytab
kerberos method = dedicated keytab
2.3 配置共享
基本共享([sharename]节) :
[bookshare]
path = /storage/bookshare
read only = no
Windows客户端访问:\\sambaserver\bookshare
神奇共享[homes] —— 自动将用户主目录导出为SMB共享:
[homes]
comment = Home Directories
browseable = no
valid users = %S # %S扩展为当前用户名
read only = no
用户janderson可通过\\sambaserver\janderson访问自己的主目录。
项目组共享示例:
[eng]
comment = Group Share for engineering
valid users = eng # 仅eng组成员可访问
path = /home/eng
nt acl support = no # 禁用NT ACL(用UNIX权限)
create mask = 0660
directory mask = 2770 # 包含setgid位
force directory mode = 2000
force group = eng
browseable = no
read only = no
guest ok = no
💡 通过
setgid权限位和force group确保共享中新建文件归eng组所有。
3. 客户端挂载SMB共享
3.1 挂载命令
| 系统 | 命令 |
|---|---|
| Linux | sudo mount -t cifs -o username=joe //redmond/joes /home/joe/mnt |
| FreeBSD | sudo mount -t smbfs //joe@redmond/joes /home/joe/mnt |
3.2 关键特性与限制
| 特性 | 说明 |
|---|---|
| 用户级挂载 | SMB卷由特定用户挂载,而非系统级 |
| 所有权问题 | 挂载后所有文件显示为挂载用户所有 |
| 多用户限制 | Windows服务器通常不支持多用户同时访问同一挂载 |
| 调优选项 | uid、gid、fmask、dmask可调整文件权限映射 |
3.3 smbclient(无需挂载即可访问)
4. 安全配置
| 安全措施 | 说明 |
|---|---|
hosts allow |
限制允许访问的IP地址/范围 |
hosts deny |
拒绝指定主机(优先于allow) |
| 防火墙 | 阻止外部访问SMB端口 |
| SMB端口 | UDP 137-139、TCP 137/139/445 |
| 数据传输 | Samba仅加密密码,数据明文传输 → 需VPN或内部可信网络 |
生产建议:SMB不应暴露在Internet上,必须在防火墙层阻断。数据明文传输问题可通过SMB 3.0加密或VPN解决。
5. 调试
5.1 smbstatus —— 查看活动连接和锁
|
|
输出三部分:
- 连接列表:PID、用户名、客户端IP
- 已挂载共享:Service、连接时间
- 文件锁:锁定文件详情(排查锁定问题的关键)
💡 当Windows提示“文件被锁定”时,先在客户端关闭违规应用,而非在服务器端暴力破解锁。
5.2 日志配置
[global]
log file = /var/log/samba.log.%m # %m = 客户端主机名
max log size = 10000 # 10MB后轮替
syslog = 7 # 发送到syslog的最低级别
syslog only = no
日志级别调整(运行时) :
常见日志错误:
NT_STATUS_WRONG_PASSWORD:密码错误NT_STATUS_LOGON_FAILURE:登录失败(密码/域/账户问题)NT_STATUS_ACCESS_DENIED:权限不足
5.3 字符集管理
Samba 3.0+默认使用UTF-8文件名编码。若服务器使用ISO 8859 locale,需配置:
unix charset = ISO8859-15
display charset = ISO8859-15
6. 本章核心命令速查表
| 命令 | 功能 |
|---|---|
sudo smbpasswd -a user |
添加SMB用户(本地认证) |
smbpasswd |
当前用户修改SMB密码 |
sudo mount -t cifs -o username=user //server/share /mnt |
挂载SMB共享(Linux) |
sudo mount -t smbfs //user@server/share /mnt |
挂载SMB共享(FreeBSD) |
smbclient -L //server -U user |
列出服务器共享 |
smbclient //server/share -U user |
交互式访问共享(类FTP) |
sudo smbstatus |
查看活动连接和文件锁 |
sudo smbcontrol smbd debug "4" |
运行时调整调试级别 |
testparm -v |
列出所有Samba配置选项及当前值 |
/etc/samba/smb.conf |
Samba主配置文件(Linux) |
/usr/local/etc/smb4.conf |
Samba主配置文件(FreeBSD) |
DBA视角补充:
- 备份传输:SMB可用于将数据库备份文件传送到Windows存储服务器。注意数据明文传输问题,建议使用SMB 3.0加密或VPN隧道。
- 跨平台报表:数据库生成的报表(PDF/Excel)可通过SMB共享直接供Windows用户访问,无需额外传输工具。
- 与NFS对比选型:纯UNIX/Linux环境(含数据库集群)优选NFS;含Windows客户端或存储服务器时,SMB是必要选择。
- AD集成:若企业已部署Active Directory,Samba可加入AD域(
security = ads),实现数据库服务器与Windows环境统一认证,简化权限管理。- 性能考量:Samba运行于用户空间,性能略低于内核级NFS。大数据量传输场景下,需评估网络带宽和延迟,必要时使用专用存储网络。
- 文件锁定:数据库文件(如
.mdf、.ibd)通过SMB共享时需特别注意锁行为,不建议将生产数据库文件直接存放在SMB共享上,除非使用支持SMB 3.0集群的SQL Server等明确支持的场景。
文章作者 会写代码的小郎中
上次更新 2011-07-03
许可协议 CC BY-NC-ND 4.0