查找特定文件夹,然后更改其所有权

查找特定文件夹,然后更改其所有权

我遇到了多个 WordPress 网站的安全问题,我需要递归地更改文件夹“wp-content”(以及其中的任何内容)的所有权(和权限)。

我需要找到所有指定的文件夹wp-content(有几个)并更改它们及其所有内容,以便它们的所有者拥有nginx:nginx文件夹权限 755 和文件权限 644。

我无法找到找到这些文件夹然后更改所有权的方法。

有什么线索吗? :/

答案1

您可以使用 GNUfind和 GNUxargs搜索wp-content目录并将结果以 NUL 结尾传递给 shell 脚本:

find /path/to/directory -type d -name 'wp-content' -print0 | xargs -0 sh -c '
  for dir; do
    # change user and group recursively to nginx
    chown -R nginx:nginx "$dir"

    # change dirs to 755
    find "$dir" -type d -exec chmod 755 {} +

    # change files to 644
    find "$dir" -type f -exec chmod 644 {} +
  done
' sh

或者,您可以将脚本部分保存在 shell 脚本中myscript.sh

#!/bin/sh

for dir; do
  # change user and group recursively to nginx
  chown -R nginx:nginx "$dir"

  # change dirs to 755
  find "$dir" -type d -exec chmod 755 {} +

  # change files to 644
  find "$dir" -type f -exec chmod 644 {} +
done

然后使 shell 脚本可执行

chmod +x myscript.sh

并使用该操作运行find(不一定是 GNU 实现)-exec并将结果传递给脚本:

find /path/to/directory -type d -name 'wp-content' -exec ./myscript.sh {} +

答案2

你可以这样做:

LC_ALL=C find . '(' -name wp-content -type d -o \
                    -path '*/wp-content/*' '(' -type d -o -type f ')' \
                ')' -exec chown nginx:nginx {} + \
                    -exec chmod u=rwX,g=rX,o=rX {} +

这样,您只需对目录进行一次爬网,并根据需要运行尽可能少的调用chownchmod并且仅更改目录和常规文件的所有权/权限(不包括符号链接、设备、fifos...)。

通过某些find实现,您可以简化'(' -type d -o -type f ')'-type f,d.

答案3

也可以使用以下命令来完成。

find some-folder-path -type d -name wp-content -exec chown new-user:new-group {} \;

上述命令将更改名为 wp-content 的所有文件夹的所有权和组。

find some-folder-path -type d -exec chmod 755 {} \;
find some-folder-path -type f -exec chmod 644 {} \;

上述命令会将文件的权限更改为 644,将文件夹的权限更改为 755。

相关内容