Как запустить каждый отдельный сайт от имен разных пользователей на nginx+php-fpm?

php-fpm и nginx

Нет 100% уверенности в безопасности кода CMS-систем размещенных сайтов. Даже самый опытный программист допускает ошибки и эти ошибки могут повлиять на безопасность сайта и сервера, где он размещен.


Зачем это нужно?

Безопасность.

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

Если один из сайтов получит вирус или бэкдор, то он сможет сломать только его. У него попросту не будет к остальным доступа.

Как это работает?

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

Процесс

Далее все команды будут вводится от имени пользователя root.

Добавляем нового пользователя в Linux

sudo useradd -M username

Указываем только один параметр -M — без создания домашней директории. Одноименная группа создастся автоматически. Пароль пользователю указывать не нужно.

Подготавливаем PHP

Нужно проверить возможность подключения внешних конфигурационных файлов для пулов. В Debian это сделано по умолчанию и этот шаг можно пропустить. Для этого открываем конфиг (в примере используется PHP версии 7.3):

sudo nano /etc/php/7.3/fpm/php-fpm.conf

и в нем должна быть раскомментирована строка:

include=/etc/php/7.3/fpm/pool.d/*.conf

Создаем новый пул PHP-FPM

Копируем конфиг пула для нового и открываем его для редактирования:

cd /etc/php/7.3/fpm/pool.d/
sudo cp www.conf www-new.conf
sudo nano /etc/php/7.3/fpm/pool.d/www-new.conf

Обязательно меняем:

# Меняем название пула в квадратных скобках на свое.
# Удобнее указывать название сайта
[www-new]
# Меняем на свое
listen = /var/run/php/php7.3-fpm-www-new.sock
# Указываем имя пользователя и группу созданные ранее
user = username
group = username
# Сам nginx и php-fpm будут запущены от имени стандартной учетной записи.
# Оставляем без изменений.
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

На этом настройка php-fpm закончилась.

Перезапускаем php-fpm

sudo service php7.3-fpm restart

Приступаем к web-серверу.

Настройка nginx

Открываем конфигурационный файл сайта.

sudo nano /etc/nginx/sites-available/sitename.conf

Если конфига для нового сайта нет, то копируем его с уже существующего и редактируем под себя.

Чтобы «заставить» работать сайт от имени другого пользователя нужно в конфигурационном файле во всех секциях обработки php-файлов добавить ссылку на созданный ранее сокет пула php-fpm:

location ~ \.php$ {
   ...
   fastcgi_pass unix:/var/run/php/php7.3-fpm-www-new.sock;
   ...
}

Перезапускаем nginx

Заранее проверяем правильность настроек всех конфигов для nginx:

sudo nginx -t

Если все ОК, перезапускаем последний:

sudo service nginx restart

Теперь ваш сайт работает от пользователя username и не сможет ничего поломать у других сайтов, работающих от стандартной учетки www-data.

Теги: и

Комментарии




В качестве аватарки используется сервис - gravatar.com



IT-событие
Основание Adobe
Основание Adobe