Yin*_*ong 6 linux bash public-html server
我想以递归方式查找我public_html文件夹中不可公开读取的所有文件(即那些会导致403错误的文件).是否有快速bash命令?我正在使用运行apache的Linux服务器,如果这是相关的.谢谢.
使用find命令:
find . ! -perm -o=r
Run Code Online (Sandbox Code Playgroud)
将搜索当前目录和具有文件权限的子目录中的文件,以便"其他"组无法读取该文件.
手册页find提供了这些选项的一些示例.
您可以以www-data用户身份运行此命令:
find . ! -readable
Run Code Online (Sandbox Code Playgroud)
查找Web服务器无法读取的所有文件.
注意:这个答案最初是在mcleod_ideafix 的答案中仍然包含以下损坏的命令时编写的:find . -perm -o-r; 这个答案的最后一部分解释了为什么它不起作用。
find . ! -perm -o=r
Run Code Online (Sandbox Code Playgroud)
.)
-type f.!ro只要检查的所有文件既不是由运行 Web 服务器的上下文中的用户帐户创建的,也不属于 Web 服务器帐户所属的组,则这将按预期工作。通常情况就是这样。
上述命令符合POSIX 标准。
mcleod_ideafix 的答案提供了一个更强大的选项,可用于GNU find的(非标准) -readable测试:
当在网络服务器的用户帐户上下文中运行时(在 Linux 上www-data),这只会匹配网络服务器实际上无法读取的文件和目录,而不管哪个用户和组拥有该文件:
sudo -u www-data find . ! -readable -prune
Run Code Online (Sandbox Code Playgroud)
请注意,这-prune会阻止尝试进入不可读的子目录,从而抑制警告。
sudo -u www-data find . ! -readable \( -type f -print -o -prune \)至于什么不起作用:
find . -perm 700和之类的命令find . -perm 600 只会匹配具有该确切模式的文件(700转换为u=rwx,go=, 600to u=rw,go=),因此您必须为用户和组权限的所有可能变体构建命令,以找到所有感兴趣的匹配项。find . -perm -o-r从根本上来说是损坏的并且总是匹配任何文件或目录:
-传递给的值的前缀指定在匹配文件中设置-perm后面的所有权限。-perm只允许正向匹配权限(设置的内容与未设置的内容相对),因此从根本上不可能只用-perm参数来表达“仅在未设置此权限时匹配”逻辑。
-r在语法上受支持(因为它是有效的chmod语法),但它在这里毫无意义并导致无操作。-o-r告诉从用于匹配的模式掩码的起始值中-perm减去(删除)“其他”的读取权限位;由于该起始值为000,或者象征性地为 ,a=因此任何从中减去权限的尝试都将是无操作,即没有效果。用比利·普雷斯顿和布鲁斯·费舍尔的不朽名言来说:Nothing from nothing leaves nothing-perm 自身正向匹配( -perm -o=r),然后通过在其前面放置 的否定运算符来否定结果find!。| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |