Возможно ли создание разных пользователей для разных сайтов nginxТоесть в случае взлома 1 сайта чтоб пользователь не имел доступа к остальным файлам других сайтов.
Еще обясните почему cat /etc/passwd нет пользователя www-data?
Пробовал по инструкции (не получилось) ну и тут группа общая www-data что не правильно.
Проверьте текущие группы для каждого пользователя:
groups www-data
groups siteuser
Ни один из них не должен иметь групп, общих с другим.
2. Назначьте файлы siteuser с доступом только для владельца
Теперь настройте права для папки сайта, чтобы только siteuser мог получить к ней доступ:
sudo chown -R siteuser:siteuser /var/www/site.ru
sudo find /var/www/site.ru -type d -exec chmod 700 {} \;
sudo find /var/www/site.ru -type f -exec chmod 600 {} \;
Здесь:
700 для директорий — только владелец siteuser может читать, писать и выполнять.
600 для файлов — только владелец siteuser может читать и писать.
Теперь www-data не сможет видеть файлы, так как нет разрешений на доступ.
3. Настройте PHP-FPM для работы под siteuser
Для изоляции сайта, работая под siteuser, настройте PHP-FPM для обработки запросов от этого пользователя. Это позволяет Nginx отправлять запросы через PHP-FPM, не получая прямой доступ к файлам.
Настройка PHP-FPM:
Создайте пул для siteuser:
В файле /etc/php/7.4/fpm/pool.d/siteuser.conf (замените 7.4 на версию PHP) добавьте следующее:
[siteuser]
user = siteuser
group = siteuser
listen = /run/php/php7.4-fpm-siteuser.sock
listen.owner = siteuser
listen.group = www-data
listen.mode = 0660
Это позволяет PHP-FPM выполнять скрипты от имени siteuser, а не www-data.
Настройте виртуальный хост в Nginx для использования этого сокета:
Откройте конфигурацию виртуального хоста сайта в Nginx и укажите новый сокет PHP-FPM:
server {
server_name site.ru;
root /var/www/site.ru;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm-siteuser.sock;
}
}
Перезапустите службы:
sudo systemctl restart php7.4-fpm
sudo systemctl restart nginx