Безопасная установка PHP
Данная статья посвящена описанию аспектов установки PHP на веб-сервер Apache таким
образом, чтобы скрипты выполнялись в контексте пользователя.
Самый простой способ, описанный в документации указать в первой строке
скрипта путь к PHP, и установить на него права 700. Однако, в реальной
обстановке заставить пользователей это проделать со стандартными скриптами
невозможно. Однако есть достаточно простой способ выполнять скрипты CGI-скриптом php (в PHP5 — php-cgi).
Сборка PHP
Допустим, что мы хотим установить PHP в /usr/local/php4. Тогда надо использовать все опции конфигурации, обычно задаваемые при сборке модуля (кроме --with-apxs, естественно), однако необходимо для безопасности добавить опцию --enable-force-cgi-redirect, которая не позволит вызывать скрипт напрямую. В простейшем случае получаем ./configure --prefix=/usr/local/php4 --enable-force-cgi-redirect.
Сборка Apache
В файле src/support/suexec.c необходимо убрать строки, следующие после комментария «Error out if the target name/group is different from the name/group of the cwd or the program» до следующего комментария. При сборке необходимо отключить статический модуль PHP, если он использовался ранее и, естественно, скомпилировать и установить SuEXEC.
Настройка Apache
В httpd.conf необходимо добавить директивы вида:
ScriptAlias /php4-cgi/ "/usr/local/php4/bin/"
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
Action application/x-httpd-php /php4-cgi/php
Разумеется, нужно отключить динамический модуль PHP, если он был установлен ранее.
Теперь надо перезапустить Apache и проверить работу скриптов они должны
работать и при правах доступа 600, причём под логином пользователя (параметр User
в httpd.conf или секции <VirtualHost>).
Замечания
Допустим, что мы хотим установить PHP в /usr/local/php4. Тогда надо использовать все опции конфигурации, обычно задаваемые при сборке модуля (кроме --with-apxs, естественно), однако необходимо для безопасности добавить опцию --enable-force-cgi-redirect, которая не позволит вызывать скрипт напрямую. В простейшем случае получаем ./configure --prefix=/usr/local/php4 --enable-force-cgi-redirect.
Сборка Apache
В файле src/support/suexec.c необходимо убрать строки, следующие после комментария «Error out if the target name/group is different from the name/group of the cwd or the program» до следующего комментария. При сборке необходимо отключить статический модуль PHP, если он использовался ранее и, естественно, скомпилировать и установить SuEXEC.
Настройка Apache
В httpd.conf необходимо добавить директивы вида:
Замечания
- В переменной окружения SCRIPT_NAME окажется /php4-cgi/php, REQUEST_URI и PATH_INFO будут содержать URI скрипта и запрошенный пользователем адрес.
- Russian Apache определяет кодировку документов на диске по /usr/local/php4/bin/, а не положению скрипта.
- В php теперь есть удобная директива cgi.fix_pathinfo, которая заносит в SCRIPT_NAME URI скрипта.
- Некто Stricty очень хорошо описала безопасную установку mod_php. Если есть возможность отказаться от использования login classes для обеспечения простейшего QoS и усложнить работу с файлами из php, то предложенный ей способ в целом лучше описанного тут.
- Нанотехнолог Фил Кулин рассказал мне о гораздно более правильном способе — выполнять процесс apache/mod_php под правами пользователя. Однако то, что предлагает Stricty по ссылке выше и я в этой статье, проще и для не-shared хостинга правильнее.
- Все это писалось, когда еще недавно вышел PHP 4, а сейчас на носу уже PHP 6, кое-что по мелочам изменилось, как step-by-step guide сию статью использовать с PHP 6 не получится.
0 TrackBacks
Listed below are links to blogs that reference this entry: Безопасная установка PHP.
TrackBack URL for this entry: http://www.ptitov.ru/mt/mt-tb.cgi/5

Leave a comment