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

Итак, нужно настроить Apache с PHP5. PHP будет работать в режиме CGI, причем процессы PHP будут выполняться с правами пользователя, что хорошо скажется для безопасности.

Ставим PHP

# cd /usr/ports/lang/php5
# make install clean

Я выбрал следующие опции (опции, которые должны присутствовать обязательно, подчеркнуты):

  • CLI
  • CGI
  • SUHOSIN
  • REDIRECT
  • DISCARD
  • FASTCGI
  • PATHINFO

Ставим Apache

Правим make.conf

PORTSDIR?=/usr/ports

.if ${.CURDIR} == ${PORTSDIR}/www/apache20
WITH_SUEXEC=yes
SUEXEC_DOCROOT="/home"
SUEXEC_USERDIR="www"
.endif

Теперь компилим и устанавливаем apache:

cd /usr/ports/www/apache20
make install clean

После того как установка закончена правим конфиг под свои нужды. В конфиге обязательно должны присутствовать и быть включены модули mod_suexec и mod_cgi:

LoadModule cgi_module libexec/apache2/mod_cgi.so
LoadModule suexec_module libexec/apache2/mod_suexec.so

Настраиваем виртуальный хост следующим образом:

<VirtualHost *:80>
 SuexecUserGroup chihpih chihpih
 DocumentRoot /home/chihpih/www/chihpih.no-ip.org
 DirectoryIndex index.php index.html

 ServerName chihpih.no-ip.org
 ServerAdmin webmaster@chihpih.no-ip.org

 ErrorLog /home/chihpih/log/error.log
 #CustomLog /home/chihpih/log/access.log common

 AddHandler application/x-httpd-php .php
 Action application/x-httpd-php /php-bin/php.sh

 <Directory "/home/chihpih/www/chihpih.no-ip.org">
   Options FollowSymLinks MultiViews
   AllowOverride All
   Order allow,deny
   Allow from all
 </Directory>

 ScriptAlias /php-bin/ "/home/chihpih/php-bin/"
 <Directory "/home/chihpih/php-bin">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
 </Directory>
</VirtualHost>

Далее идем в пользовательскую директорию, создаем нужные папки и даем нужные права:

# cd /home/chihpih
# mkdir www log php-bin tmp
# chmod 750 www php-bin tmp
# chown www:www log
# chmod 755 log

В директории php-bin создаем файл php.sh такого содержания:

#!/bin/sh

exec nice -n 20 /usr/local/bin/php-cgi -c "/home/chihpih/php-bin/php.ini"

Не забываем дать ему права на запуск, запрет на изменение и удаление.

# cd /home/chihpih/php-bin
# chmod 750 php.sh
# chflags schg,sunlink php.sh

Далее копируем и правим конфиг php, так же не забываем запретить изменение и удаление файла.

# cd /home/chihpih/php-bin
# cp /usr/local/etc/php.ini-dist ./php.ini
# chmod 440 php.ini
# chflags schg,sunlink php.ini

Чтобы апач мог попасть в директорию пользователя, нужно учетку www добавить в группу пользователя chihpih.

# pw groupmod chihpih -m www

Осталось только добавить апач в автозагрузку и запустить его.

# echo 'apache2_enable="YES"' >> /etc/rc.conf
# service apache2 start

Проверим запустился ли сервис:

# ps -U www
 PID  TT  STAT      TIME COMMAND
9134  ??  SJ     0:00,64 /usr/local/sbin/httpd -DSSL
9706  ??  IJ     0:00,04 /usr/local/sbin/httpd -DSSL
41807  ??  IJ     0:00,03 /usr/local/sbin/httpd -DSSL
41808  ??  IJ     0:00,02 /usr/local/sbin/httpd -DSSL
42002  ??  IJ     0:00,04 /usr/local/sbin/httpd -DSSL
42003  ??  IJ     0:00,04 /usr/local/sbin/httpd -DSSL

Как видно из вывода команды сервис запустился и функционирует. Если у вас возникли проблемы, то проверяйте конфиг и читайте логи, чтобы найти проблему. На этом все, настройка закончена.

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

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