Не удается установить новые плагины из-за ошибки "Не удалось создать каталог"


У преподавателя возникли трудности с установкой учебного wordpress. Устранение проблем с индивидуальными разрешениями было неудачным и превратилось в постоянную боль, поэтому я спрошу здесь. Что я могу сделать, чтобы WP просто работал? Виды ошибок, которые они получают:

Установка плагина: Лайтбокс 2 2.9.2 Загрузка установочного пакета с http://downloads.wordpress.org/plugin/lightbox-2.2.9.2.zip … Распаковка посылки… Не смог создать каталог. /главная/CIM140/public_html/wordpress/wp-контент/обновление/лайтбокс-2.tmp

Когда я использую www-данные (пользователь apache работает как в Ubuntu), я могу сделать этот каталог просто прекрасным. Мой тестовый экземпляр wp устанавливает этот плагин просто отлично, поэтому я в недоумении, почему он не работает для них.

Author: Chris_O, 2010-09-24

6 answers

@ пвнгуин,

У меня были те же проблемы с запуском mod_php с WordPress, и я, наконец, понял это.

# chown www-data:www-data  /home/CIM140/public_html/wordpress/ -R

Пока ВЫ управляете ящиком, это не вызовет никаких проблем с безопасностью.


ИЗМЕНИТЬ:

Вам также может потребоваться изменить вашу umask на 022, чтобы новые каталоги, созданные WordPress, имели 755 разрешений, а файлы - 644 разрешения.

Другой вариант - переопределить права доступа к файлам по умолчанию в wp-config.php :

define('FS_CHMOD_DIR', (0755 & ~ umask()));
define('FS_CHMOD_FILE', (0644 & ~ umask()));

Вы также можете принудительно обновить метод файловой системы.

  • (Основное предпочтение) "Прямой" заставляет его использовать прямые запросы ввода-вывода файлов из PHP, это чревато возникновением проблем с безопасностью на плохо настроенных хостах, это выбирается автоматически при необходимости.
  • (Вторичное предпочтение) "ssh" - это принудительное использование расширения SSH PHP.
  • (3-е предпочтение) "ftpext" предназначен для принудительного использования расширения FTP PHP для Доступ по FTP и, наконец,
  • (4-е предпочтение) "ftpsockets" использует класс сокетов PHP для доступа по FTP.

Они могут быть определены в wp-config.php с: define('FS_METHOD', 'ftpext');

Вы можете получить все определенные в данный момент константы, выполнив команду print_r(@get_defined_constants()); в php.

 5
Author: Chris_O, 2010-09-24 20:30:22

Для меня (на Ubuntu) Мне пришлось добавить umask 002 в /etc/apache2/envvars, чтобы Wordpress загружал плагины/изображения с разрешениями 775 вместо 755 (т.Е. Разрешал любому, кроме Apache и root, изменять загруженные файлы)

 0
Author: willbradley, 2013-09-26 22:32:39

Чтобы понять, почему у вас возникли эти проблемы, вам необходимо понять основные концепции владения.

В принципе, вы знаете, что apache работает как пользователь www-данных. Вот почему установка всего, что принадлежит этому пользователю, работает, потому что WordPress проверяет, может ли он создавать файлы как пользователь, которому принадлежат его собственные файлы. Итак, то, что вы делаете, - это сделать все принадлежащим пользователю, которому принадлежат файлы.

Если у вас есть полный и полный контроль над машина, это прекрасно. С другой стороны, если это сервер общего хостинга, то вы создали дыру в безопасности.

Обычно веб-серверы запускаются от имени какого-либо пользователя (например, www-data), который затем запускает код другими пользователями (например, "отто", моя учетная запись пользователя). В этой ситуации веб-сервер не имел бы возможности создавать файлы как "otto" и, следовательно, не мог бы правильно создавать файлы как моя учетная запись. Таким образом, эта проверка WordPress на предмет создания правильно принадлежащих файлов и, следовательно, возможности установки плагины или файлы обновлений не будут работать правильно, потому что наличие моих файлов, принадлежащих общему пользователю веб-сервера, будет представлять угрозу безопасности.

В таком случае WordPress должен правильно запросить у меня учетные данные FTP или что-то в этом роде. Это был бы способ обойти проблему с учетной записью пользователя путем аутентификации как пользователя, который должен записывать файлы, а затем записывать их как этого пользователя.

Теперь вы пытаетесь решить эту проблему, изменив все файлы WordPress должны принадлежать той же учетной записи, под которой веб-сервер записывает файлы. Более нормальный подход для этого - изменить способ записи файлов веб-сервером, чтобы процесс PHP "принадлежал" учетной записи пользователя, под которой он запускает файлы.

Общий ответ на этот вопрос - "suphp". Эта версия PHP устанавливает пользователя, которого запускает процесс PHP, как того же пользователя, что и владелец файлов PHP, которые он запускает. Это безопаснее при настройке общего хостинга, потому что это гарантирует что процесс PHP, запускаемый общим веб-сервером, выполняется как владелец файлов PHP и, следовательно, не может читать учетные записи других пользователей и тому подобное.

В Ubuntu я считаю, что это общий способ сделать это:

Установить suphp:

$ sudo apt-get install libapache2-mod-suphp

Отключить старый mod_php

$ sudo a2dismod php5 

Перезапустить Apache

$ sudo /etc/init.d/apache2 restart

И вуаля. Теперь ваши PHP-файлы WordPress принадлежат Обычному их владельцу. Никаких специальных трюков, никаких изменений разрешений или прав собственности или чего-либо подобного тот. Поскольку процесс PHP будет выполняться как владелец этих файлов, он сможет писать в них как этот владелец. Каталоги должны быть 755, файлы должны быть 644 (обратите внимание, suphp не любит, когда файлы доступны для записи по группам, поэтому 755/644 - правильный набор разрешений).

 0
Author: Otto, 2016-04-17 10:15:03

У меня иногда были сайты, на которых исправления разрешений для каталогов и файлов было недостаточно для решения этой проблемы. Затем я обнаружил, что в одном или нескольких каталогах установлен неизменяемый флаг. Это можно легко решить, запустив chattr -R /var/www/sub.domain.tld от имени root.

 0
Author: Phil Gardner, 2019-11-28 15:08:49

Вам необходимо предоставить разрешения на запись в соответствующие каталоги. В идеале вы должны сделать это только для соответствующего файла или папки, а затем вернуть разрешения обратно, чтобы не оставлять ваш сайт уязвимым.

Вы можете исправить это, используя следующие команды из командной строки (при условии, что вы находитесь в корневой папке Wordpress):

# cd wp-content
# chmod -R a+w plugins
# chmod -R a+w themes
# chmod -R a+w upgrade

Самое безопасное решение - добавить apache в ту же группу, что и владелец установки Wordpress, и изменить все разрешения группы для записи.

 -1
Author: Varun, 2016-04-17 07:12:47

Здесь очень простое решение: измените разрешение папки opt, выполнив команду sudo chmod -R 777/opt.

 -1
Author: Kumar Saurabh, 2021-01-07 05:32:29