这是一个实际的工作问题。用户以前可以“su - userx”并且能够以 user:owner 权限作为 userx:groupz 760 或 540 执行脚本,或者修改 userx:groupz 740 或 640 的文件。现在,该用户可能不再 su 为 userx并且必须作为 groupz 的成员执行任务。需要更改组权限,但必须先找到问题文件。当它们失败时可以找到它们,或者希望你能帮助我主动找到它们。所有者:组为 userx:groupz 且其组权限比所有者权限更具限制性的任何文件或目录都可能会出现问题,必须在“业务逻辑”的上下文中进行查看。有没有办法找到所有此类文件和目录?这个问题的答案可能会发现许多潜在的问题,否则这些问题只有在过去有效的操作现在失败时才会浮现出来。
答案1
如果您有 GNUfind
可用,您可以使用如下内容:
find /somedir -user userx -group groupz \( -perm /u+w,g-w -o -perm /u+r,g-r -o -perm /u+x,g- \) -ls
答案2
查找属于所需用户和组的文件,这样,对于三个文件访问权限之一,用户拥有此权限,但组没有。
find / -user userx -group groupz \( -perm -u+r ! -perm -g+r -o \
-perm -g+w ! -perm -g+w -o \
-perm -g+x ! -perm -g+x \) -print
请注意,这可以返回任何文件类型,包括在许多 UNIX 变体上权限和所有权无关紧要的符号链接。要排除符号链接,请添加! -type l
.
如果您想对文件进行操作,请使用-exec
.
如果您只想将组权限与用户权限对齐,则可以chmod g=u
自由运行。
find / -user userx -group groupz ! -type l -exec chmod g=u {} +
答案3
这是我测试过的最终解决方案,它有效。为了避免搜索已安装的远程文件系统,我需要 -mount,并避免遵循我需要的符号链接! -跟随。我希望输出显示权限,以便我可以轻松验证它们是否满足我的标准,因此我使用了 -ls。令人惊讶的是“论证的顺序”非常重要。在我找到有效的命令之前,该命令会返回一些不正确的结果。
查找 -user userx -group groupz -mount \ ( ( -perm -u=r -a ! -perm -g=r ) -o \ ( -perm -u=w -a ! -perm -g=w ) -o \ (-perm -u=x -a !-perm -g=x ) \) -ls ! -跟随