本文聚焦已有 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 或加具体用户名

相关阅读