Назад | Перейти на главную страницу

Безопасность Apache и PHP-FPM с помощью mod_proxy_fcgi

Я использую 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директивная группировка. Все остальные вызовут внутреннюю ошибку сервера.