Я столкнулся с проблемами безопасности на нескольких веб-сайтах Wordpress, и мне нужно рекурсивно изменить владельца (и разрешения) для папки "wp-content" (и всего, что находится внутри них).
Мне нужно найти все папки с именем wp-content
(их несколько) и изменить их и все их содержимое так, чтобы они принадлежали nginx:nginx
с разрешениями 755 для папок и 644 для файлов.
Я не могу найти способ найти эти папки, а затем изменить владельца.
Есть зацепки? :/
Вы можете использовать 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 {} +
Вы можете сделать что-то вроде:
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
.