如果我挂载没有umask的sshfs服务器,我会在新创建的文件上获得-rw-rw-r--
。如果我尝试在浏览器上打开服务器上的php文件,我会收到此错误:
Incorrect file/directory permissions: Above 755.
In order files to be processed by the webserver, their permissions have to be equal or below 755.
所以我尝试使用umask=0022
:新创建的文件有-rwxr-xr-x
。这些权限很好,因为上面的错误不再出现。但是,我无法理解为什么新文件被设置为可执行文件......
答案 0 :(得分:3)
来自sshfs
手册:
-o umask=M
set file permissions (octal)
请注意,手册中提到选项名称为umask
。因此,它与您在chmod
中使用的值不同,其中7
表示rwx
(二进制111
)。相反,umask
是一个掩码,如名称所示。
对于fuse
,此掩码用作所需权限的反转。
然后,从http://wiki.gilug.org/index.php/How_to_mount_SFTP_accesses#General_working_of_umask,我们得到以下内容:
[umask i]是模板掩码。作为chmod反转,因为用于着色在创建文件和目录时要设置的权限。八进制值越高,限制越多(在二进制级别,第1位阴影属性,第0位允许它)。
0 allows rwX
1 allows rw-
2 allows r-X
3 allows r--
4 allows -wX
5 allows -w-
6 allows --X
7 allows ---
因此,如果您提供0022
,则权限将如下所示:
0777
(请参阅 umask 手册页)仅考虑" user"," group"和"其他人"权限(即丢弃掩码的第一部分)。 000 000 010 010 -> 0022
AND
000 111 111 111 -> 0777
=
000 000 010 010 -> 0022
000 010 010 -> 022
变为
111 101 101 -> 755
如果您不希望文件可执行,但希望文件可读写(chmod 666
),则应将umask
设置为:
110 110 110 = 666 <- chmod value
001 001 001 = 111 <- umask value
答案 1 :(得分:1)
umask
sshfs选项仅处理远程文件在本地系统上向您显示的方式,这为我解决了这个问题:serverfault.com/q/228396,远程创建所需的umask为0002文件和文件夹是通过以下方式实现的:
在远程系统上附加到/etc/pam.d/sshd
的行:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0002
这对我来说是一个长期存在的问题,欢呼。
答案 2 :(得分:0)
某些文件系统允许分别为dmask
和umask
的目录和文件设置掩码,这样可以禁用文件的可执行位。我不确定sshfs是否提供它,其他人要求它 - &gt; https://superuser.com/questions/1020582/fuse-file-system-fmask-and-dmask
如果您不希望任何用户执行任何文件,您可以为整个文件系统设置noexec
选项。
答案 3 :(得分:0)
在保险丝驱动器中,umask
选项不直观。
sshfs
新文件和文件夹,根据远程主机上的 sshd
配置设置其权限。两者的结合意味着如果设置了 umask
,则无法查看实际远程权限是什么。
某些驱动程序提供单独的 fmask
/dmask
选项以避免使所有内容都可执行,但 sshfs
不是其中之一。如果您不希望任何文件可执行,那么 noexec
将起作用(但不会反映在权限中)。如果某些文件应该是可执行的,而另一些则不是,那么这是不可能的。