Я использую PHP-FPM в конфигурации виртуального хостинга. Каждый пул FPM работает как отдельный пользователь. Apache работает как www-data. Apache подключается через сокет с помощью mod_proxy_fcgi. Я разрешаю пользователям использовать файлы .htaccess.
Как предотвратить подключение пользователя к неправильному пулу FPM?
Vhost выглядит примерно так:
<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?
AllowOverrideList
позволяет дополнительно ограничить директивы .htaccess указанным списком.
Цитата из документов:
Когда эта директива установлена на
None
иAllowOverride
установлен наNone
, то файлы .htaccess полностью игнорируются. В этом случае сервер даже не будет пытаться прочитать.htaccess
файлы в файловой системе.Пример:
AllowOverride None AllowOverrideList Redirect RedirectMatch
В приведенном выше примере только
Redirect
иRedirectMatch
директивы разрешены. Все остальные вызовут внутреннюю ошибку сервера.Пример:
AllowOverride AuthConfig AllowOverrideList CookieTracking CookieName
В приведенном выше примере
AllowOverride
дает разрешение наAuthConfig
директивная группировка иAllowOverrideList
предоставляет разрешение только на две директивы изFileInfo
директивная группировка. Все остальные вызовут внутреннюю ошибку сервера.