查找具有可写权限的目录中的所有 .php 文件

查找具有可写权限的目录中的所有 .php 文件

我正在寻找一个 linux 命令来扫描服务器上的所有可写目录并显示其中包含 .php 和 .html 文件的目录。

就像是:

find -type d -writable -exec find {} -iname '*.php' -o -iname '*.html' \;

10 倍!

答案1

只需将其替换-writable-perm

find -type d -perm -a=w  -exec find {} -iname '*.php' -o -iname '*.html' \;

答案2

finduniq一起使用sudo

find / -type f -iname '*.php' -execdir sudo -u #UID -- bash -c 'test -w ./ && pwd' ';' |uniq

将 UID 替换为不存在的用户 ID,因此test -w只能从以下位置得到 true全部写权限。

答案3

对于严格高于 4.8.0 的 GNU 版本find(截至 2021 年 11 月 8 日尚未发布),您可以执行以下操作:

find . -type d -perm -a=w -print0 |
  LC_ALL=C find -file0-from - -mindepth 1 -maxdepth 1 \
    '(' -iname '*.php' -o -iname '*.html' ')'

(在当前的开发版本中,find如果第一个版本没有返回任何内容,则第二个会抱怨,这不理想。希望它能在发布之前得到修复。如果没有,您可以使用 moreutilsifne来解决它)

-perm -a=w选择为其w设置了所有位的文件用户,团体其他,但请注意,为了使这些目录可写,用户仍然需要能够到达那里,因此具有对通向那里的所有路径组件的搜索访问权限。另请注意,没有成员的组不可写入的目录仍可被视为全局可写,但不会在此处报告。

-writable本身选择用户调用可写的文件find(使用access()系统调用,因此不仅仅考虑文件本身的权限)。

使用zsh,您可以执行以下操作:

set -o extendedglob # best in ~/.zshrc
for d (**/*(ND/Ff[a+w])) print -rC1 -- $d/*.(#i)(php|html)(ND)

相关内容