chmod -R 777 разрешает запись любому локальному процессу и маскирует настоящую проблему владельца. Для обычного PHP-FPM сайта достаточно понятной модели: deploy-пользователь владеет кодом, веб-группа пишет только туда, где это нужно.
Базовая схема
Пусть код принадлежит deploy:www-data:
chown -R deploy:www-data /var/www/site
find /var/www/site -type d -exec chmod 0755 {} +
find /var/www/site -type f -exec chmod 0644 {} +
chmod 0640 /var/www/site/wp-config.php
Если WordPress должен загружать медиа, дайте группе запись в wp-content/uploads и настройте наследование группы:
chown -R deploy:www-data wp-content/uploads
find wp-content/uploads -type d -exec chmod 2775 {} +
find wp-content/uploads -type f -exec chmod 0664 {} +
Для обновлений через админку запись понадобится шире. Безопаснее обновлять код через deploy/WP-CLI, оставляя PHP право записи только для uploads и специально выбранных cache-каталогов.
Проверка
Узнайте пользователя пула PHP-FPM, затем выполните от него тест создания файла именно в uploads. Проверьте, что он не может менять wp-config.php, плагины и тему. Не применяйте рекурсивный chmod к symlink и общим каталогам без просмотра.
Официальные источники