[英]Recursively find files that are not publicly readable
我想以递归方式查找我的public_html
文件夹中不可公开读取的所有文件(即那些会导致403错误的文件)。 是否有快速bash命令? 我正在使用运行apache的Linux服务器,如果这是相关的。 谢谢。
使用find
命令:
find . ! -perm -o=r
将搜索当前目录和具有文件权限的子目录中的文件,以便“其他”组无法读取该文件。
find
的手册页提供了这些选项的一些示例。
您可以以www-data
用户身份运行此命令:
find . ! -readable
查找Web服务器无法读取的所有文件。
注意:这个答案最初编写时mcleod_ideafix的答案仍然包含以下破坏的命令: find . -perm -or
find . -perm -or
; 这个答案的最后一部分解释了为什么它无法工作。
find . ! -perm -o=r
.
)中的所有文件和目录
-type f
。 !
)具有读取权限( r
为安全主体“人(世界)”中设置)( o
) 这如预期运作,只要检查所有文件既不在用户帐户其上下文中运行的Web服务器,也不属于一组Web服务器帐户是的成员创建的。 通常,情况就是这样。
以上命令符合POSIX标准 。
mcleod_ideafix的答案为GNU find
(非标准) -readable
测试提供了更强大的选项 :
当在Web服务器的用户帐户(在Linux上, www-data
)的上下文中运行时,这将仅匹配Web服务器实际无法读取的文件和目录, 无论用户和组拥有该文件 :
sudo -u www-data find . ! -readable -prune
请注意, -prune
可防止尝试下降到不可读的子目录 ,从而抑制警告。
sudo -u www-data find . ! -readable \\( -type f -print -o -prune \\)
至于什么不起作用 :
find . -perm 700
find . -perm 700
并find . -perm 600
find . -perm 600
只匹配具有该精确模式的文件 ( 700
转换为u=rwx,go=
, 600
为u=rw,go=
),因此您必须为用户和组权限的所有可能变体构造命令找到所有感兴趣的比赛。 find . -perm -or
find . -perm -or
从根本上被破坏,并且总是与任何文件或目录匹配 :
-perm
的值的-
前缀指定在匹配文件中设置后面的所有权限。 -perm
只允许权限的积极匹配(而不是有什么不设置设置的内容),所以它是从根本上无法表达“比赛仅当此权限未设置”逻辑,只需-perm
唯一理由。
-r
在语法上是受支持的(因为它是有效的chmod
语法),但这里没有意义 ,导致无操作。 -or
告诉-perm
从用于匹配的模式掩码的起始值中减去 (删除)“其他”的读权限位; 因为起始值是000
,或者象征性地是a=
,任何从中减去权限的尝试都是无操作,即没有效果。 把它放在比利普雷斯顿和布鲁斯费舍尔不朽的话语中: 没什么'没什么'离开'没什么' -perm
本身匹配正 ( -perm -o=r
),然后通过放置find
的否定运算符来否定结果!
在它之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.