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