Установка Apache, PHP с suPHP на CentOS/RedHat/Fedora
suPHP — это инструмент для выполнения скриптов PHP с правами их владельцев, а не пользователя Apache. С помощью suPHP вы также можете использовать PHP4 и PHP5 . В этой теме «Установка Apache, PHP с suPHP на CentOS/RedHat/Fedora» показано, как установить и использовать suPHP с PHP4 и PHP5.
suPHP интегрируется в Apache2 в качестве модуля.
В этой статье «Установка Apache, PHP с suPHP на CentOS/RedHat/Fedora» я расскажу как выполнить установку и настройку:
- Apache.
- PHP и некоторых нужных пакетов.
- suPHP.
Кроме того, я объясню, как:
- Настроить apache для запуска виртуальных хостов для выбранных существующих пользователей.
- Настроить PHP для работы c пользователями виртуального хоста (suPHP).
Предустановка.
Если пользователь и группа не существует, мы можете создать их следующим образом:
# groupadd suphp_group # useradd -s /bin/false -d /home/suphp_admin -m -g suphp_group suphp_admin
Далее, выставляем права на файл index.php (пермишены и владельца):
# chmod 0755 /home/suphp_admin # chown suphp_admin:suphp_group /home/suphp_admin/
Установка Apache.
1) Установка веб сервера — Apache (httpd):
# yum install httpd -y
Параметр «-у» пропускает вопрос на подтверждение установки.
2) Запускаем сервер:
# service httpd start
3) Тестируем, работает ли веб-сервер HTTP (одним из методов):
Способ 1.
# curl http://localhost/ 2>/dev/null
Способ 2.
# wget -qO- http://localhost/
Способ 3.
# echo -e "GET / HTTP/1.0\r\n\r\n" | nc localhost 80
Если ваш апач находится не на localhost, то измените команду.
Настройка конфигурационного файла Apache
Я использовал конфигурацию по умолчанию, и, ничего не правил там.
Установка PHP и его пакетов
Вот некоторые основные PHP пакеты, которые вы возможно захотите установить их:
# yum install php-common php-gd php-mcrypt php-pear php-pecl-memcache php-mysql php-xml php php-mcrypt php-mbstring php-devel gcc pcre-devel -y
Затем установите mod_suphp, чтобы иметь возможность работать PHP для каждого пользователя, но для начала, подключите репозиторий RPMForge:
Исключим (выключим) репозиторий RPMForge из стандартного (если вы оставите его включенным, то он может повредить вашу систему).
# sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo
Установка mod_suphp через yum из rpmforge репозитория:
# yum install mod_suphp -y --enablerepo=rpmforge
!! ОЧЕНЬ ВАЖНО !!: Исправьте PHP обработчик:
# sed -i 's/x-httpd-php=php:\/usr\/bin\/php/x-httpd-php=\"php:\/usr\/bin\/php-cgi\"/g' /etc/suphp.conf
Если вы не выполните команду что выше (замену с «x-httpd-php=php:/usr/bin/php» на «x-httpd-php=»php:/usr/bin/php-cgi»»), то вы получите следующие ошибки:
[error] [client] SecurityException in Application.cpp:511: Unknown Interpreter: php [error] [client] Premature end of script headers: index.php
Убедитесь, что установлен PHP и загружается с помощью FastCGI, а не через «Apache 2.0 Handler». Вы можете увидеть данную информацию через страницу phpinfo.
# yum install mod_fastcgi --enablerepo=rpmforge -y
После установки, нужно отредактировать конфигурационный файл suphp:
# vim /etc/suphp.conf
Вносим изменения:
[...] errors_to_browser=true [...]
Следующим шагом, стоит внести изменения для обработки PHP и для этого, нужно отредактировать:
# vim /etc/httpd/conf.d/php.conf
И закоментируйте или удалите все, кроме следующего текста ( нужно добавить именно его):
[...] # Cause the PHP interpreter to handle files with a .php extension. # AddHandler x-httpd-php .php .php4 .php3 .phtml AddType text/html .php # SuPHP configuration for PHP5 LoadModule suphp_module modules/mod_suphp.so suPHP_Engine on [...]
Так же, нужно проверить чтобы небыли прописаны следующие строки:
#<FilesMatch \.php$> # SetHandler application/x-httpd-php #</FilesMatch>
Закоментируйте их как у меня.
Добавьте следующие изменения в файл /etc/php.ini:
# vim /etc/php.ini
И добавляем, если таких параметров нет:
short_open_tag = On error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE display_errors = On log_errors = On session.save_path = "/var/lib/php/session"
Добавления виртуального хоста в Apache
Эта конфигурация создает виртуальный хост для пользователя suphp_admin с доменом linux-notes.org и www.linux-notes.org и его группой suphp_group. Настройте имена пользователя и своих доменов по усмотрению.
Открываем/создаем виртуальный хост:
# vim /etc/httpd/conf.d/Virtual_Host.conf
И добавляем виртуальный хост:
#Listen 80 Listen 8080 <VirtualHost 97.79.237.17:8080> #NameVirtualHost 97.79.237.17 ServerName 97.79.237.17 #ServerAdmin webmaster@97.79.237.17 DocumentRoot /home/suphp_admin ErrorLog /var/log/httpd/97.79.237.17-error_log CustomLog /var/log/httpd/97.79.237.17-access_log combined DirectoryIndex index.php index.html suPHP_Engine on suPHP_UserGroup suphp_admin suphp_group AddHandler x-httpd-php .php suPHP_AddHandler x-httpd-php #php_admin_value open_basedir "/path/to/web/root:/usr/lib/php:/usr/local/lib/php:/var/lib/php/session:/tmp" <Directory /> #AllowOverride All Options FollowSymLinks AllowOverride None </Directory> <LocationMatch "^/+$"> Options -Indexes ErrorDocument 403 /error/noindex.html </LocationMatch> </VirtualHost>
Тестируем PHP с suPHP
Отредактируем файл, который расположенный в папке пользователя, в данном примере, пользователь invision:
# vim /home/suphp_admin/index.php
Вставляем:
<?php echo "=======================================================================<br><br>"; echo `/usr/bin/whoami`; echo "<br><br>=======================================================================<br><br>"; system (id); echo "<br><br>=======================================================================<br><br>"; phpinfo(); ?>
Пермишены:
# chown suphp_admin:suphp_group /home/suphp_admin/index.php # chmod 644 /home/suphp_admin/index.php
Наконец, открываем свою страницу для которого создали виртуальный хост Apache, например:
http://linux-notes.org/
Страница должна вывести имя пользователя от которого запускается данный PHP скрипт:
suphp_admin
Если он выводит Apache, то что-то не так с конфигурацией suPHP.
Обработка ошибок и лог-файлы
Вы можете просмотреть подробную информацию о ошибках Apache в лог файле:
# cat /var/log/httpd/error_log | tail -n 20
Кроме того, вы можете просмотреть логи самого suPHP:
# cat /var/log/httpd/suphp_log | tail -n 20
Как правило, suPHP покажет подобное:
[Thu Jul 02 13:31:31 2015] [info] Executing "/home/suphp_admin/index.php" as UID 501, GID 501
На этом, у меня все, тема «Установка Apache, PHP с suPHP на CentOS/RedHat/Fedora» завершена.