挂载共享 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_mode 和 dir_mode。然而,正确的答案在下面给出。如果远程和本地用户/gid 不匹配,则默认为 0777。以上是关于挂载共享 cif 的权限始终为 777的主要内容,如果未能解决你的问题,请参考以下文章