Безопасность Apache и PHP-FPM с помощью mod_proxy_fcgi
Я использую PHP-FPM в конфигурации общего хостинга. Каждый пул FPM работает как отдельный пользователь. Apache работает как www-data. Apache подключается через сокет, используя mod_proxy_fcgi. Я разрешаю пользователям использовать файлы.htaccess.
Как запретить пользователю подключаться к неправильному пулу FPM?
Вхост выглядит примерно так:
<VirtualHost *:80>
ServerName foo.com
DocumentRoot /var/www/sites/foo.com/html
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/foo-com-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
Но пользователь foo-com может легко переопределить этот обработчик из своего.htaccess:
<FilesMatch "\.php$">
SetHandler "proxy:unix:/var/run/bar-com-fpm.sock|fcgi://localhost"
</FilesMatch>
Это позволило бы ему запускать сценарии PHP от имени другого пользователя. Как я могу предотвратить это, не запрещая переопределения FileInfo?
1 ответ
AllowOverrideList
позволяет дополнительно ограничить директивы.htaccess указанным списком.
Цитата из документов:
Если для этой директивы задано None, а для AllowOverride задано None, файлы.htaccess полностью игнорируются. В этом случае сервер даже не попытается прочитать файлы.htaccess в файловой системе.
Пример:
AllowOverride Нет AllowOverrideList Redirect RedirectMatch
В приведенном выше примере разрешены только директивы Redirect и RedirectMatch. Все остальные вызовут внутреннюю ошибку сервера.
Пример:
AllowOverride AuthConfig AllowOverrideList CookieTracking CookieName
В приведенном выше примере AllowOverride предоставляет разрешение для группировки директив AuthConfig, а AllowOverrideList предоставляет разрешение только двум директивам из группы директив FileInfo. Все остальные вызовут внутреннюю ошибку сервера.