Установка Apache, PHP с suPHP на CentOS/RedHat/Fedora

Установка  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» я расскажу как выполнить установку и настройку:

  1. Apache.
  2. PHP и некоторых нужных пакетов.
  3. 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» завершена.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.