Apache + Suexec + PHP (в режиме cgi)

Опубликовано nekit - ср, 23/03/2011 - 18:12
Итак, нужно настроить Apache с PHP5. PHP будет работать в режиме CGI, причем процессы PHP будут выполняться с правами пользователя, что хорошо скажется для безопасности. Ставим PHP
  1. # cd /usr/ports/lang/php5
  2. # make install clean
Я выбрал следующие опции (опции, которые должны присутствовать обязательно, подчеркнуты):
  • CLI
  • CGI
  • SUHOSIN
  • REDIRECT
  • DISCARD
  • FASTCGI
  • PATHINFO
Ставим Apache Правим make.conf
  1. PORTSDIR?=/usr/ports
  2.  
  3. .if ${.CURDIR} == ${PORTSDIR}/www/apache20
  4. WITH_SUEXEC=yes
  5. SUEXEC_DOCROOT="/home"
  6. SUEXEC_USERDIR="www"
  7. .endif
Теперь компилим и устанавливаем apache:
  1. cd /usr/ports/www/apache20
  2. make install clean
После того как установка закончена правим конфиг под свои нужды. В конфиге обязательно должны присутствовать и быть включены модули mod_suexec и mod_cgi:
  1. LoadModule cgi_module libexec/apache2/mod_cgi.so
  2. LoadModule suexec_module libexec/apache2/mod_suexec.so
Настраиваем виртуальный хост следующим образом:
  1. <VirtualHost *:80>
  2.   SuexecUserGroup chihpih chihpih
  3.   DocumentRoot /home/chihpih/www/chihpih.no-ip.org
  4.   DirectoryIndex index.php index.html
  5.  
  6.   ServerName chihpih.no-ip.org
  7.   ServerAdmin webmaster@chihpih.no-ip.org
  8.  
  9.   ErrorLog /home/chihpih/log/error.log
  10.   #CustomLog /home/chihpih/log/access.log common
  11.  
  12.   AddHandler application/x-httpd-php .php
  13.   Action application/x-httpd-php /php-bin/php.sh
  14.  
  15.   <Directory "/home/chihpih/www/chihpih.no-ip.org">
  16.     Options FollowSymLinks MultiViews
  17.     AllowOverride All
  18.     Order allow,deny
  19.     Allow from all
  20.   </Directory>
  21.  
  22.   ScriptAlias /php-bin/ "/home/chihpih/php-bin/"
  23.   <Directory "/home/chihpih/php-bin">
  24.     Options None
  25.     AllowOverride None
  26.     Order allow,deny
  27.     Allow from all
  28.   </Directory>
  29. </VirtualHost>
Далее идем в пользовательскую директорию, создаем нужные папки и даем нужные права:
  1. # cd /home/chihpih
  2. # mkdir www log php-bin tmp
  3. # chmod 750 www php-bin tmp
  4. # chown www:www log
  5. # chmod 755 log
В директории php-bin создаем файл php.sh такого содержания:
  1. #!/bin/sh
  2.  
  3. exec nice -n 20 /usr/local/bin/php-cgi -c "/home/chihpih/php-bin/php.ini"
Не забываем дать ему права на запуск, запрет на изменение и удаление.
  1. # cd /home/chihpih/php-bin
  2. # chmod 750 php.sh
  3. # chflags schg,sunlink php.sh
Далее копируем и правим конфиг php, так же не забываем запретить изменение и удаление файла.
  1. # cd /home/chihpih/php-bin
  2. # cp /usr/local/etc/php.ini-dist ./php.ini
  3. # chmod 440 php.ini
  4. # chflags schg,sunlink php.ini
Чтобы апач мог попасть в директорию пользователя, нужно учетку www добавить в группу пользователя chihpih.
  1. # pw groupmod chihpih -m www
Осталось только добавить апач в автозагрузку и запустить его.
  1. # echo 'apache2_enable="YES"' >> /etc/rc.conf
  2. # service apache2 start
Проверим запустился ли сервис:
  1. # ps -U www
  2.   PID  TT  STAT      TIME COMMAND
  3.  9134  ??  SJ     0:00,64 /usr/local/sbin/httpd -DSSL
  4.  9706  ??  IJ     0:00,04 /usr/local/sbin/httpd -DSSL
  5. 41807  ??  IJ     0:00,03 /usr/local/sbin/httpd -DSSL
  6. 41808  ??  IJ     0:00,02 /usr/local/sbin/httpd -DSSL
  7. 42002  ??  IJ     0:00,04 /usr/local/sbin/httpd -DSSL
  8. 42003  ??  IJ     0:00,04 /usr/local/sbin/httpd -DSSL
Как видно из вывода команды сервис запустился и функционирует. Если у вас возникли проблемы, то проверяйте конфиг и читайте логи, чтобы найти проблему. На этом все, настройка закончена.

Добавить комментарий

Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.