【问题标题】:How to calculate permissions for chmod command? [closed]如何计算 chmod 命令的权限? [关闭]
【发布时间】:2014-11-15 22:28:18
【问题描述】:

看了很多,还是不明白怎么用chmod。我的主要问题是这些数字是什么意思?我是 Unix 新手,正在我们的 Web 服务器上进行一些紧急修复,并被要求修复某些文件的权限。我不明白我需要做什么才能使文件可访问。

有人可以在这里提供帮助吗?

编辑:感谢大家的精彩回答。不幸的是,我很恐慌,没有及时阅读它们,我们最终失去了我们的客户。很难选择任何一个答案,但我选择了我最了解的一个。

【问题讨论】:

    标签: unix permissions chmod


    【解决方案1】:

    您有 3 种权限类型:

    • 用户(适用于文件所有者的权限)
    • 组(应用于文件组的权限)
    • 其他(适用于其他所有人的权限)

    对于这些类型中的每一种,您可以允许 3 件事:

    • 能够读取(请注意,您需要目录的读取权限才能列出它)
    • 写作能力
    • 执行能力

    如果你说:

    chmod 755 some_file
    

    它被分解成这样:

    User  Group  Other
    7     5      5      (octal value,  base-8)
    111   101    101    (binary value, base-2 or binary)
    RWX   RWX    RWX
    
    where: R - Read, W - Write, X - eXecute
    

    因此该命令意味着所有者获得所有权限,但组成员和其他人只能读取和执行。

    还有另一种使用 chmod 的输入格式很方便,并且不需要您在头脑中进行二进制转换。例如,为用户添加执行权限:

    chmod u+x some_file
    

    要删除这些权限,您会说

    chmod u-x some_file
    

    您可以将“u”替换为“u”、“g”或“o”(分别为用户、组、其他),将“x”替换为“r”、“w”或“x”(您明白了)。

    你必须小心这个。如果你这样做了:

    chmod -R 777 some_directory
    

    并且该文件包含敏感配置数据,然后您只是授予“其他”(即外部世界)完全读取权限(意味着 Web 服务器可能会提供此信息)。

    您也应该看看chown 命令。

    【讨论】:

    • 另外:我建议您尝试ls -al,因为它可以非常清晰地向您展示这里讨论的所有内容。
    • 为了完整起见,您可能需要提及 setUID/setGID 位。
    • 说实话,我从来没有使用过它们,也不能作为该主题的专家发言。如果我有时间,也许我会修改。
    • 简单地说:选项是 u+-s 和 g+-s。如果设置,它们会导致可执行文件进程的有效用户 ID 和/或组 ID 在文件执行时设置为文件的用户 ID。
    【解决方案2】:

    检查this online toy 或谷歌numerous tutorials。这些数字以八进制格式给出所有者的权限、组的权限和其他人的权限。

    【讨论】:

      【解决方案3】:

      如果您不理解这些数字,请不要使用它们:

      chmod u=rw,go=r file
      

      这将为用户设置文件的读写权限,为组和其他人设置只读权限。您可以使用+添加权限:

      chmod ug+x file
      

      (所以现在用户和组可以执行文件),您可以使用-删除权限:

      chmod g-x file
      

      (所以现在该组的成员无法执行该文件)。

      如果你想使用数字,你需要知道两组事实:

      1. 数字是八进制(数字 0..7),第一个数字(三个)代表用户的权限,第二个数字代表组的权限,第三个也是最后一个数字代表其他人。
      2. 八进制数使用三位,每一位的值是:

        • 4 — 阅读
        • 2 — 写
        • 1 — 执行

      因此,使用以下权限:

      chmod 640 file
      

      可以拆分成6代表用户,4代表组,0代表其他。 64 + 2(或4|2)表示所有者的“读取”和“写入”权限;群组的4 表示群组成员可以读取文件;而0 for others 表示其他人无法访问该文件。

      在目录的上下文中,“执行”最好称为“访问”,这意味着如果文件权限允许并且用户知道名称,则有权访问该目录的人可以使用该目录中的文件。对目录也具有读取权限,您可以看到目录中的文件列表;对目录具有写权限,您可以创建新文件或删除现有文件。

      请注意,如果执行删除的用户对该目录具有写权限,则可以删除只读文件。 rm 等命令提供保护是出于礼貌,而不是依赖内核来保护命令的用户。

      我还没有介绍权限方面的 3 位,它们出现在用户权限之前。您不必担心基本权限会导致您感到困惑,但是 SUID 或设置 UID 位 (4)、SGID 或设置 GID 位 (2) 以及粘性位 (1) 对于高级权限可能很有用权限控制。

      【讨论】:

        【解决方案4】:

        其他人对如何解码权限的八进制表示提供了很好的解释。这仅涵盖如何解决您的潜在问题。

        您遇到的问题很可能是访问您网站的人无法读取某些文件。如果您的网站组织合理,则所有可公开访问的文件都位于一个目录中,该目录中没有任何非公开文件。如果是这种情况,您可以使用以下命令更改当前目录下的所有文件,使其可读:

        find . -type f -exec chmod oug+r {} \;
        

        拥有对目录“其他”(o+r) 的读取权限将允许某人将您网站上的目录内容作为目录读取。您将需要确定这是否是您希望的情况和/或这样做是否符合您组织的政策。通常有人可以读取一个特定命名的文件——如果该文件具有适当的读取权限集——而无需读取目录。设置目录的读取权限是:

        find . -type d -exec chmod oug+r {} \;
        

        但是,您也可能不希望所有人都可以阅读所有此类目录,而只有用户和组可以阅读。在这种情况下:

        find . -type d -exec chmod ug+r o-r {} \;
        

        【讨论】:

          【解决方案5】:

          其他人已经提供了大量关于权限的解释。如果您很着急,只想弄清楚使用 chmod 命令的权限,我会查看众多在线计算器之一,这样您就不必在老板喘不过气来时浪费时间.

          我仍然建议学习基础知识...

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-09-10
            • 2013-04-20
            • 2011-03-06
            • 2018-04-11
            • 1970-01-01
            • 2010-12-20
            • 1970-01-01
            • 2014-08-05
            相关资源
            最近更新 更多