生成具有文件读取权限的用户列表

时间:2012-06-01 21:16:23

标签: linux shell permissions

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

例如,如果文件/ a / b / c由userid,u和groupid,g拥有某些权限,我希望此命令识别/ a和/ a / b的权限,然后计算所有权限能够阅读c的用户。特别是,当团体参与时,我遇到了麻烦。

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

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

2)g与c的父母的gid不同,gp。两个子句:

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

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

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

顺便说一下,我对这个系统有root访问权限。我想我必须将一系列猫制作成/ etc / group和/ etc / passwd以及grep以获取相关信息,这很好。此外,我们可以在这种环境中考虑'统计数据是免费的(它是我们已经拥有此信息的更大项目的一部分)。

我想我正在寻找的是一个现有的解决方案,伪代码,还是有人帮助我集体讨论算法以及我缺少的其他考虑因素。如有必要,请随意提出澄清问题 - 我知道这里的伪逻辑不是最容易阅读的。多谢你们。

2 个答案:

答案 0 :(得分: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'或类似的东西来确定。

答案 1 :(得分:1)

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