CentOS 7 Samba smb.conf 配置文件详解:全局参数、共享权限与常用宏

发布时间:2026/7/23 12:48:23
CentOS 7 Samba smb.conf 配置文件详解:全局参数、共享权限与常用宏 # CentOS 7 Samba smb.conf 配置文件详解全局参数、共享权限与常用宏1. 服务介绍/etc/samba/smb.conf是 Samba 服务核心配置文件用于控制服务器身份、认证方式、监听接口、日志位置、共享目录和访问权限。理解这些参数后可以配置公共只读共享、部门读写共享、个人目录和账号隔离而不是直接套用包含过时参数的旧配置。2. 准备运行环境• 操作系统CentOS 7.x。• 操作权限root或具备sudo权限的管理员账号。• 软件组件samba、samba-client、samba-common-tools。• 网络条件服务端与客户端互通TCP 445 可达。• 修改原则先备份再执行testparm -s检查语法通过后才重载服务。yum -y install samba samba-client samba-common-tools cp -a /etc/samba/smb.conf /etc/samba/smb.conf.bak.$(date %F-%H%M%S) rpm -q samba samba-client samba-common-tools3. 相关知识3.1 配置文件结构•[global]全局设置对整个 Samba 服务生效。•[共享名]定义客户端可见的共享资源。•#和;开头的行是注释。• 后定义的同名参数会覆盖前面的值。3.2 权限判断顺序客户端能否访问共享由多层条件共同决定1. 防火墙是否放行 Samba。2. Samba 用户认证是否通过。3.valid users、invalid users、write list等规则是否允许。4. Linux 用户和用户组是否具备目录权限。5. SELinux 类型是否允许 Samba 访问目录。Samba 配置允许写入但 Linux 目录权限只读时最终仍然不能写入。3.3 常用变量宏| 宏 | 含义 | 常见用途 || --- | --- | --- ||%u| 当前认证用户名 | 每个用户映射独立目录 ||%U| 客户端提交的用户名 | 认证和日志分析 ||%m| 客户端 NetBIOS 名称 | 按客户端拆分日志或配置 ||%I| 客户端 IP 地址 | 审计日志 ||%L| 服务器 NetBIOS 名称 | 多名称服务器场景 ||%v| Samba 版本 | 服务描述 ||%S| 当前共享名 | 动态路径或日志 |3.4 版本与安全注意点• CentOS 7 常用security user和passdb backend tdbsam。•security share已废弃security server属于旧式代理认证不适合新部署。• 加入 Active Directory 应使用security ads不能直接套用旧式domain配置。•smb passwd file、smbpassword file属于旧资料常见参数。使用tdbsam时不要配置否则可能出现Unknown parameter。•encrypt passwords在现代 Samba 中默认启用不必重复配置。• 不建议手工设置旧式SO_RCVBUF、SO_SNDBUF现代内核会自动调优缓冲区。• 不要用chmod 777、关闭 SELinux 或停止防火墙掩盖权限错误。4. 实验步骤4.1 [global] 全局参数#### 工作组和服务器名称[global] workgroup WORKGROUP netbios name FILESERVER server string Samba Server %v•workgroup服务器所属 Windows 工作组。•netbios name客户端看到的服务器名称不要与工作组同名。•server string服务器描述%v会替换为 Samba 版本。#### 认证和账号数据库security user passdb backend tdbsam map to guest Bad User guest account nobody•security user使用 Samba 用户名和密码认证。•passdb backend tdbsam账号保存在 TDB 数据库。•map to guest Bad User不存在的用户名映射为来宾。•guest account来宾映射使用的 Linux 账号。Samba 用户必须先存在于 Linuxuseradd -M -s /sbin/nologin user1 smbpasswd -a user1 pdbedit -L#### 监听接口和客户端限制interfaces lo ens33 10.1.100.0/24 bind interfaces only yes hosts allow 127. 10.1.100. hosts deny ALL•interfaces指定监听网卡或网段网卡名以ip link结果为准。•bind interfaces only只绑定已声明接口。•hosts allow允许访问的主机或网段。•hosts deny拒绝访问的客户端范围。允许网段但排除单个地址hosts allow 10.1.100. EXCEPT 10.1.100.50这些规则不能替代防火墙生产环境应同时限制来源网络。#### 日志和连接管理log file /var/log/samba/log.%m max log size 1000 logging file deadtime 15 max connections 100•log file日志路径%m按客户端名称拆分。•max log size单个日志最大容量单位 KiB。•deadtime无打开文件的空闲连接断开时间单位分钟。•max connections最大连接数0表示不限制。排障期间可临时设置log level 2。问题解决后恢复低等级避免日志快速增长。#### 名称浏览和 WINSlocal master yes preferred master no domain master no wins support no dns proxy no•local master是否参加本地浏览器选举。•preferred master是否主动触发选举同网段不要多台服务器争抢。•domain master旧式 NT 域浏览参数不等于 Active Directory 域控制器。•wins support是否提供 WINS同一网络只应规划一个 WINS 服务端。•wins server使用其他 WINS 服务器时填写其 IP不能与wins support yes同时配置。•dns proxyWINS 查询失败时是否转向 DNS通常关闭。现代 DNS 和纯 TCP 445 环境通常不依赖这些旧式浏览参数。#### 打印共享不提供打印服务时关闭自动打印机共享load printers no printcap name /dev/null disable spoolss yes需要共享 CUPS 打印机时再按实际打印系统启用并检查 CUPS 权限。4.2 共享目录参数#### 基础参数[data] comment Department data path /srv/samba/data browseable yes available yes read only yes•[data]客户端看到的共享名。•comment共享说明。•path服务端真实目录目录必须存在。•browseable是否出现在共享列表设为no不代表禁止访问。•available是否启用共享。•read only是否只读。writable yes与read only no含义相反建议只选一种写法。#### 用户与用户组限制valid users user1 finance invalid users root write list user1 finance read list auditor•valid users允许访问的用户和组。•invalid users明确禁止的用户和组拒绝规则优先。•write list在只读共享中额外允许写入的用户。•read list强制只读的用户。• 用户组前使用例如finance。#### 来宾访问[public] path /srv/samba/public guest ok yes read only yesguest ok yes与public yes含义相同。来宾写入风险高公共共享建议只读。#### 新文件权限create mask 0660 force create mode 0660 directory mask 2770 force directory mode 2770 force group finance•create mask、directory mask限制新文件和目录可保留的权限位。•force create mode、force directory mode强制增加指定权限位。•force group让新文件归属指定组。force user会让操作映射为同一 Linux 用户可能丢失属主审计信息只应在明确场景使用。#### 管理员权限admin users rectoradmin users权限很大应减少使用不能把普通部门成员全部设为共享管理员。4.3 用户名映射[global] username map /etc/samba/smbusers/etc/samba/smbusers示例root administrator admin user1 employee01用户名映射会改变客户端账号与 Linux 账号的对应关系。不要随意映射root否则容易扩大权限。4.4 按客户端加载独立配置[global] config file /etc/samba/host/smb.conf.%m客户端名为PC1时Samba 尝试读取/etc/samba/host/smb.conf.PC1。文件不存在时继续使用主配置。此功能适合少量特殊客户端客户端多时优先使用共享权限和用户组。4.5 完整配置示例创建用户、组和目录groupadd finance useradd -M -s /sbin/nologin -G finance user1 smbpasswd -a user1 mkdir -p /srv/samba/{public,finance} chown root:root /srv/samba/public chmod 0755 /srv/samba/public chown root:finance /srv/samba/finance chmod 2770 /srv/samba/finance配置/etc/samba/smb.conf[global] workgroup WORKGROUP netbios name FILESERVER server string Samba Server %v security user passdb backend tdbsam map to guest Bad User log file /var/log/samba/log.%m max log size 1000 load printers no disable spoolss yes [public] comment Public read-only files path /srv/samba/public browseable yes guest ok yes read only yes [finance] comment Finance department path /srv/samba/finance browseable yes read only no valid users finance write list finance force group finance create mask 0660 directory mask 2770配置 SELinux、防火墙和服务yum -y install policycoreutils-python semanage fcontext -a -t samba_share_t /srv/samba(/.*)? restorecon -Rv /srv/samba firewall-cmd --permanent --add-servicesamba firewall-cmd --reload testparm -s systemctl enable --now smb nmb systemctl restart smb nmb5. 验证结果5.1 服务端验证testparm -s testparm -sv | less systemctl --no-pager --full status smb nmb ss -lntup | egrep :445|:139|:137|:138 pdbedit -L smbclient -L //127.0.0.1 -U user1 smbstatus验证目录、SELinux 和防火墙namei -l /srv/samba/finance ls -ldZ /srv/samba /srv/samba/public /srv/samba/finance getenforce firewall-cmd --query-servicesamba访问被拒绝时检查日志ausearch -m AVC -ts recent journalctl -u smb -u nmb -n 100 --no-pager tail -n 100 /var/log/samba/log.smbd5.2 客户端验证Linux 客户端smbclient -L //10.1.100.101 -U user1 smbclient //10.1.100.101/finance -U user1Windows 客户端Test-NetConnection 10.1.100.101 -Port 445 net use * /delete /y net use \\10.1.100.101\finance /user:user1 Get-SmbConnection预期公共共享可匿名读取但不能写入finance组成员可读写部门共享其他用户被拒绝testparm -s无错误TCP 445 正常监听日志无持续认证或权限异常。