我想recursion地find我的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
。 !
)对安全主体“其他(世界)”( o
)具有读权限( r
) 只要检查的所有文件既不是由用户帐户在其上下文中创建的,也不属于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 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
的否定运算符否定结果!
,之前。