для выполнения запрошенного действия wordpress требуется доступ к вашему веб-серверу. пожалуйста, введите ваши ftp данные
Я следую инструкции Изменение прав доступа к файлам « WordPress Codex, но когда я пытаюсь обновить и/или установить plugin
и/или theme
через wp-admin
, я получаю следующее:
Для выполнения запрошенного действия WordPress необходим доступ к вашему веб-серверу. Пожалуйста, введите ваши FTP данные для продолжения. Если вы не помните свои данные, вам следует обратиться к вашему хостинг-провайдеру.
на уровне файловой системы:
# ls -ld wp-content/ wp-content/plugins/ wp-content/themes/
drwxrwxr-x. 6 root apache 4096 Jun 2 12:01 wp-content/
drwxrwxr-x. 28 root apache 4096 Jun 2 00:00 wp-content/plugins/
drwxrwxr-x. 11 root apache 4096 May 11 16:34 wp-content/themes/
#
httpd
работает под пользователем apache
:
$ ps auxw | grep httpd
root 20158 0.0 0.1 533080 26192 ? Ss 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20233 0.0 0.2 612608 34908 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20234 0.0 0.2 538772 46904 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20235 0.0 0.1 536832 24268 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20236 0.0 0.2 626272 35640 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20237 0.0 0.0 535296 9592 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20322 0.0 0.1 537088 26620 ? S 15:03 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20380 0.0 0.2 626060 33816 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20429 0.0 0.1 538216 29184 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20447 0.0 0.2 629380 43180 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
apache 20448 0.0 0.2 626172 35224 ? S 15:04 0:00 /usr/sbin/httpd -DFOREGROUND
alexus 24073 0.0 0.0 112652 972 pts/9 R+ 15:13 0:00 grep --color=auto httpd
$
Я хотел бы иметь возможность выполнять запрашиваемые действия (install
и/или update
) через /wp-admin
без FTP данных.
Как я могу это сделать?


сработало у меня, если только у вас нет проблем с правами доступа в файловой системе. Кстати, я добавил это в самое начало файла wp-config.php

Обязательно прочитайте пост, на который ссылается Alexus, перед использованием этого метода. Этот метод определенно работает (он решил проблему для меня), но вам точно не стоит использовать этот метод на shared-хостинге или в любой среде с рисками, где это может поставить безопасность под угрозу.

после добавления этого я получаю следующую ошибку:
Update Failed: The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.

Это потенциально опасно для пользователей, которые переносят свои сайты целиком с локального сервера на рабочий. Я бы предпочел, чтобы вы использовали метод @Syamraj K по изменению прав файлов или удалили это из вашего wp-config.php
перед переносом в онлайн

чувак!! ты мой герой. спасибо, что сэкономил мне кучу времени на этом

Если вы используете WP CLI, вы можете выполнить эту команду вместо этого: wp config set FS_METHOD direct
. Это изменит файл wp-config.php

Пожалуйста, объясните, что это делает, прежде чем многие бездумно вставят это в свой конфигурационный файл.

WP размещен на Google Cloud compute: Я добавил define( 'FS_METHOD', 'direct' ); в wp-config, затем установил права с помощью sudo chown -R www-data:www-data /home/mysitenam/public_html/, обновил плагин и вернул права обратно с помощью sudo chown -R mysitename:mysitename /home/mysitename/public_html/

Это означает, что у WordPress ограниченные права для внесения изменений в папку, в которую он был установлен.
Для исправления этой ситуации вам необходимо предоставить соответствующие разрешения.
Выполните следующую команду в терминале / Putty / командной строке после подключения к серверу через SSH:
sudo chown -R apache:apache /var/www/html

Помни, что Apache может работать под разными пользователями в разных дистрибутивах Linux. Поэтому ты можешь попробовать команду groups <username> и посмотреть, выдаст ли она ошибку, так как пользователь и группа для Apache обычно одинаковы. Затем используй правильного пользователя. Наиболее распространенные варианты в Ubuntu - это "www-data:www-data" или "www:www" для chown файлов Apache.

После того как я смог найти правильное имя пользователя, это сработало отлично (см. также команду для вывода списка всех пользователей)

Если вы хотите использовать это на OSX, используйте _www:_www (Mojave, не знаю, что будет в других версиях)

Это более правильный ответ. Ответ с большим количеством голосов опасен для многих неопытных пользователей, которые переносят целые каталоги сайтов с локального сервера на рабочий, даже при использовании плагинов WordPress

Хотя совершенно правильно иметь владельца как root:apache
с правами 775, и httpd, работающий под пользователем apache
, WordPress это не нравится. Он хочет, чтобы владельцем был apache
, согласно wp-admin/includes/file.php
:
// Попытка определить владельца файлов WordPress и вновь создаваемых файлов
$wp_file_owner = $temp_file_owner = false;
if ( function_exists('fileowner') ) {
$wp_file_owner = @fileowner( __FILE__ );
$temp_file_owner = @fileowner( $temp_file_name );
}
В вашем случае будет:
wp_file_owner = root
temp_file_owner = apache
if ( $wp_file_owner !== false && $wp_file_owner === $temp_file_owner ) {
// WordPress создает файлы с тем же владельцем, что и файлы WordPress,
// это означает, что можно безопасно изменять и создавать новые файлы через PHP.
$method = 'direct';
$GLOBALS['_wp_filesystem_direct_method'] = 'file_owner';
} elseif ( $allow_relaxed_file_ownership ) {
// Директория $context доступна для записи, и $allow_relaxed_file_ownership установлен, это означает, что мы можем безопасно изменять файлы
// в этой директории. Этот режим не создает новые файлы, а только изменяет существующие.
$method = 'direct';
$GLOBALS['_wp_filesystem_direct_method'] = 'relaxed_ownership';
}
Если $wp_file_owner совпадает с $temp_file_owner, то процесс продолжается. В вашем случае сработает elseif, который, согласно комментарию, не разрешает удаление/создание, а только обновление (я проверил это, обновив код плагина из WordPress, и это сработало).
Примечание: я не углублялся в код, это лишь моя быстрая интерпретация. У меня была такая же проблема, и как только я изменил пользователя:группу так, чтобы пользователь httpd также был владельцем файлов, запрос учетных данных FTP прекратился.

Да, смена владельца на www-data
сработала у меня. Забавный WordPress!

На всякий случай, если у кого-то такая же проблема - это сработало только после того, как я изменил владельца ВСЕХ файлов/директорий WordPress на пользователя веб-сервера. Просто смена владельца для директории wp-content и всех её поддиректорий не решила проблему. Пришлось рекурсивно изменить владельца для корневой директории WordPress и всех вложенных файлов, чтобы это заработало.

Это не прямой ответ, но, вероятно, стоит сказать - это одна из проблем, которую вам следует избегать решать, если только речь не идет о локальной разработке, в этом случае вы можете просто установить разрешения 777.
Причина в том, что если веб-сервер может перезаписывать ваш код, то любое вредоносное ПО, работающее на нем, также сможет это делать. Риск просто намного выше, чем удобство сохранения нескольких секунд за счет отсутствия необходимости вводить учетные данные FTP.

Хотя вопрос уже не новый, я хочу добавить свои два цента по этой проблеме.
Многие люди используют CentOS(7) на своих VPS-серверах, и следующие строки кода могут решить их проблему.
На мой взгляд, всё дело в SELinux, который мешает WordPress выполнять свою работу должным образом. Углубляться в объяснение, что такое SELinux и как он работает, не будем. Для справки, введение начинается с:
Security-Enhanced Linux (SELinux) — это механизм безопасности с обязательным контролем доступа (MAC), реализованный в ядре.
Только 3 шага для решения:
- 1 Откройте терминал (или подключитесь к серверу через SSH)
- 2 Добавьте следующую строку кода:
chcon -R -t httpd_sys_content_t /var/www/html/wordpress
- 3 Добавьте вторую строку кода:
chcon -R -t httpd_sys_rw_content_t /var/www/html/wordpress
Перезагрузка сервера или перезапуск демонов не требуется.
Не могу сказать, что это поможет всем, но для тех, кто не отключал SELinux, это должно стать решением.
Удачи!
Примечание: Пожалуйста, адаптируйте под свои нужды (имеется в виду путь к WordPress)
редактирование: убедитесь, что удалили строку define("FS_METHOD", "direct");
, если она использовалась в wp-config.php
, потому что это абсолютно недопустимо, когда вышеуказанные строки кода выполняют свою работу.

Это то же самое, что и существующий ответ с наибольшим количеством голосов, за исключением комментариев. Разве это действительно важно?
