Найдите определенные папки, а затем измените их владельца

Я столкнулся с проблемами безопасности на нескольких веб-сайтах Wordpress, и мне нужно рекурсивно изменить владельца (и разрешения) для папки "wp-content" (и всего, что находится внутри них).

Мне нужно найти все папки с именем wp-content(их несколько) и изменить их и все их содержимое так, чтобы они принадлежали nginx:nginxс разрешениями 755 для папок и 644 для файлов.

Я не могу найти способ найти эти папки, а затем изменить владельца.

Есть зацепки? :/

0
30.06.2020, 16:44
2 ответа

Вы можете использовать GNU findи GNU xargsдля поиска в каталогах wp-contentи передачи результата NUL -в сценарий оболочки:

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

Кроме того, вы можете сохранить часть сценария в сценарии оболочки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

Затем сделайте сценарий оболочки исполняемым с помощью

chmod +x myscript.sh

и запуститьfind(не обязательно реализацию GNU )с помощью действия -execи передать результат скрипту:

find /path/to/directory -type d -name 'wp-content' -exec./myscript.sh {} +
2
18.03.2021, 23:25

Вы можете сделать что-то вроде:

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 {} +

Таким образом, вы сканируете каталог только один раз и запускаете минимальное количество вызовов chownи chmodпо мере необходимости и меняете только владельца/права доступа к каталогу и обычным файлам (, исключая символические ссылки, устройства, файлы FIFO.... ).

С некоторыми реализациями findвы можете упростить '(' -type d -o -type f ')'до -type f,d.

0
18.03.2021, 23:25

Теги

Похожие вопросы