Akemi

Samba多用户挂载

2025/04/17

为什么之前的挂载方式有问题?

挂载时需指定一个用户凭据(如 username=ws),所有访问共享的用户(包括非 root 用户)会继承该身份,导致:

  • 所有用户以ws的身份操作文件,无法区分实际用户。
  • 文件权限混乱,难以审计和隔离用户行为。

挂载能读写,因为挂载的用户(凭据)具有写权限,而不是client的root有权限

samba的共享在系统看来是全局的, 但实际上每个用户应该用自己的samba凭据

samba多用户设计

  • 使用最小权限用户 min 进行初始挂载,使用multiuser参数
  • 用户通过 cifscreds 提交凭据
  • Samba 服务端启用 vfs_multiuser 模块,Samba可以记录实际用户信息
  • 服务端文件系统权限仅允许 Samba 进程用户读写

multiuser参数

  • 允许多用户动态切换身份非 root 用户可以通过自己的凭据访问共享,而非依赖挂载时的初始用户。
  • 权限隔离每个用户的操作会基于其自身身份(如 Linux UID/GID)被映射到服务端,确保权限正确分离。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 服务器侧
添加用户min 表示最小权限(读权限)
useradd -s /sbin/nologin min
smbpasswd -a min

修改配置文件,添加用户min
vim /etc/samba/smb.conf
[wangsheng]
comment = its a test
path = /data/smb
valid users = xhy, min, @ws
browseable = No
read only = No
write list = @ws

systemctl restart smb.service

客户端挂载选项 multiuser

在客户端中,如果使用了multiuser参数进行挂载

那么就可以使用cifscreds来加载凭据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vim /etc/fstab
//10.163.2.102/wangsheng /samba-share cifs defaults,_netdev,username=min,password=min,multiuser 0 0

mount | grep samba
//10.163.2.102/wangsheng on /samba-share type cifs (rw,relatime,vers=3.1.1,cache=strict,upcall_target=app,multiuser,uid=0,noforceuid,gid=0,noforcegid,addr=10.163.2.102,file_mode=0755,dir_mode=0755,soft,nounix,serverino,mapposix,noperm,reparse=nfs,nativesocket,symlink=native,rsize=4194304,wsize=4194304,bsize=1048576,retrans=1,echo_interval=60,actimeo=1,closetimeo=1)

当前使用的是min的凭据
添加ws2的凭证
cifscreds add -u ws2 10.163.2.102
Password:

cd /samba-share/
touch 22222

成功创建
CATALOG
  1. 1. samba多用户设计
  2. 2. multiuser参数
  3. 3. 客户端挂载选项 multiuser