Samba 解决什么需求
Samba 在 Linux 上实现 SMB/CIFS 协议,让 Windows 客户端能像访问共享目录一样访问 Linux 主机的目录。典型场景是信创主机充当部门文件服务器:smb.conf 定义共享与权限,smbpasswd 维护独立的 Samba 账号口令,网络侧放行服务所需端口,SELinux 侧放开相应布尔值。三者缺一个,客户端就会挂在『无法访问』上。
基本信息
| 软件包 | samba(服务端 smb、nmb),客户端为 samba-client |
|---|---|
| 主配置 | /etc/samba/smb.conf |
| 口令管理 | smbpasswd -a 用户(独立于系统口令) |
| 服务单元 | smb.service、nmb.service |
| 网络放行 | firewall-cmd --add-service=samba |
| SELinux | samba_export_all_rw 等布尔值、共享目录标签 |
| 权限要求 | root 配置与建账号;共享目录属主按业务设定 |
典型使用场景
- 信创主机为 Windows 办公终端提供共享目录
- 部门内文件集中存放,替代分散的本地共享
- 迁移过程中临时搭建共享,保证文档流转不断档
- 为扫描仪、打印设备提供 SMB 落地目录
- 备份系统通过 SMB 把数据写到 Linux 存储
配置示例 /etc/samba/smb.conf
配置示例 /etc/samba/smb.conf
[global]
workgroup = WORKGROUP # 工作组名,与客户端环境保持一致
security = user # 使用 Samba 自身账号认证
map to guest = never # 禁止匿名映射,避免意外匿名访问
[share]
path = /srv/share # 共享目录,需存在且属主/权限合理
browseable = yes # 在网络邻居中可见
writable = yes # 允许写入
valid users = ops # 只允许指定账号访问
create mask = 0644 # 新建文件权限
directory mask = 0755 # 新建目录权限账号与生效
账号与生效
dnf install -y samba # 安装服务端
useradd -s /sbin/nologin ops 2>/dev/null # 系统账号,禁止交互登录
smbpasswd -a ops # 设置 Samba 专用口令
systemctl enable --now smb nmb # 启动并设为自启
testparm -s # 检查配置语法(改完必做)
firewall-cmd --add-service=samba --permanent && firewall-cmd --reload
getsebool -P samba_export_all_rw on # SELinux 按需放开共享写权限
smbclient -L localhost -U ops # 本机回环验证共享列表核查点与现象
| 检查项 | 命令或方式 | 异常现象 |
|---|---|---|
| 配置语法 | testparm -s | 语法错会导致服务起不来 |
| 服务状态 | systemctl status smb | 未运行则客户端连接超时 |
| 账号存在 | pdbedit -L | 只建了系统账号没建 Samba 账号会认证失败 |
| 端口放行 | firewall-cmd --list-services | 连接超时或立即被拒 |
| SELinux | getsebool -a | grep samba | 能连上但读写被拒,日志有 AVC |
| 目录权限 | ls -ld /srv/share | 认证通过但无法写入 |
| 客户端访问 | smbclient -L 或 \\地址\共享名 | 名称解析问题多见于未启动 nmb |
SELinux 环境下共享目录的标签与布尔值要一起调:调试顺序建议为 testparm 查语法 → 本机 smbclient 回环验证 → 再看防火墙与 SELinux,逐层排除。
Samba 账号与系统账号是两套口令:只创建系统用户而不执行 smbpasswd -a,认证必然失败,这是最常见的初次配置问题。