Я использую сервер общего хостинга с nginx и php-fpm на Debian.
Все работает нормально, php-fpm имеет отдельные пулы для каждого пользователя, работающего как отдельные пользователи, и у каждого из них есть свои носки.
Однако Nginx работает как www-data, потому что я не хочу иметь отдельные процессы nginx для каждого пользователя.
Это означает, что для того, чтобы nginx имел доступ к данным пользователей, права доступа / home должны быть drwxr-x - x. Проблема в том, что все пользователи имеют доступ к файлам других пользователей.
Что было бы лучшим способом предоставить nginx доступ к файлам пользователей, не предоставляя доступ другим пользователям. Запуск nginx от имени пользователя root невозможен. Но поможет ли AppArmor?
Я предпочитаю использовать для этого ACL. Например:
setfacl -R -m user:www-data:rx,d:user:www-data:rx /home
Дает www-data
доступ пользователя для чтения файлов и просмотра каталогов в /home
, и применяет тот же ACL ко всем новым файлам или каталогам, созданным позже.
После применения домашние каталоги пользователей больше не должны быть исполняемыми во всем мире (например, chmod o= /home/$USER
), поэтому пользователи больше не могут читать файлы друг друга, но nginx может.
Обратите внимание, что если некоторые каталоги должны быть доступны для записи веб-сервером, вы можете настроить их для каждого конкретного случая, изменив оба экземпляра разрешений. rx
к rwx
. Например:
setfacl -R -m user:www-data:rwx,d:user:www-data:rwx /home/user/public_html/wp-content/{cache,uploads}