/etc/samba/smb.conf
笔记250721
/etc/samba/smb.conf
是 Samba 服务器的核心配置文件,用于定义共享资源、用户认证、网络行为和安全设置。下面是一个详细的解析:
配置文件结构 配置文件主要由以下部分组成:
- 全局设置 (
[global]
): 控制整个 Samba 服务器的行为。 - 共享定义 (
[share_name]
): 定义具体的共享目录(如[homes]
,[printers]
或自定义共享)。
全局设置 ([global]
) 详解 基础网络设置
workgroup = WORKGROUP # 工作组名称(与Windows网络一致) server string = Samba Server # 服务器描述 netbios name = FILESERVER # NetBIOS名称(可选)
安全认证模式
security = user # 认证模式(常用值:user, ads, domain) passdb backend = tdbsam # 用户数据库类型(tdbsam, ldapsam, smbpasswd) map to guest = bad user # 无效用户视为访客
日志与调试
log file = /var/log/samba/log.%m # 日志路径(%m=客户端名) max log size = 1000 # 日志大小上限(KB) log level = 1 # 日志详细级别(0-10)
协议与加密
min protocol = SMB2 # 最低支持的SMB协议版本 server min protocol = SMB2 # 服务器最低协议 encrypt passwords = yes # 强制加密密码
域控制器集成 (AD/DC)
security = ads realm = EXAMPLE.COM # AD域名 idmap config * : backend = rid idmap config * : range = 10000-20000 # UID/GID映射范围
共享定义详解 1. 用户家目录 ([homes]
)
[homes] comment = Home Directories browseable = no # 隐藏共享名 writable = yes # 允许写入 valid users = %S # %S=当前登录用户 create mask = 0700 # 新建文件权限 directory mask = 0700 # 新建目录权限
2. 打印机共享 ([printers]
)
[printers] comment = All Printers path = /var/spool/samba # 假脱机路径 browseable = no guest ok = yes # 允许访客 printable = yes # 启用打印
3. 自定义共享目录
[shared_data] comment = Public Shared Data path = /srv/shared # 本地路径 browseable = yes # 在网络中可见 writable = yes # 可写 guest ok = no # 禁止访客访问 valid users = bob, @staff # 允许用户bob和staff组 force user = shareuser # 所有操作以shareuser身份执行
关键参数说明
参数 | 说明 |
---|---|
browseable | 共享是否在网络邻居中可见 |
writable /read only | 控制写入权限(writable=yes 优先级更高) |
valid users | 允许访问的用户/组(@group 表示组) |
force user | 强制文件操作使用指定用户身份 |
create mask | 新建文件的权限掩码(如 0644 ) |
directory mask | 新建目录的权限掩码(如 0755 ) |
guest ok | 是否允许匿名访问(等同于 public = yes ) |
force group | 为所有文件操作指定默认组 |
特殊变量
变量 | 含义 | 示例 |
---|---|---|
%S | 当前共享名 | path = /data/%S |
%U | 当前用户名 | valid users = %U |
%m | 客户端NetBIOS名 | log file = /var/log/samba/log.%m |
%H | 用户家目录路径 | path = %H/docs |
安全最佳实践
- 最小权限原则:
writable = no # 默认只读 write list = bob, @team # 仅允许特定用户/组写入
- 隔离敏感共享:
[finance] path = /srv/finance valid users = @finance_team browseable = no # 隐藏共享名
- 启用加密传输:
smb encrypt = required # 强制SMB加密
配置生效与调试
- 语法检查:
testparm -s /etc/samba/smb.conf
- 重启服务:
sudo systemctl restart smbd nmbd # 或 sudo systemctl restart smb
- 查看连接状态:
smbstatus
完整示例配置
[global] workgroup = WORKGROUP security = user encrypt passwords = yes log file = /var/log/samba/log.%m max log size = 1000 [public] path = /srv/public browseable = yes writable = yes guest ok = yes force group = users [tech_docs] path = /srv/tech_docs valid users = @tech writable = yes create mask = 0664 directory mask = 0775
掌握 smb.conf
的配置逻辑后,您可以根据需求灵活定制文件共享、权限控制和集成方案。遇到问题时,务必检查日志 (/var/log/samba/
) 并使用 testparm
验证配置!
/etc/samba/smb.conf
配置详解
/etc/samba/smb.conf
是 Samba 服务的核心配置文件,用于实现 Windows 与 Linux/Unix 系统之间的文件和打印机共享。以下为详细配置解析:
配置文件结构
[global] # 全局配置(服务器级设置) [share1] # 共享定义1 [share2] # 共享定义2 [printers] # 打印机共享(特殊定义) [homes] # 用户家目录共享(特殊定义)
全局配置 ([global]) 基础设置
workgroup = WORKGROUP # 工作组名称(需与Windows网络匹配) netbios name = FILESERVER # 服务器NetBIOS名称 server string = %h Server # 服务器描述(%h=主机名)
安全认证
security = user # 认证模式: # user: 本地用户认证 # ads: Active Directory域认证 # domain: NT4域认证 passdb backend = tdbsam # 用户数据库类型: # tdbsam: 轻量级数据库 # ldapsam: LDAP集成 # smbpasswd: 旧式密码文件 map to guest = Bad User # 无效用户处理: # Never: 拒绝访问 # Bad User: 无效用户名视为访客 # Bad Password: 密码错误视为访客 guest account = nobody # 访客使用的系统账户
网络设置
interfaces = eth0 192.168.1.0/24 # 监听的网络接口 hosts allow = 192.168.1. 127. # 允许访问的IP范围 hosts deny = 10.0.0.0/8 # 拒绝访问的IP范围
高级设置
min protocol = SMB2 # 最低支持的SMB协议版本 max protocol = SMB3 # 最高支持的SMB协议版本 smb encrypt = required # 强制加密传输 log file = /var/log/samba/log.%m # 日志文件(%m=客户端名) max log size = 1000 # 日志大小上限(KB)
共享配置 通用参数
[共享名称] comment = 描述信息 # 共享描述 path = /绝对/路径 # 共享的本地路径 browseable = yes/no # 是否在网络中可见 writable = yes/no # 是否可写(与read only互斥) read only = yes/no # 是否只读 valid users = user1, @group1 # 允许访问的用户/组 invalid users = user2 # 禁止访问的用户 force user = shared_user # 强制文件操作用此用户身份 force group = shared_group # 强制文件操作用此组身份 guest ok = yes/no # 是否允许访客访问
权限控制
create mask = 0644 # 新建文件权限掩码 directory mask = 0755 # 新建目录权限掩码 force create mode = 0664 # 强制文件权限 force directory mode = 0775 # 强制目录权限 inherit permissions = yes/no # 继承父目录权限
特殊共享 1. 家目录共享 ([homes])
[homes] comment = Home Directories browseable = no # 不显示共享名,显示用户名 writable = yes # 用户可写 valid users = %S # %S=当前登录用户 create mask = 0700 directory mask = 0700
2. 打印机共享 ([printers])
[printers] comment = All Printers path = /var/spool/samba # 打印队列路径 browseable = yes public = yes # 公共访问 printable = yes # 启用打印 printing = cups # 打印系统类型(CUPS/LPRng等)
变量替换
变量 | 说明 | 示例 |
---|---|---|
%U | 当前用户名 | path = /shares/%U |
%G | 当前用户的主组名 | valid users = %G |
%H | 当前用户的家目录 | path = %H/Public |
%m | 客户端的NetBIOS名称 | log file = /var/log/samba/log.%m |
%I | 客户端的IP地址 | comment = Share for %I |
%S | 当前共享的名称 | [%S] |
安全加固配置
[global] # 禁用不安全协议 min protocol = SMB2 server min protocol = SMB2 # 启用传输加密 smb encrypt = required # 限制访问 hosts allow = 192.168.1.0/24 interfaces = eth0 bind interfaces only = yes # 隐藏服务器 restrict anonymous = 2
域控制器集成 (Active Directory)
[global] security = ads realm = EXAMPLE.COM workgroup = EXAMPLE encrypt passwords = yes kerberos method = secrets and keytab idmap config * : backend = rid idmap config * : range = 10000-20000 winbind use default domain = yes
配置验证与调试
-
语法检查:
testparm -s /etc/samba/smb.conf
-
重启服务:
sudo systemctl restart smbd nmbd # 或 sudo systemctl restart smb
-
连接测试:
smbclient -L //localhost -U username
-
日志查看:
tail -f /var/log/samba/log.smbd
-
状态查看:
smbstatus
完整配置示例
[global] workgroup = WORKGROUP server string = Samba Server %v security = user map to guest = Bad User log file = /var/log/samba/log.%m max log size = 1000 [homes] comment = Home Directories browseable = no writable = yes valid users = %S [public] comment = Public Share path = /srv/public browseable = yes writable = yes guest ok = yes create mask = 0664 directory mask = 0775 [secured] comment = Secure Share path = /srv/secure valid users = @admin writable = yes read list = @staff write list = @admin force group = admin
掌握这些配置项后,您可以根据需求灵活构建安全高效的文件共享服务。建议修改配置前备份原文件,每次修改后使用 testparm
验证语法!
/etc/samba/smb.conf
的 [global]
部分详解
[global]
部分是 Samba 配置文件的核心,定义了服务器的全局行为和特性。以下是对主要配置项的详细解析:
基础网络设置
参数 | 说明 | 示例 | 默认值 |
---|---|---|---|
workgroup | 服务器所属的工作组/域 | workgroup = MYGROUP | WORKGROUP |
netbios name | 服务器的 NetBIOS 名称 | netbios name = FILESERVER | 主机名 |
server string | 服务器描述信息(支持变量) | server string = %h File Server | Samba %v |
interfaces | 监听的网络接口/IP | interfaces = eth0 192.168.1.0/24 | 所有接口 |
bind interfaces only | 是否只绑定指定接口 | bind interfaces only = yes | no |
安全认证设置 认证模式 (security
)
security = user # 本地用户认证(最常用) security = ads # Active Directory 域认证 security = domain # NT4 域认证 security = server # 远程服务器认证(已废弃) security = auto # 自动选择
用户数据库 (passdb backend
)
passdb backend = tdbsam # 轻量级数据库(推荐) passdb backend = ldapsam # LDAP 集成 passdb backend = smbpasswd # 旧式密码文件
访客访问控制 (map to guest
)
map to guest = Bad User # 无效用户视为访客 map to guest = Bad Password # 密码错误视为访客 map to guest = Never # 禁止访客访问 guest account = nobody # 访客使用的系统账户
协议与加密
参数 | 说明 | 示例 |
---|---|---|
min protocol | 最低支持的 SMB 协议 | min protocol = SMB2 |
server min protocol | 服务器最低协议版本 | server min protocol = SMB2 |
max protocol | 最高支持的 SMB 协议 | max protocol = SMB3 |
smb encrypt | 传输加密要求 | smb encrypt = required |
encrypt passwords | 密码加密 | encrypt passwords = yes |
协议版本对照:
CORE
: SMB1 (过时/不安全)LANMAN1
: SMB1NT1
: SMB1SMB2
: Windows Vista+SMB3
: Windows 8+
域控制器集成 (Active Directory)
security = ads realm = EXAMPLE.COM # AD 域名(大写) workgroup = EXAMPLE # 短域名 encrypt passwords = yes kerberos method = secrets and keytab # ID 映射配置 idmap config * : backend = rid idmap config * : range = 10000-20000 # Winbind 设置 winbind use default domain = yes winbind enum users = yes winbind enum groups = yes
访问控制
参数 | 说明 | 示例 |
---|---|---|
hosts allow | 允许访问的客户端 | hosts allow = 192.168.1. 127. |
hosts deny | 拒绝访问的客户端 | hosts deny = 10.0.0.0/8 |
allow trusted domains | 是否允许信任域 | allow trusted domains = no |
restrict anonymous | 匿名访问限制 | restrict anonymous = 2 |
日志与调试
log file = /var/log/samba/log.%m # 日志路径(%m=客户端名) max log size = 1000 # 日志大小上限(KB) log level = 1 # 日志级别 (0-10) debug timestamp = yes # 日志添加时间戳
高级网络设置
# 名称解析顺序 name resolve order = lmhosts wins host bcast # WINS 设置 wins support = yes # 启用 WINS 服务器 wins server = 192.168.1.100 # 指定 WINS 服务器 dns proxy = yes # 通过 DNS 解析名称 # 套接字优化 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
打印机集成
load printers = yes # 自动加载系统打印机 printing = cups # 打印系统类型 (cups/lprng/etc) printcap name = cups # 打印能力数据库 cups options = raw # CUPS 选项
性能优化
参数 | 说明 | 示例 |
---|---|---|
deadtime | 关闭空闲连接时间(分钟) | deadtime = 15 |
getwd cache | 工作目录缓存 | getwd cache = yes |
aio read size | 异步读取阈值(KB) | aio read size = 1024 |
aio write size | 异步写入阈值(KB) | aio write size = 1024 |
use sendfile | 启用零拷贝传输 | use sendfile = yes |
安全加固配置
# 禁用不安全协议 min protocol = SMB2 server min protocol = SMB2 # 禁用过时认证 ntlm auth = no # 禁用 NTLMv1 lanman auth = no # 禁用 LANMAN # 限制 SMB1 特性 server multi channel support = no # 隐藏服务器信息 restrict anonymous = 2 disable netbios = yes # 禁用 NetBIOS
完整 [global] 示例
[global] # 网络标识 workgroup = CORP netbios name = FILESRV01 server string = Corporate File Server # 安全设置 security = user passdb backend = tdbsam map to guest = Bad User guest account = nobody # 协议控制 min protocol = SMB2 server min protocol = SMB2 smb encrypt = required # 网络访问 interfaces = eth0 192.168.10.0/24 bind interfaces only = yes hosts allow = 192.168.10.0/24 # 日志记录 log file = /var/log/samba/log.%m max log size = 1000 log level = 1 # 性能优化 socket options = TCP_NODELAY deadtime = 10 aio read size = 1024 use sendfile = yes # 打印机 load printers = no
重要注意事项
-
协议兼容性:
禁用 SMB1 (min protocol = SMB2
) 可提升安全性,但会失去对 Windows XP 和旧设备的支持 -
ID 映射:
当加入 AD 域时,必须正确配置idmap config
范围,避免与本地 UID/GID 冲突 -
配置验证:
修改后务必运行:testparm -s /etc/samba/smb.conf sudo systemctl restart smbd nmbd
-
日志排查:
常见日志路径:/var/log/samba/log.smbd
/var/log/samba/log.nmbd
/var/log/samba/log.[client-ip]
掌握 [global]
配置是构建安全高效 Samba 服务器的关键,建议根据实际网络环境逐步调整参数。
[global]
的 workgroup
详解
workgroup
是 Samba 配置中最关键的 [global]
参数之一,决定了服务器在 Windows 网络中的组织归属和身份识别。以下是全面解析:
核心概念
属性 | 说明 |
---|---|
功能 | 定义 Samba 服务器所属的工作组或域 |
网络位置 | 决定服务器在 Windows 网络邻居中的显示位置 |
默认值 | WORKGROUP (Windows 默认工作组) |
协议依赖 | NetBIOS/SMB 协议 |
安全影响 | 高(影响认证和访问控制) |
配置位置 | /etc/samba/smb.conf 的 [global] 部分 |
配置语法
[global] workgroup = 名称字符串
命名规则
-
长度限制:
- 最大 15 个字符 (NetBIOS 名称限制)
- 超过部分自动截断
-
合法字符:
- 字母:
A-Z
a-z
(不区分大小写) - 数字:
0-9
- 连字符:
-
- 禁止:空格、句点(.)、下划线(_)、特殊符号
- 字母:
-
大小写处理:
- 存储为大写形式 (
MyGroup
→MYGROUP
) - 显示为配置时的大小写
- 存储为大写形式 (
工作模式对比
模式 | workgroup 值 | security 设置 | 适用场景 |
---|---|---|---|
工作组模式 | 工作组名称 (如 OFFICE ) | security = user | 小型网络/无域控制器环境 |
域成员模式 | 域名 (如 MYDOMAIN ) | security = ads | Active Directory 域环境 |
NT4域模式 | NT4 域名 | security = domain | 传统 NT4 域环境 (已淘汰) |
技术原理
Windows 客户端Samba 服务器域控制器(可选)alt[工作组模式][域模式]1. 连接请求 (SMB协议)2. 返回工作组/域信息3a. 本地认证请求4a. 认证结果3b. Kerberos 认证请求4b. 认证票据5b. 提交票据6b. 验证票据7b. 验证结果8b. 访问授权Windows 客户端Samba 服务器域控制器(可选)
配置示例 1. 基本工作组配置
workgroup = OFFICE security = user
2. Active Directory 域集成
workgroup = CORP security = ads realm = CORP.EXAMPLE.COM
3. 多子网环境
workgroup = ENTERPRISE domain master = yes local master = yes preferred master = yes
验证方法 1. 查看当前工作组
sudo smbstatus -b # 输出示例: # Workgroup: OFFICE # NetBIOS name: SRV01
2. 网络扫描验证
nmblookup -S '*' # 输出示例: # 192.168.1.100 *<00> # Querying * on 192.168.1.255 # 192.168.1.100 OFFICE<00>
3. Windows 客户端验证
nbtstat -A 192.168.1.100 # 输出中的 <00> 行显示工作组: # NetBIOS Remote Machine Name Table # Name Type Status # OFFICE <00> GROUP Registered
常见错误及解决 错误1:名称冲突
netbios name: Workgroup name OFFICE is already in use
解决方案:
- 修改工作组名
- 添加后缀:
workgroup = OFFICE-FS
错误2:非法字符
workgroup name 'OFFICE.TEAM' contains illegal character
解决方案:
- 删除非法字符:
workgroup = OFFICE-TEAM
错误3:域加入失败
Failed to join domain: DNS update failed
解决方案:
- 确认 DNS 设置正确
- 检查时间同步
- 验证域管理员凭据
- 检查防火墙端口 (TCP/UDP 53,88,135,139,389,445)
最佳实践
-
命名规范:
workgroup = COMPANY-REGION-DEPT # 如: ACME-NY-FINANCE
-
大型网络优化:
domain master = yes # 声明为域主浏览器 local master = yes # 参与本地主浏览器选举 os level = 65 # 高于Windows Server的选举权重
-
安全加固:
workgroup = SECUREGROUP restrict anonymous = 2 # 限制匿名访问 encrypt passwords = yes
-
多子网支持:
workgroup = ENTERPRISE wins support = yes # 启用WINS服务 wins proxy = yes # 允许跨子网解析
高级配置 1. 工作组描述
workgroup = ENGINEERING server string = %w Design Team Server # %w = 工作组名
2. 子网隔离
workgroup = SUB1 interfaces = eth1 10.1.1.0/24 bind interfaces only = yes
3. 故障转移集群
workgroup = CLUSTER netbios name = FILESERVER-VIP clustering = yes
技术说明
-
与 NetBIOS 关系:
- 工作组名注册为
<00>
类型 - 通过广播或 WINS 服务器传播
- 工作组名注册为
-
浏览器服务:
参数 功能 domain master
声明为域主浏览器 local master
参与本地浏览器选举 preferred master
强制启动浏览器选举 os level
选举权重 (Windows DC=32) -
DNS 集成:
- 当
dns proxy = yes
时 - 将 NetBIOS 名称查询转发到 DNS
- 格式:
工作组名.dns.domain
- 当