挂载共享 cif 的权限始终为 777

Posted

技术标签:

【中文标题】挂载共享 cif 的权限始终为 777【英文标题】:Always permission 777 on mount shared cifs 【发布时间】:2016-11-07 14:53:12 【问题描述】:

我从 Synology NAS 挂载 SMB 共享文件夹时遇到了一点问题。 我想挂载一个有权限的共享文件夹:git:root 700

但是挂载的文件夹总是将权限设置为 777(即使在 chmod 700 后没有错误)

在我的/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 的答案标记为正确的 【参考方案1】:

如果远程机器用户 ID 和本地机器用户 ID 不匹配,权限将默认为 777。Mount.cifs 不支持 umask,因此可以使用 "noperm" 选项。这样即使本地和远程机器上用户的权限不匹配,仍然允许用户读写文件夹,相当于umask=000。

//address/location /mount/location cifs username=username,password=password,noperm,vers=2.0 0 0

【讨论】:

【参考方案2】:

一个好的开始是查看CIFS 的联机帮助页:

$ 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. 
[...]

因此,由于file_mode(和dir_mode)似乎只有在服务器支持 CIFS Unix 扩展时才有效,我将首先禁用它们(通过 nounix 选项)

【讨论】:

感谢您的回答 ;) 我已经尝试添加 nounix 选项(并删除 file/dir_mode )但这会产生 no such file or directory 错误。 谢谢!那工作得很好。有关详细信息,请参阅下面的答案。【参考方案3】:

添加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

1000 是我的用户 ID 和组 ID。

.smbcredentials 里面,我有这个:

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

【讨论】:

【参考方案4】:

我尝试挂载一个只有 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 错误!正确的ist 0770。我想知道,因为我经常阅读以反转权限标志!?【参考方案5】:

您的问题很常见。您使用了不正确的标签来更改挂载文件夹的文件权限。

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

为此,您可以使用:

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

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

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

【讨论】:

嗨@MrEditor97,我试过umask,但会产生Invalid argument 错误。 //server/folder /mnt/artifacts cifs credentials=/root/.smbcredentials,gid=0,uid=999,iocharset=utf8,umask=700 0 0 It seems umask 不能与 cif 一起使用。 嗨@David,很抱歉您仍有问题。我刚刚引用了我的设置,并且要使用您想要的权限安装 CIFS 共享,您必须使用file_mode=0600,dir_mode=0700。因此,我使用的是 Samba 共享(这会强制正确的文件权限),所以我不必像你那样做。您是否可以对您的共享强制执行正确的文件权限?我唯一能说的就是尝试使用file_mode= and dir_mode=,并在底座前添加一个0 嗨@MrEditor97,首先,感谢您的回答;)不幸的是,我仍然遇到添加0的问题。但是我在我的NAS中找到了一个解决方案,所以现在它正在工作:D感谢大家;) @David,感谢您让我知道您已经安排妥当。很抱歉,我无法帮助您解决实际问题。 mount.cifs 不支持 umask [mount error(22): Invalid argument],但支持 file_modedir_mode。然而,正确的答案在下面给出。如果远程和本地用户/gid 不匹配,则默认为 0777。

以上是关于挂载共享 cif 的权限始终为 777的主要内容,如果未能解决你的问题,请参考以下文章

mount.cifs Windows共享目录权限755问题

Centos 7挂载Windows server 2012 R2的NFS共享目录报错

使用CIFS在Linux上挂载Windows共享

linux cifs挂载windows共享文件夹

ANDROID:在 Java 中访问 CIFS 共享

TEC-005-cifs-Host is down