Настраиваю Wordpress на своем личном хостинге, на VPS. Сам себе админ, владелец и вебмастер. На чужих хостингах видел, что администратор Wordpress может сам изменять файлы темы (заголовок, например), ставить и обновлять плагины, загружать фото. На своем хостинге такое получается сделать, только если дать пользователю, от имени которого работает apache, права записи в некоторые каталоги wordpress, в т.ч. /wp-content/themes/. Что мне, как человеку с сисадминским опытом за плечами, кажется весьма небезопасным. Разве что запускать веб-сервер исключительно для своего сайта и ни с кем его не шарить, но для хостера-то это не вариант.
Есть вариант решения этой задачи с suexec PHP, но говорят, что это замедляет работу сайта в десятки раз (минимум в 20, но есть мнение, что посещаемый сайт от такой нагрузки просто ляжет).
Других вариантов не знаю. Их действительно нет? Друзья, работающие в коммерческих хостингах говорят, что там часто полагаются на надежность CMS (в частности, Wordpress), и из-за этого сайты нередко ломают, причем чаще — через не очень качественно написанные плагины.
коллеги, так как перед тем, как задать вопрос, я обсуждал его с несколькими хостерами, а до того внимательно изучал все, что про это знает Yandex и Google, я бы просил минусовать вопрос с объяснением, что вас в нем возмутило. Можно в личную почту.
Не могу вам не чего сказать за apache, но на php-fpm + nginx я делаю так.
user = nginx
group = $pool # $pool равен группе пользователя в директории, которого храним сайт
Ну и chroot настраиваю.
При таких настройках для записи в директорию нам достаточно давать права 775, т.е. доступ будет только у пользователя в чей директории сайты nginx не сможет писать.
Спасибо. Не понял, почему при user = nginx и правах 775 nginx не сможет писать. Nginx у вас работает не от имени пользователя nginx? Проблема вообще не в этом. Мне НЕ надо писать файлы по ftp. Я хочу, чтобы обновления и upload на сайт делали скрипты wordpress (неважно, какой там веб-сервер, apache или нет). У коммерческих хостингов так и сделано.
Вопрос в том, как заставить wordpress изменить, например, файл header.php в теме wordpress, но при этом не давать пользователю apache (или nginx, неважно) прав на запись в каталог, где лежит сайт (точнее — скрипты wordpress, так как в каталоге wordpress хранит только картинки, контент — в БД, естественно).
Возможно, все дают права на запись пользователю, от имени которого работает веб-сервер, и считают это нормальным. Выяснить это — и была цель второй части моего вопроса.
Еще раз повторюсь я говорю только за ту связку которую указал выше. А принцип простой.
Опишу общий принцип.
1. У нас есть пользователь www в его директории хранятся сайты. Все что в этой директории находится под пользователем www и группой www.
2. Есть php-fpm конфиг для этого пользователя
user = nginx
group = $pool # $pool равен группе пользователя в директории, которого храним сайт (в нашем случае www)
chroot = /home/$pool
3. Все теперь процесс будет работать с правами nginx:www по этому нам достаточно установить 775, чтобы получить права на запись в директории или 664 для файла. Естественно файлы создаваемые процессом внутри директории будут под nginx:www,
Извините, а откуда мнение, что «suexec PHP» замедляет работу сайта в 20 раз? PHP умеет работать в 3х режимах:
1. как модуль apache (mod_php), тогда php выполняется от того же пользователя, от которого запущен apache (Ваш первоначальный вариант)
2. В режиме FastCGI. И по скорости php-fcgi ничем не медленнее mod_php
3. В режиме просто CGI. Вот это медленее чем mod_php раз в 10, да
Так вот, suexec может использоваться как для (3) варианта, так и для (2) и в случае (2), то есть php запускается как fastcgi, плюс suexec, Вы получите систему, в которой каждый отдельный сайт можно будет запускать от имени и с правами разных аккаунтов, но работать все будет под одним и тем же apache. Так и устроены многие shared-хостинги.
Все, что нужно для этого, это apache, suexec, mod_fcgid и php, собранный с поддержкой fastcgi.
спасибо за уточнения! Мнение я читал где-то в Сети, когда гуглил ответ на свой вопрос, прежде чем задавать его на Хабре. Потом мне это мнение подтвердил инженер одного московского провайдера (чтобы без рекламы, название не пишу). Видимо, оба источника имели в виду вариант 3, так как FastCGI они упоминали в качестве отдельного от suexec варианта.
Сайт который рендерятся 1 секунду это уже не нормально. Стандартный сайт 0.1s а замедленный получается будет 1-2s, но не как не 20. хотя про suexec я сказать не чего не могу.
Для нормальных технологий (python, ruby, java) есть тот же uwsgi с emperor mode и режимом tyrant. Каждый пользователь тогда имеет запущенный от своего имени веб-сервер. Ну и плюс упомянутый выше MPM для apache.
настройки виртуального шаред (не впс) хостинга — буду очень сильно отличаться от хостера к хостеру, т.к. квалификация и привычки администраторов везде разные.
У меня текущий мой сайт у товарища-хостера, например, запускается под одним отдельным пользователем и я спокойно могу нажать кнопку «обновить вордпресс» и через полминуты вордпресс сам обновится.
На прошлой моей работе, тоже хостинг, у пользователя фтп и у пользователя апача были разные группы и мне приходилось закачивать дистрибутив вручную по фтп на сервер.
user в WP для сервера это просто куки, причем еще в базу надо слазить что бы проверить. Можно конечно сделать мод для сервера, который будет смотреть конкретную куку, проверять и транслировать ее в базе. после чего менять пользователя для запроса — но имхо это извращение и излишне.
У себя я даю доступ до wp-admin только для своих IP.
Плюс конечно все плагины проверяются и зачастую переписываются — в плагин можно вложить что угодно, пишут их отвратно.