重新映射 samba 共享中的 UID

重新映射 samba 共享中的 UID

是否可以重新映射向 samba 客户端报告的 UID(和 GID)?看起来可能有多种idmap选项,但对于我想要完成的简单重新映射来说,它看起来过于复杂,而且我很困惑这是否是正确的方法。

考虑两台机器 A 和 B。机器 A 有具有smbuserUID 的用户701。机器 B 只有一个具有rootUID 的用户0

smb.conf机器A摘录:

[share1]
  path = /tmp/share1
  valid users = smbuser

在机器B上:

mount -t cifs -o username=smbuser,pass=**** //10.1.1.11/share1 /mnt
ls -l /mnt

我懂了:

drwx------  701  701       0 Jan  1 00:00  .
drwx------  root root      0 Jan  1 00:00  ..
-rw-------  701  701      42 Jan  1 00:00  testfile

我想:

drwx------  root root      0 Jan  1 00:00  .
drwx------  root root      0 Jan  1 00:00  ..
-rw-------  root root     42 Jan  1 00:00  testfile

701 -> 0TL;DR:在向客户端提供目录列表时,我需要 samba 重新映射 UID 。

答案1

uid您需要、forceuidgidmount选项的组合forcegid。这样,您可以指示 SMB 客户端始终分配特定的 UID 和 GID 来拥有这些文件。另外,您无需为此更改 SMB 服务器配置。

cifs.mount请参阅位于的联机帮助页https://linux.die.net/man/8/mount.cifs:

uid=arg当服务器不提供所有权信息时,设置将拥有已安装文件系统上所有文件或目录的 uid。它可以指定为用户名或数字 uid。未指定时,默认值为 uid 0。mount.cifs 帮助程序必须为 1.10 或更高版本才能支持以非数字形式指定 uid。有关详细信息,请参阅下面有关文件和目录所有权和权限的部分。

forceuid指示客户端忽略服务器为文件和目录提供的任何 uid,并始终将所有者指定为 uid= 选项的值。有关详细信息,请参阅下面有关文件和目录所有权和权限的部分。

gid=arg当服务器不提供所有权信息时,设置将拥有已安装文件系统上所有文件或目录的 gid。它可以指定为组名或数字 gid。未指定时,默认值为 gid 0。 mount.cifs 帮助程序必须为 1.10 或更高版本才能支持以非数字形式指定 gid。有关详细信息,请参阅下面有关文件和目录所有权和权限的部分。

forcegid指示客户端忽略服务器为文件和目录提供的任何 gid,并始终将所有者指定为 gid= 选项的值。有关详细信息,请参阅下面有关文件和目录所有权和权限的部分。

根据您的情况,您可以使用(不指定 UID/GID 将使用默认的 0):

mount -t cifs -o username=smbuser,pass=****,uid,forceuid,gid,forcegid //10.1.1.11/share1 /mnt

另请查看dynperm可能对您有用的选项。

作为参考,“文件和目录所有权和权限”部分了解:

文件和目录的所有权和权限

核心 CIFS 协议不提供文件和目录的 UNIX 所有权信息或模式。因此,文件和目录通常看起来由 uid= 或 gid= 选项设置的任何值拥有,并且将具有设置为安装的默认 file_mode 和 dir_mode 的权限。尝试通过 chmod/chown 更改这些值将返回成功,但没有任何效果。

当客户端和服务器协商unix扩展时,文件和目录将被分配服务器提供的uid、gid和模式。由于 CIFS 挂载通常是单用户的,并且无论哪个用户访问挂载都使用相同的凭据,因此新创建的文件和目录通常会被授予与用于挂载共享的任何凭据相对应的所有权。

如果客户端和服务器上使用的 uid 和 gid 不匹配,forceuid 和forcegid 选项可能会有所帮助。但请注意,没有相应的选项来覆盖该模式。当forceuid或forcegid生效时分配给文件的权限可能不会反映真实的权限。

当未协商 unix 扩展时,还可以使用“dynperm”安装选项在服务器上本地模拟它们。当此安装选项生效时,新创建的文件和目录将获得看似适当的权限。然而,这些权限不会存储在服务器上,并且可能在将来随时消失(受内核刷新 inode 缓存的影响)。一般来说,不鼓励使用此安装选项。

还可以通过 noperm 选项完全覆盖客户端上的权限检查。服务器端权限检查不能被覆盖。服务器完成的权限检查将始终与用于安装共享的凭据相对应,而不一定与正在访问共享的用户相对应。

相关内容