4

如果我在没有 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. 这些权限很好,因为上面的错误不再出现。但是,我不明白为什么将新文件设置为可执行文件......

你能解释一下吗?非常感谢...

4

4 回答 4

5

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]sa 模板掩码。与 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,权限将如下所示:

  1. AND with 0777(参见umask手册页)仅考虑“用户”、“组”和“其他”权限(即丢弃掩码的第一部分)。

000 000 010 010 -> 0022

AND

000 111 111 111 -> 0777

=

000 000 010 010 -> 0022

  1. 反转三个权限。

000 010 010 -> 022

变成

111 101 101 -> 755

如果您不希望文件可执行,但希望它们可读可写 ( chmod 666),则应设置umask为:

110 110 110 = 666 <- chmod value
001 001 001 = 111 <- umask value
于 2016-05-13T20:12:11.190 回答
1

umasksshfs 选项仅处理远程文件在本地系统上的显示方式,这为我提供了一些启示: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

这对我来说是一个长期存在的问题,干杯。

于 2020-04-16T20:04:38.407 回答
0

dmask一些文件系统允许使用和分别为目录和文件设置掩码umask,这将允许您禁用文件的可执行位。我不确定 sshfs 是否提供它,其他人已经要求它 -> https://superuser.com/questions/1020582/fuse-file-system-fmask-and-dmask

noexec如果您不希望任何用户执行任何文件,您可以为整个文件系统设置选项。

于 2016-12-28T12:08:29.417 回答
0

在保险丝驱动器中,该umask选项不能直观地工作。

  • 它不会掩盖现有权限。相反,它将权限设置为相反。
  • 它只适用于阅读。对于新文件和文件夹,根据远程主机上sshfs的配置设置其权限。sshd

两者的结合意味着如果设置了远程权限,则无法查看实际是什么umask

一些驱动程序提供单独的fmask/dmask选项以避免使所有内容都可执行,但sshfs不是其中之一。如果您不希望任何文件是可执行的,那么noexec它将起作用(但不会反映在权限中)。如果某些文件应该是可执行的,而其他文件则不是,那么这是不可能的。

于 2021-03-01T16:01:22.703 回答