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