本文聚焦已有 Samba 服务时,新增一个部门共享目录的完整流程。如需从零搭建 Samba 服务或对接 AD 域账号,请参考 Centos7下samba服务搭建及通过活动目录AD控制帐号。
场景说明
以"商务部"为例,已有 Samba 服务正常运行,现在需要给商务部一个共享目录,部门内用户可读写,其他人看不到。
1. 创建文件夹
mkdir -p /disk/部门文件/商务部
2. 创建用户组和用户
# 创建商务部组
groupadd swb
# 创建商务部的系统用户 gaoyh,主组为 swb
useradd gaoyh -g swb
# 如需给该用户加其他部门的附加权限(例如 hr),用 -G 追加
usermod gaoyh -g swb -G hr
# -g:主组(primary group)
# -G:附加组(supplementary groups)
💡 -g vs -G 一句话总结:
-g决定"他是谁",-G决定"他还能扮演谁"。
3. 创建 Samba 用户
# 新增 Samba 用户(密码独立于系统密码)
smbpasswd -a gaoyh
# 修改现有 Samba 用户的密码(不要 -a)
smbpasswd gaoyh
⚠️ Samba 用户必须先有同名系统用户(
useradd那一步不能省),否则smbpasswd -a会报Failed to add entry for user xxx。 另外 Samba 密码和系统登录密码是两份独立凭证,建议不要设成同一个。
4. 修改目录属主(关键!)
让目录归属于 root 用户 + swb 组:
chown -R root:swb /disk/部门文件/商务部
chown -R root:swb 含义:
- 属主(
owner) =root(管理员) - 属组(
group) =swb(商务部组)
5. 设置目录权限
chmod -R 770 /disk/部门文件/商务部
权限位拆解:
| 位 | 含义 | 值 |
|---|---|---|
| 7 (owner) | 属主 root:rwx | 读写执行 |
| 7 (group) | 属组 swb:rwx | 读写执行 |
| 0 (others) | 其他用户:— | 完全无访问 |
⚠️ 常见踩坑:网上很多教程(包括我见过的部分文档)写的是
chmod 070,这是错的——070里 owner 都没读权限,部门用户根本进不去。正确值是770:owner + group 都给读写执行,其他用户 0 访问。与第 4 步
chown root:swb配合,效果是:
- 商务部组成员(
swb组):可读可写- 系统管理员(
root):可读可写- 其他人:完全看不到(即使知道路径也进不去)
6. 配置 smb.conf
vim /etc/samba/smb.conf
文件末尾追加商务部共享配置:
[商务部]
comment = 商务部共享目录
path = /disk/部门文件/商务部
browseable = yes # 是否在网络邻居里显示
writable = yes # 是否可写
read only = no # 同 writable=yes,语义清晰
valid users = @swb # 只允许 swb 组成员访问(@ 表示组)
create mask = 0660 # 新建文件的默认权限
directory mask = 0770 # 新建目录的默认权限
force group = swb # 强制新文件归属 swb 组(避免权限漂移)
关键参数说明:
valid users = @swb:只允许 swb 组访问,其他用户即使有 Samba 账号也连不上force group = swb:强制新文件归属 swb 组,否则不同用户创建的文件会归属各自的主要组,导致组内成员反而互相看不到对方文件create mask = 0660:新建文件权限 =rw-rw----(owner+group 读写,其他无访问)directory mask = 0770:新建目录权限 =rwxrwx---
7. 重启 Samba 服务
# CentOS 7 / RHEL 7
systemctl restart smb
# CentOS 6 / 旧版 RHEL
service smb restart
# 或单独重启(不影响 SMB)
systemctl restart nmb
8. 验证
8.1 Linux 客户端
# 列出共享
smbclient -L //samba-server/ -U gaoyh
# 进入共享目录
smbclient //samba-server/商务部 -U gaoyh
8.2 Windows 客户端
# Win+R 输入
\\samba-server\商务部
输入 gaoyh 用户名 + Samba 密码即可访问。
8.3 查看连接状态
# 查看当前连接到本 Samba 服务器的用户
smbstatus
# 查看共享的详细访问情况
smbstatus -p # 进程
smbstatus -S # 会话
smbstatus -L # 锁
常见问题速查
| 现象 | 原因 | 修复 |
|---|---|---|
| Windows 访问提示"不允许使用同一用户凭据多次连接" | Windows 默认不允许同一账号多连接 | gpedit.msc → 计算机配置 → 管理模板 → 网络 → Lanman 工作站 → 允许不安全的来宾登录/调整连接数限制 |
| 提示"NT_STATUS_ACCESS_DENIED" | 权限 070(笔误)或属主错 | 按本文 §4、§5 重设 chown + chmod 770 |
| 部门用户能进目录但不能写 | chmod 给了只读 |
检查 chmod 770 + writable = yes |
| 新建文件其他组员看不到 | 缺 force group = swb |
在 smb.conf 加 force group |
| 客户端能看见共享但打不开 | valid users 没包含该用户/组 |
改成 @swb 或加具体用户名 |
相关阅读
- Centos7下samba服务搭建及通过活动目录AD控制帐号 — 从零搭建 Samba + AD 域账号集成
- K8s 使用 NFS 作为容器存储插件 — 如果共享规模较大,可考虑用 NFS 替代 SMB