Возможно ли в nginx настроить разных пользователей для каждого виртуального хоста?
Что-то типа
server {
user myprojectuser myprojectgroup;
...
}
Нет, потому что все разделы сервера в конфигурации nginx обслуживаются из одного и того же набора рабочих процессов. Кроме того, с точки зрения безопасности, вам лучше запустить его таким образом, так как это означает, что веб-сервер автоматически перезаписывает содержимое (при отсутствии глупостей, таких как a chmod -R 0777
), поэтому, если в nginx есть уязвимость, ни один из содержимого в опасности.
www-data
и права0710
доступа (поскольку для настройки nginx требуется root, не проблема в том, чтобы ваша автоматизация также установила необходимые разрешения). Тогда содержимое документа должно быть простоo+x
для каталогов иo+r
файлов.www-data
, каждый пользователь, который может обслуживать PHP-скрипт или процесс cgi-bin, может получить доступ к любому файлу, доступномуwww-data
пользователю. Это кажется неочевидным для всех, кто хранит пароли базы данныхconfig.php.inc
на общем компьютере или аналогичные ему.peter
иjohn
. Они размещают свои веб-страницы в~/public_html
. В отсутствие другого подхода, не упомянутого ни одним из людей, обсуждающих это выше, сценарий .php имеет те же разрешения, что и веб-сервер, на котором он также выполняетсяwww-data
. Это означает, что так же, как веб-сервер и интерпретатор PHP, он может читать любой другой скрипт .php.Да. Это возможно и рекомендуется для дополнительной безопасности (см. Почему ниже).
Учитывая, что вы используете PHP-FPM (вы, вероятно, как обычно), вы можете создать для каждого домена катушку, принадлежащую другому пользователю.
1. Создайте катушки:
Добавьте катушки
/etc/php/7.0/fpm/pool.d/www.conf
или создайте новый.conf
файл для каждой новой катушки.Золотник № 1 (myuser1):
Золотник № 2 (myuser2):
PS: держите ваш listen.owner / listen.group тем же пользователем nginx (обычно www-data ).
2. Назначьте каждую катушку своему блоку сервера (виртуальный хост для пользователей apache):
Хост 1:
Хост 2:
Перезапустите службы FPM и NGINX
Тестирование:
Создайте файл pinfo.php (или любое другое имя), который покажет текущего пользователя процесса:
Или создайте файл pinfo.php через bash:
Затем откройте « http: //.../pinfo.php » в своем браузере.
Зачем использовать несколько пользователей (из соображений безопасности):
Если вы запускаете все свои сайты под одним и тем же пользователем ( www-data ), PHP-вызов system () / passthru () / exec () будет иметь доступ ко всем сайтам! NGINX не защитит вас от этого. PHP является лишь примером, но любой популярный язык веб-сервера имеет аналогичные вызовы. Как хакер, вы можете « ls .. » перемещаться по всем сайтам и « cp / echo / mv » писать свой собственный код в любом файле (включая файлы других сайтов). Даже если все веб-сайты на сервере принадлежат одному и тому же человеку (например, вам), рекомендуется запускать каждый веб-сайт с другим пользователем, поскольку это предотвратит доступ хакеров / вирусов (например, вирусов Wordpress) к другим вашим веб-сайтам.
источник
В ответ на комментарий Ивана выше и который представляется применимым к ФП. Две вещи:
Корень документа приложения будет что-то вроде
/blah/peterWeb/html
и/blah/johnWeb/html
. И NGINX, и Apache2 не позволят одному просматривать или работать в другом каталоге, даже если они оба используют www-данные как группу.Размещение каждого дерева каталогов под собственным разрешением пользователя позволит каждому пользователю входить в систему ssh / login в системе UNIX и сохранять свои каталоги закрытыми для каждого - просто не помещайте каждого пользователя в группу www-data. Если вы согласны, то ваше предложение:
может быть более точно написано как:
РЕДАКТИРОВАТЬ 1: необходимость решения некоторых проблем администратора сервера, я посмотрел дальше в эту тему. Я не знал, насколько точной была информация Ивана! Если вы намереваетесь предоставить пользователям возможность загружать и запускать сценарии в конфигурации с общим хостингом, обратите внимание. Вот один из подходов . Шляпа подсказка Ивану, чтобы убедиться, что я понял эту уязвимость.
источник
www-data
. Если Джонни может создать сценарий и запустить егоwww-data
(что на наивных установках он может), то сценарий Джонни может прочитать сценарии Питера и отправить их обратно Джонни. Это не имеет ничего общего с группами. Правильное решение - иметь suPHP (если наивно настроенный, плохой, так как плохо написанный код ставит под угрозу все файлы этого пользователя), или тюрьму, или выделенного дополнительного веб-пользователя на пользователя.