为sshfs mount设置umask

时间:2015-01-24 12:50:53

标签: file-permissions sshfs umask

如果我挂载没有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 个答案:

答案 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,则权限将如下所示:

  1. 0777(请参阅 umask 手册页)仅考虑" user"," group"和"其他人"权限(即丢弃掩码的第一部分)。
  2. 000 000 010 010 -> 0022

    AND

    000 111 111 111 -> 0777

    =

    000 000 010 010 -> 0022

    1. 反转三项权限。
    2. 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)

某些文件系统允许分别为dmaskumask的目录和文件设置掩码,这样可以禁用文件的可执行位。我不确定sshfs是否提供它,其他人要求它 - &gt; https://superuser.com/questions/1020582/fuse-file-system-fmask-and-dmask

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

答案 3 :(得分:0)

在保险丝驱动器中,umask 选项不直观。

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

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

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