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

您好我正在Linux环境中工作,我试图编写一个命令,将采取一个path作为input和输出的所有用户有读取权限的文件/目录的列表。

例如,如果file / a / b / c由userid,u和groupid,g拥有,并且拥有一些权限,我希望这个命令能够识别/ a和/ a / b的权限,然后计算所有的用户可以阅读c。 特别是,当团队卷入时,我遇到了麻烦。

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

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

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

… a)userid m是g的成员(对于g中的所有m(m不拥有c))并且拥有c的父亲p。 那么m可以读c,如果p有权限:400或更less的限制。

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

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

顺便说一句,我有这个系统的根访问权限。 我想我必须做一系列的猫到/ etc / group和/ etc / passwd和grep的相关信息,这很好。 另外,我们可以考虑在这个环境中stat是免费的(这是我们已经拥有这个信息的更大项目的一部分)。

我想我正在寻找的是一个现有的解决scheme,伪代码或某人来帮助我头脑风暴的algorithm和其他考虑,我失踪了。 随意问清楚的问题,如果有必要的 – 我知道这个伪逻辑在这里不是最容易阅读。 多谢你们。

我认为你最好的解决办法如下:

1.)确定c的权限。

if(b does not have a minimum of world execute bit settings) ie 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'或类似的东西来确定。

收集有缺陷; 使用getent代替。 不要忘记检查ACL。