【问题标题】:Generate a list of users with read access to files生成对文件具有读取权限的用户列表
【发布时间】:2012-06-07 02:50:59
【问题描述】:

您好,我在 Linux 环境中工作,我正在尝试编写一个命令,该命令将路径作为输入并输出对该文件/目录具有读取权限的所有用户的列表。

例如,如果文件 /a/b/c 由 userid, u 和 groupid, g 拥有,并具有一些权限,我希望此命令识别 /a 和 /a/b 的权限,然后计算所有可以阅读的用户 c.尤其是当团体参与时,我会遇到麻烦。

我正在尝试将基于组的识别读取访问权限划分为案例:

1) g 匹配 c 的父 gid,gp,(或祖父等)的 gid,在这种情况下,如果 gp 的权限为:040,或限制较少,则 g 的任何成员都可以读取 c。

2) g 不同于 c 的父级 gid,gp。两个子案例:

...a) 用户 ID m 是 g 的成员(对于 g 中的所有 m(m 不拥有 c))并且拥有 c 的父级 p。如果 p 有权限,则 m 可以读取 c:400,或者限制更少。

...b) 用户 ID m 是 g 的成员(对于 c 的 gid 中的所有 m(m 不拥有 c))并且不拥有 c 的父级 p。如果 p 有权限,则 m 可以读取 c:004 或更少限制。

3) 你拥有 p,在这种情况下 p 需要 400 或更少限制的权限。

顺便说一句,我在这个系统上有根访问权限。我想我必须为 /etc/group 和 /etc/passwd 和 grep 制作一系列猫以获取相关信息,这很好。此外,我们可以考虑在这种环境中免费提供“统计信息”(它是我们已经拥有此信息的更大项目的一部分)。

我想我正在寻找的是现有的解决方案、伪代码或帮助我集思广益的算法和我缺少的其他注意事项的人。如有必要,请随时提出澄清问题 - 我知道这里的伪逻辑不是最容易阅读的。多谢你们。

【问题讨论】:

    标签: linux shell permissions


    【解决方案1】:

    cating 有缺陷;请改用getent。不要忘记检查 ACL。

    【讨论】:

    • 并且不要忘记检查目录遍历一直到根目录。
    【解决方案2】:

    我认为您的最佳解决方案如下:

    1.) 确定c的权限。

    if(b does not have a minimum of world execute bit settings) i.e. 711
          return error; ( or owner && root)
          // you can easily extend this check to recursively work back to /
    if (c has global read permissions) 
           return everyone;
    else if (c has group read permissions)
           determine group name && return all members of said group
    else (return owner && root)
    

    2.) 可以使用 getent 确定所述组的成员。例如: getent group - 返回系统上的所有组 getent passwd - 返回所有用户 3.) 权限可以用“stat c”或类似的东西来确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2017-02-12
      • 2011-06-07
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2015-07-13
      相关资源
      最近更新 更多