Коротко: WordPress просит FTP: Чтобы WordPress перестал запрашивать FTP-доступ, установите права 755 на все папки и 644 на файлы. Убедитесь, что владельцем файлов и каталогов является пользователь, от которого работает веб-сервер (обычно www-data или apache). В файле wp-config.php добавьте константу define('FS_METHOD', 'direct') — это заставит WordPress использовать прямой доступ к файловой системе.
Когда WordPress просит FTP-доступ при установке плагинов, большинство пользователей теряется в догадках. На самом деле система вовсе не требует обязательного FTP-сервера — она просто не может записать файлы напрямую из-за ограничений файловой системы. Чаще всего причина кроется в некорректных правах файлов или несовпадении владельца с пользователем веб-сервера. Разберёмся, как быстро исправить эту ошибку и вернуть контроль над сайтом.
Основные причины
| Причина | Что это значит |
|---|---|
| Неверные права на файлы и папки | Если права на директории выставлены ниже 755 или на файлы ниже 644, серверный пользователь не может создавать или изменять файлы плагинов. WordPress блокирует прямую запись и запрашивает FTP-доступ. |
| Файлы принадлежат не тому пользователю | Владельцем файлов WordPress должен быть тот же пользователь, от которого запущен веб-сервер (например, www-data, apache, nginx). Если после миграции или неудачного сброса прав владелец сменился, WordPress теряет доступ на запись. |
| Прямые методы записи отключены в конфигурации PHP | Директивы open_basedir или отключенный allow_url_fopen могут ограничивать возможности PHP по прямой работе с файловой системой. В результате WordPress вынужден использовать FTP как альтернативу. |
| Активный безопасный режим PHP | На старых версиях PHP включённый safe_mode блокирует попытки записи, если владелец скрипта не совпадает с владельцем файла. WordPress автоматически переключается на FTP-режим в таких условиях. |
| Предварительно заданные FTP-данные в wp-config.php | Если в конфигурационном файле явно указаны константы FTP_HOST, FTP_USER и FTP_PASS, WordPress будет пытаться использовать FTP даже при возможности прямой записи. Система приоритетно использует заданный транспорт. |
| Недостаточные права на папку wp-content/uploads | При установке плагинов WordPress также записывает временные файлы и мета-информацию. Если папка uploads или wp-content имеют слишком строгие разрешения, прямая запись становится невозможной. |
| Ограничения SELinux или AppArmor | В серверных окружениях с активным SELinux или AppArmor политики безопасности могут запрещать веб-серверу запись в рабочие каталоги WordPress, даже если права выставлены верно. Необходима настройка контекста. |
Что проверить сначала
- Проверьте текущие права на папки WordPress командой find . -type d -exec stat -c '%a %n' {} ;
- Узнайте, от какого пользователя работает ваш веб-сервер (например, ps aux | grep apache или ps aux | grep nginx)
- Сравните владельца файлов WordPress с пользователем веб-сервера командой ls -l
- Просмотрите файл wp-config.php на наличие констант FTP_* и FS_METHOD
- Проверьте, не включён ли safe_mode в настройках PHP (файл php.ini или через phpinfo())
- Убедитесь, что директория wp-content/uploads доступна для записи: ls -ld wp-content/uploads
- Проверьте логи ошибок веб-сервера и WordPress (wp-content/debug.log) на наличие сообщений о правах
- Временно отключите плагины кеширования и защиты, чтобы исключить их вмешательство
- Проверьте, активен ли SELinux командой sestatus и изучите контекст файлов ls -Z
- Оцените параметры PHP open_basedir и allow_url_fopen через phpinfo() или ini_get
Пошаговое решение
- Определите пользователя веб-сервера: выполните ps aux | grep -E 'apache|nginx|httpd' и запомните имя (часто www-data или apache).
- Измените владельца всех файлов WordPress: sudo chown -R пользователь:группа /путь/к/wordpress, где пользователь — тот самый www-data.
- Установите права 755 на все директории: find /путь/к/wordpress -type d -exec chmod 755 {} ;.
- Установите права 644 на все файлы: find /путь/к/wordpress -type f -exec chmod 644 {} ;.
- Откройте файл wp-config.php и добавьте строку define('FS_METHOD', 'direct'); перед строкой /* That's all, stop editing! */.
- Если прямой метод не помогает, удалите из wp-config.php все константы вида FTP_HOST, FTP_USER, FTP_PASS, чтобы WordPress не пытался использовать FTP принудительно.
- Проверьте права отдельно на папку wp-content/uploads: chmod 755 wp-content/uploads и chown пользователь:группа wp-content/uploads.
- Отключите safe_mode в php.ini: safe_mode = Off (только для старых версий PHP), затем перезапустите веб-сервер.
- Временно отключите плагины через переименование папки плагинов: переименуйте wp-content/plugins в plugins_backup, затем попробуйте установить любой минимальный плагин.
- При активном SELinux измените контекст каталогов: sudo chcon -R -t httpd_sys_rw_content_t /путь/к/wordpress/.
- Добавьте в wp-config.php явные FTP-учетные данные, если ни один из предыдущих шагов не помог: define('FTP_HOST', 'localhost'); define('FTP_USER', 'username'); define('FTP_PASS', 'password'); — это крайняя мера.
- Перезапустите веб-сервер: sudo systemctl restart apache2 или sudo systemctl restart nginx, чтобы применить все изменения прав и конфигурации.
Проверить ошибку WordPress
Введите ошибку WordPress, PHP, плагина, темы, REST API или кратко опишите проблему сайта.
FAQ
Почему WordPress требует FTP-доступ, если права на файлы 755 и 644?
Вероятно, владелец файлов не совпадает с пользователем веб-сервера. Даже корректные разрешения не помогут, если запись разрешена только владельцу (chmod 755 даёт запись только owner). Проверьте владельца командой ls -l и при необходимости измените на www-data.
Можно ли решить проблему без выставления прав 777?
Да, права 777 опасны и почти никогда не нужны. Достаточно 755 для папок и 644 для файлов с корректным владельцем. Если WordPress по-прежнему просит FTP, проблема в другом — скорее всего, в пользователе или константе FS_METHOD.
Как безопасно добавить FTP-данные в wp-config.php?
Добавьте строки после define('WP_DEBUG', false);: define('FTP_HOST', 'localhost'); define('FTP_USER', 'ваш_логин'); define('FTP_PASS', 'ваш_пароль');. Убедитесь, что файл wp-config.php не доступен публично, и используйте надёжные пароли.
Что делать, если пользователь веб-сервера отличается от моего SSH-пользователя?
Это нормально. Главное, чтобы все файлы WordPress принадлежали пользователю веб-сервера, а не вашему SSH-аккаунту. Используйте sudo chown -R www-data:www-data /путь/к/сайту, чтобы передать владение.
После смены владельца сайт перестал работать — в чём дело?
Скорее всего, вы использовали неправильную группу или изменили права на ключевые файлы, такие как index.php. Проверьте права: папки 755, файлы 644, а владелец — www-data или apache. Если сайт лежит в подпапке пользователя, убедитесь, что группа имеет доступ на чтение.
Поможет ли переустановка WordPress?
Обычно нет, потому что проблема связана с окружением сервера, а не с ядром. Переустановка не изменит владельца файлов или настройки PHP. Сначала проверьте права и FS_METHOD — это решает 95% случаев.
Итог
Запрос FTP-доступа при установке плагинов — это индикатор того, что WordPress не может писать напрямую в свою файловую систему. В большинстве ситуаций достаточно проверить и исправить права, назначить правильного владельца и добавить define('FS_METHOD', 'direct'). Если после этих шагов проблема сохраняется, стоит изучить серверные ограничения, такие как SELinux или open_basedir. Помните, что безопасность важнее удобства, поэтому избегайте прав 777 и не указывайте FTP-пароли в открытом виде. Регулярно аудируйте файловую систему сайта, чтобы подобные конфликты не повторялись.