为什么使用 cifs 时服务器和客户端上的 UID 必须匹配?

为什么使用 cifs 时服务器和客户端上的 UID 必须匹配?

我从一个具有一个用户(1000)的Linux客户端连接到服务器。

两台机器上的用户名相同,但 UID 不同。

当我连接时,文件显示为所有者1001,而不是USER我预期的那样。我希望 cifs 将原始用户转换为我在客户端上使用的用户。但事实并非如此。似乎我必须在客户端和服务器上都有类似的用户,并且还要在两者上为他们分配相同的 UID。但我无法想象这是唯一的解决方案。

客户端的 mount.cifs 版本为 6.4。

我的 fstab 是

//192.168.111.190/hgst /home/ben/hgst cifs vers=1.0,noauto,users,uid=1001,username=USER,password=PASSWORD

我已将其更改为包含vers=1.0uid=1001

手动的据说我可能会forceuid在客户端上使用它来强制某个用户。如果我将此选项包含到我的 fstab 中,我会得到一个invalid argumentupon mount,两者都是 1000 和 1001。我不在forceuid服务器上使用。

我的服务器正在运行 openmediavault 3,我的客户端是 Lubuntu 16.04 LTS。

答案1

服务器和客户端上的 UID 不必匹配。这就是您使用 samba 服务器的全部原因。

这有点像挂载 NTFS 分区。如果没有指定 uid,挂载的共享将归 root 所有。uid=1001 指的是客户如果客户端有具有该 uid 的用户,则不是服务器。

对于服务器:无论您如何在客户端中挂载它,您所做的所有操作都是以您在 cifs 挂载表达式中的用户名 = USER / 密码 = PASSWORD 组合中登录的用户身份完成的。

对于客户端:如果客户端是 Linux,它将按照您在挂载表达式中定义的方式进行挂载。

并且不需要 forceuid 参数。

所以情况应该是这样的:

//192.168.100.90/hgst /home/ben/Benshare/hgst cifs vers=1.0,noauto,users,uid=1000,username=USER,password=PASSWORD

编辑

CIFS 挂载表达式中的 uid 参数将挂载共享的所有权从 root 更改为 uid 指定的所有者。在原始挂载中,您将 uid 设置为 1001,该用户在客户端上不存在。您应该将 uid 设置为 1000,因为这是客户端用户的 uid。forceuid 不是必需的。

答案2

为什么使用 cifs 时服务器和客户端上的 UID 必须匹配?

不知道。但不应该这样。如果一端和另一端的用户名相同,则应该采用一个用户名。请注意:

uid=参数

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

...

两台机器上的用户名相同,但 UID 不同。

如果相同,为什么不使用用户名?uid接受名称和用户 ID。

手册说我可能会在客户端使用 forceuid 来强制某个用户。

您可以使用user=uid=用户名或credentials=与之前有用户名和密码的文件名一起使用forceuid

答案3

我的问题是,我使用的forceuid错误的方法

该选项必须像这样包含:

uid=1000,forceuid

这意味着我必须uid先设定一个,然后再选择forceuid,以确保使用来自另一个选项的 UID。

我将其与服务器上的所有权进行了交叉检查。文件现在显示在客户端上的 UID 为 1000,但写入服务器的 UID 为 1001,完全符合要求。用户名相同,这也是正确的。


我的另一个错误是将 UID 声明为来自服务器的 UID(1001)。但事实必须反过来,UID 需要告诉客户端哪个本地用户应该拥有这些文件,就我而言uid=1000

因此,有了这个选项,forceuid可能就没有必要了。


有用的手册页是:http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html

相关内容