Безопасная установка PHP

| | Comments (0) | TrackBacks (0)
Данная статья посвящена описанию аспектов установки 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/" <Directory "/usr/local/php4/bin/"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> 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>).

Замечания
  1. В переменной окружения SCRIPT_NAME окажется /php4-cgi/php, REQUEST_URI и PATH_INFO будут содержать URI скрипта и запрошенный пользователем адрес.
  2. Russian Apache определяет кодировку документов на диске по /usr/local/php4/bin/, а не положению скрипта.
Обновления от 11.07.04
  • В php теперь есть удобная директива cgi.fix_pathinfo, которая заносит в SCRIPT_NAME URI скрипта.
  • Некто Stricty очень хорошо описала безопасную установку mod_php. Если есть возможность отказаться от использования login classes для обеспечения простейшего QoS и усложнить работу с файлами из php, то предложенный ей способ в целом лучше описанного тут.
Обновления от 27.10.07
  • Нанотехнолог Фил Кулин рассказал мне о гораздно более правильном способе — выполнять процесс 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

About this Entry

This page contains a single entry by Pavel Titov published on October 6, 2002 6:21 AM.

Использование нейросетей в криптографии was the previous entry in this blog.

Ученые научились получать энергию из крови is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Powered by Movable Type 4.01

Страницы