【问题标题】:Setting umask for sshfs mount为 sshfs 挂载设置 umask
【发布时间】:2015-03-23 10:06:02
【问题描述】:

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

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

【问题讨论】:

    标签: file-permissions sshfs umask


    【解决方案1】:

    来自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. AND 与 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
    

    【讨论】:

    • 如果设置不可执行的 umask 位,将无法列出目录。
    • 查看unix.stackexchange.com/q/290212 的评论 sshfs 的 umask 选项下降到底层的熔断层,在那里它被错误地处理了。我们的建议是避免它。 – Ralph Rönnquist 2016 年 6 月 17 日在 7:56
    • 这是错误的或令人困惑的。首先将掩码反转,然后应用 AND 来查找结果权限。您的示例恰好产生相同的结果,因为您的起始值为 777 并且 X AND 1 = X。但正确的函数不同:请参阅en.wikipedia.org/wiki/Umask#How_the_mask_is_applied
    【解决方案2】:

    umask sshfs 选项仅处理远程文件在您的本地系统上的显示方式,这为我提供了一些启示:serverfault.com/q/228396,远程创建的文件和文件夹所需的 0002 掩码是实现:

    附加到远程系统上/etc/pam.d/sshd 的行:

    # Setting UMASK for all ssh based connections (ssh, sftp, scp)
    session    optional     pam_umask.so umask=0002
    

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 遗憾的是,fuse/sshfs 不支持 dmask 和 fmask。
      【解决方案4】:

      在保险丝驱动程序中,umask 选项无法直观地工作。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        • 2017-11-24
        • 1970-01-01
        • 2017-06-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多