jldugger
  • 0
Новичок

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

  • 0

Преподаватель испытывает трудности с учебной установкой WordPress. Исправление проблем с индивидуальными разрешениями было случайным и стало постоянной проблемой, поэтому я спрошу здесь. Что я могу сделать, чтобы WP Just Work работал? Типы ошибок, которые они получают:

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

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

Share
  1. @pwnguin,

    У меня были те же проблемы с запуском 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.

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

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

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

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

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

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

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

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

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

    Установите супп:

    $ sudo apt-get install libapache2-mod-suphp
    

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

    $ sudo a2dismod php5 
    

    Перезапустите Апач

    $ sudo /etc/init.d/apache2 restart
    

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

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

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

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

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

    Самое безопасное решение — добавить apache в ту же группу, что и владелец установки WordPress, и изменить права всех групп на запись.

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

    • 0

Оставить ответ

You must login to add an answer.