繁体   English   中英

递归查找不可公开读取的文件

[英]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 \\)

至于什么不起作用

  • 命令如s find . -perm 700 find . -perm 700find . -perm 600 find . -perm 600 只匹配具有该精确模式的文件700转换为u=rwx,go=600u=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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM