在共享CIFS上挂载时,始终使用权限777

10

当我从Synology NAS挂载SMB共享文件夹时,遇到了一个小问题。我想要以权限git:root 700的方式挂载一个共享文件夹。

但是,即使在没有错误的情况下使用chmod 700命令,挂载后的文件夹权限总是被设置为777。

在我的/etc/fstab文件中,我使用了以下代码:

#uid=999 ---> git user
//server/folder /mnt/artifacts cifs username=windowsUser,password=xxxxx,gid=0,uid=999,file_mode=0700,dir_mode=0700,iocharset=utf8 0 0

你知道为什么我不能将我的权限设置为700吗? 我犯了一个错误?做了一些愚蠢的事情?

提前感谢您的帮助;)


你应该考虑将@Docnovak的答案标记为正确答案。 - tswaehn
5个回答

11
如果远程主机的用户ID和本地主机的用户ID不匹配,则权限将默认为777。mount.cifs不支持umask,因此可以使用“noperm”选项。这样,即使本地和远程主机上的用户权限不匹配,用户仍然可以读写该文件夹,相当于umask = 000。
//address/location /mount/location cifs username=username,password=password,noperm,vers=2.0 0 0

8
一个好的开始是查看CIFS的man页面:
$ man mount.cifs
[...]
   file_mode=arg
       If the server does not support the CIFS Unix extensions this overrides the default file mode.

   dir_mode=arg
       If the server does not support the CIFS Unix extensions this overrides the default mode for directories.
[...]
   nounix
       Disable the CIFS Unix Extensions for this mount. 
[...]

因为在服务器支持CIFS Unix扩展的情况下,file_mode(和dir_mode)似乎只在不起作用,所以我建议先通过禁用它们(通过nounix选项)来解决问题。


谢谢您的回答 ;) 我已经尝试添加 nounix 选项(并删除文件/目录模式),但这会产生“没有此文件或目录”的错误。 - David
谢谢!那个很好用。请看下面的答案获取更多细节。 - Yannick Mauray

2

添加 nounix 很顺利。需要注意的是,我在 /etc/fstab 文件中的那一行是:

//server/share /mnt/folder cifs credentials=/home/yannick/.smbcredentials,iocharset=utf8,sec=ntlm,vers=1.0,uid=1000,gid=1000,file_mode=0644,dir_mode=0755,nounix 0 0

在我的用户ID和组ID中,1000是我的身份标识。

.smbcredentials文件中,我有以下内容:

username=<distant login>
password=<distant password>

0

我尝试挂载一个只有root用户有权限的CIFS共享。其他用户甚至不能列出任何文件。

因此,我使用了以下fstab条目:

//192.168.0.100/DRV   /mnt/DRV   cifs   user=user,pass=pass,uid=0,gid=0,nounix,file_mode=0007,dir_mode=0007   0   0

我也尝试了noperm参数。

具体来说,我使用以下权限创建了该文件夹:

drwxrwx--- 2 root root 4096 Mai 14 09:09 DRV

挂载网络共享后,该文件夹中有以下内容:
d------rwx 2 root root 4096 Mai 14 04:50 W

我已经意识到我的错误: 权限 file_mode=0007,dir_mode=0007 是错误的! 正确的是 0770。我感到疑惑,因为我经常阅读要反转权限标志! - Meisterzunge

-3

你的问题非常普遍。你正在使用不正确的标签来更改挂载文件夹的文件权限。

你需要添加'umask=',而不是'file_mode=700''dir_mode=700',因为它使用的是系统挂载选项而不是CIFS的选项。

要做到这一点,你可以使用:

//address/location /mount/location cifs credentials=/location,uid=id,gid=id,umask=700 0 0

这将在设置的文件权限下挂载文件共享。

为了安全起见,我建议使用凭据文件,其中包含用户名和密码,并且必须设置为只读。


1
嗨@MrEditor97,我已经尝试使用umask,但是会产生“无效参数”错误。//server/folder /mnt/artifacts cifs credentials=/root/.smbcredentials,gid=0,uid=999,iocharset=utf8,umask=700 0 0似乎umask不能与cifs一起使用。 - David
2
嗨@David, 很抱歉你仍然有问题。我刚刚参考了我的设置,要挂载CIFS共享并使用您想要的权限,您必须使用file_mode=0600,dir_mode=0700。我正在使用Samba共享(它强制正确的文件权限),因此我不必像您这样做。您是否可以在共享上强制正确的文件权限?我唯一能说的是,尝试在挂载时在file_mode=dir_mode=前面添加0 - MrEditor97
嗨@MrEditor97,首先,感谢您的回答;)不幸的是,我仍然在添加0时遇到问题。但是我在我的NAS中找到了解决方案,所以现在它可以工作:D 感谢大家;) - David
@David,谢谢你让我知道你已经解决了问题。虽然我无法帮助你解决实际问题,但我感到很抱歉。 - MrEditor97
3
mount.cifs不支持umask选项,会报错"mount error(22): Invalid argument",但它支持file_modedir_mode选项。即使如此,在下面的正确答案中也会给出解决方法,如果远程用户和本地用户/组身份不匹配,则默认为0777。 - tswaehn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接