我从一个具有一个用户(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.0
和uid=1001
。
这手动的据说我可能会forceuid
在客户端上使用它来强制某个用户。如果我将此选项包含到我的 fstab 中,我会得到一个invalid argument
upon 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