Поиск по сайту:

Как установить SuPHP на CentOS 7.2


На этой странице

  1. Предпосылки
  2. 1 Установка Apache 2.4 и PHP 5
  3. 2 Установка SuPHP
  4. 3. Настройка виртуального хоста Apache с помощью SuPHP
  5. 4. Проверьте настройку SuPHP.
  6. 5 Загрузите этот сервер CentOS 7.2 в качестве виртуальной машины.
  7. 6 ссылок

SuPHP — это модуль Apache, который позволяет PHP работать под другим пользователем Linux, отличным от пользователя Apache. Это повышает безопасность размещенных веб-сайтов, поскольку вы можете запускать PHP-скрипты каждого веб-сайта под другим пользователем. В этом руководстве описывается установка SuPHP на CentOS 7.2 из исходного кода, поскольку для CentOS 7.2 нет доступных пакетов SuPHP.

Предпосылки

У вас должен быть сервер с установленной CentOS 7.2 или более поздней версии. Я буду использовать это руководство в качестве основы для своей настройки. В первой главе я установлю веб-сервер Apache. Если у вас уже установлен apache, то сразу начните с главы 2.

Мой сервер будет использовать имя хоста server1.example.com и IP-адрес 192.168.1.100. Замените эти значения именем хоста и IP-адресом вашего сервера, где бы они ни встречались в следующем руководстве.

Я рекомендую установить брандмауэр из соображений безопасности, если у вас еще не установлен firewalld, вы можете установить его с помощью этих команд:

yum -y install firewalld

запустите брандмауэр и включите его во время загрузки.

systemctl start firewalld.service
systemctl enable firewalld.service

Затем откройте порт SSH, чтобы убедиться, что вы сможете подключиться к серверу по SSH.

firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --reload

1 Установка Apache 2.4 и PHP 5

Apache и PHP доступны в базовом репозитории CentOS, поэтому мы можем установить оба программных пакета с помощью yum.

Установите Apache и пакет разработки Aapache, который содержит файлы, необходимые для компиляции SuPHP позже.

yum -y install httpd httpd-devel

Установка PHP (добавлено несколько часто используемых модулей PHP):

yum -y install php php-mysql php-gd php-pear php-xml php-xmlrpc php-mbstring curl

Мы должны разрешить Apache запускаться во время загрузки и запускать службу.

systemctl start httpd.service
systemctl enable httpd.service

Нам нужно открыть порты HTTP (80) и HTTPS (443), чтобы сделать веб-сервер доступным с других компьютеров. Выполните следующие команды, чтобы настроить брандмауэр.

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

2 Установка SuPHP

На этом этапе мы скомпилируем SuPHP из исходного кода. Установите инструменты разработки, чтобы настроить необходимую цепочку сборки.

yum -y groupinstall 'Development Tools'

И wget для загрузки исходных файлов и редактора nano.

yum -y install wget nano

Загрузите архив tar.gz с исходным кодом SuPHP и распакуйте его.

cd /usr/local/src
wget http://suphp.org/download/suphp-0.7.2.tar.gz
tar zxvf suphp-0.7.2.tar.gz

CentOS 7 использует Apache 2.4, поэтому нам нужно исправить suphp, прежде чем мы сможем скомпилировать его с Apache. Патч применяется следующим образом:

wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch
patch -Np1 -d suphp-0.7.2 < suphp.patch
cd suphp-0.7.2
autoreconf -if

Команда autoreconf применяет патч, теперь мы можем настроить новый источник следующим образом. ПРИМЕЧАНИЕ. Команда configure состоит из одной строки!

./configure --prefix=/usr/ --sysconfdir=/etc/ --with-apr=/usr/bin/apr-1-config --with-apache-user=apache --with-setid-mode=owner --with-logfile=/var/log/httpd/suphp_log

Затем скомпилируйте и установите SuPHP.

make
make install

Затем добавьте модуль suPHP в конфигурацию Apache, добавив новый файл suphp.conf.

nano /etc/httpd/conf.d/suphp.conf

Со следующим содержанием.

LoadModule suphp_module modules/mod_suphp.so

... и создайте файл /etc/suphp.conf следующим образом:

nano /etc/suphp.conf
[global]
;Path to logfile
logfile=/var/log/httpd/suphp.log
;Loglevel
loglevel=info
;User Apache is running as
webserver_user=apache
;Path all scripts have to be in
docroot=/
;Path to chroot() to before executing script
;chroot=/mychroot
; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true
;Send minor error messages to browser
errors_to_browser=false
;PATH environment variable
env_path=/bin:/usr/bin
;Umask to set, specify in octal notation
umask=0077
; Minimum UID
min_uid=100
; Minimum GID
min_gid=100

[handlers]
;Handler for php-scripts
x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler for CGI-scripts
x-suphp-cgi="execute:!self"

Наконец, мы перезапускаем Apache:

systemctl restart httpd.service

3 Настройте виртуальный хост Apache с помощью SuPHP

В этой главе я покажу, как добавить в apache виртуальный хост, который запускает PHP под отдельным пользователем. Я буду использовать доменное имя www.example.com для веб-сайта, а PHP будет работать от имени пользователя и группы \web1\, корневой документ для веб-сайта — /var/www/example.com.

Сначала добавьте нового пользователя и группу \web1\.

useradd web1

Добавьте корневой каталог веб-сайта.

mkdir /var/www/example.com
chown web1:web1 /var/www/example.com

Теперь добавьте файл конфигурации виртуального хоста в каталог apache conf.d.

nano /etc/httpd/conf.d/example.com.conf

с этим содержанием:

<VirtualHost *>
DocumentRoot /var/www/example.com
ServerName example.com
ServerAdmin

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler None
</FilesMatch>

<IfModule mod_suphp.c>
suPHP_Engine on
<FilesMatch "\.php[345]?$">
SetHandler x-httpd-suphp
</FilesMatch>
suPHP_AddHandler x-httpd-suphp
</IfModule>
</VirtualHost>

Замените доменное имя своим доменом в строках ServerName и ServerAdmin.

Затем перезапустите apache, чтобы применить изменения конфигурации.

systemctl restart httpd.service

4 Протестируйте установку SuPHP

В этой главе я покажу вам несколько методов тестирования PHP на этом веб-сайте. Во-первых, я создам файл, который использует функцию phpinfo(), чтобы показать, работает ли PHP и работает ли он сейчас в режиме CGI.

Создайте файл info.php с помощью nano:

nano /var/www/example.com/info.php

и добавьте в новый файл следующие строки:

<?php
phpinfo();

Затем измените владельца файла на пользователя и группу web1.

chown web1:web1 /var/www/example.com/info.php

Откройте URL-адрес файла http://example.com/info.php в веб-браузере, он должен показать следующую страницу.

Важной является строка ServerAPI, которая показывает CGI/FastCGI. что показывает, что PHP запускается через SuPHP, а не через mod_php.

Теперь я проверю, работает ли PHP под правильным пользователем (web1). Как SuPHP узнает, какого пользователя он должен использовать? SuPHP переключает PHP на пользователя, которому принадлежит скрипт PHP, поэтому важно, чтобы все файлы PHP в нашей корневой веб-папке /var/www/example.com принадлежали пользователю и группе web1.

Итак, как проверить, использует ли PHP нужного пользователя? Один способ состоит в том, чтобы выполнить команду whoami, которая возвращает имя пользователя.

Я создам новый скрипт testuser.php в корне сайта:

nano /var/www/example.com/testuser.php

с этим содержанием:

<?php
system('whoami');

Затем измените владельца файла на пользователя и группу web1.

chown web1:web1 /var/www/example.com/testuser.php

Откройте http://example.com/testuser.php в веб-браузере, результат должен быть таким: web1

SuPHP настроен и выполняет файлы PHP от имени пользователя этого веб-сайта. Удалите тестовые файлы из каталога веб-сайта и начните добавлять скрипты своего веб-сайта.

5 Загрузите этот сервер CentOS 7.2 как виртуальную машину

Эта установка доступна для загрузки виртуальной машины в формате ova/ovf (совместима с VMWare и Virtualbox) для подписчиков howtoforge.

Данные для входа в виртуальную машину

  • Корневой пароль: howtoforge
  • Пароль пользователя \администратора\: howtoforge

Измените оба пароля при первом входе.

  • IP-адрес виртуальной машины: 192.168.1.100.

6 ссылок

  • СентОС
  • Веб-сервер Apache
  • SuPHP