So installieren Sie SuPHP auf CentOS 7.2

SuPHP ist ein Apache-Modul, das es PHP ermöglicht, unter einem anderen Linux-Benutzer als dem Apache-Benutzer zu arbeiten. Dies verbessert die Sicherheit von gehosteten Websites, da Sie die PHP-Skripte jeder Website unter einem anderen Benutzer ausführen können. Dieses Tutorial beschreibt die Installation von SuPHP auf centOS 7.2 aus dem Quellcode, da es für CentOS 7.2 keine SuPHP-Pakete gibt.

Voraussetzungen

Im ersten Kapitel werde ich den Apache Webserver installieren. Wenn Sie bereits einen Apache installiert haben, dann beginnen Sie gleich mit Kapitel 2.

Mein Server verwendet den Hostnamen server1.example.com und die IP-Adresse 192.168.1.100. Ersetzen Sie diese Werte durch den Hostnamen und die IP Ihres Servers, wo immer sie vorkommen, im folgenden Tutorial.

Ich empfehle aus Sicherheitsgründen, eine Firewall installieren zu lassen, wenn Sie noch keine Firewall installiert haben, dann können Sie diese mit diesen Befehlen installieren:

yum -y install firewalld

Starten Sie die Firewall und lassen Sie sie beim Booten starten.

systemctl start firewalld.service
systemctl enable firewalld.service

Öffnen Sie anschließend Ihren SSH-Port, um sicherzustellen, dass Sie sich über SSH mit dem Server verbinden können.

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

1 Installation von Apache 2.4 und PHP 5

Apache und PHP sind im CentOS-Basis-Repository verfügbar, so dass wir beide Softwarepakete mit yum installieren können.

Installieren Sie den Apache und das Aapache Entwicklungspaket, das Dateien enthält, die für die spätere SuPHP-Kompilierung benötigt werden.

yum -y install httpd httpd-devel

PHP-Installation (ich habe einige häufig verwendete PHP-Module hinzugefügt):

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

Wir müssen es dem Apache ermöglichen, beim Booten zu starten und den Dienst zu starten.

systemctl start httpd.service
systemctl enable httpd.service

Wir müssen die HTTP- (80) und HTTPS- (443) Ports öffnen, um den Webserver von anderen Computern aus zugänglich zu machen. Führen Sie die folgenden Befehle aus, um die Firewall zu konfigurieren.

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

2 Installation von SuPHP

In diesem Schritt werden wir SuPHP aus der Quelle kompilieren. Installieren Sie die Entwicklungswerkzeuge, um die erforderliche Build Chain einzurichten.

yum -y groupinstall 'Development Tools'

Und wir laden die Quelldateien und den Nano-Editor herunter.

yum -y install wget nano

Laden Sie das SuPHP-Quelltextarchiv tar.gz herunter und entpacken Sie es.

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 verwendet Apache 2.4, daher müssen wir suphp patchen, bevor wir es gegen Apache kompilieren können. Der Patch wird so angewendet:

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
[root@server1 suphp-0.7.2]# autoreconf -if libtoolize: Hilfsdateien in AC_CONFIG_AUX_DIR einfügen, `config'. libtoolize: Datei `config/ltmain.sh' libtoolize kopieren: Erwägen Sie, `AC_CONFIG_MACRO_DIR([m4])' zur Konfiguration von.ac und libtoolize hinzuzufügen: Wiederholen Sie die libtoolize, um die richtigen libtool-Makros im Baum zu behalten. libtoolize: Erwägen Sie, `-I m4' zu ACLOCAL_AMFLAGS in Makefile.am hinzuzufügen. configure.ac:9: warning: AM_INIT_AUTOMAKE: Zwei- und Drei-Argumente-Formulare sind veraltet. Weitere Informationen finden Sie unter: configure.ac:9: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-invocation configure.ac:24: Installation von 'config/config.guess' configure.ac:24: Installation von 'config/config.sub' configure.ac:9: Installation von 'config/install-sh' configure.ac:9: Installation von 'config/missing' src/Makefile.am: Installation von 'config/depcomp'

Der Befehl autoreconf wendet den Patch an, jetzt können wir die neue Quelle wie folgt konfigurieren. HINWEIS: Der configure-Befehl ist eine Zeile lang!

./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

Dann kompilieren und installieren Sie SuPHP.

make
make install

Fügen Sie dann das suPHP-Modul zur Apache-Konfiguration hinzu, indem Sie eine neue suphp.conf-Datei hinzufügen.

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

Mit folgendem Inhalt.

LoadModule suphp_module modules/mod_suphp.so

…. und erstellen Sie die Datei /etc/suphp.conf wie folgt:

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"

Schließlich starten wir den Apache neu:

systemctl restart httpd.service

3 Konfigurieren eines Apache Vhost mit SuPHP

In diesem Kapitel werde ich zeigen, wie Sie einen virtuellen Host in Apache hinzufügen können, der PHP unter einem separaten Benutzer ausführt. Ich werde den Domainnamen www.example.com für die Website verwenden und PHP wird als Benutzer und Gruppe „web1“ ausgeführt, die Dokumenten-Root für die Website ist /var/wwww/example.com.

Fügen Sie zunächst einen neuen Benutzer und eine neue Gruppe „web1“ hinzu.

useradd web1

Fügen Sie das Stammverzeichnis der Website hinzu.

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

Fügen Sie nun die Konfigurationsdatei des virtuellen Hosts in das Verzeichnis apache conf.d hinzu.

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

mit diesem Inhalt:

<VirtualHost *>
 DocumentRoot /var/www/example.com
 ServerName example.com
 ServerAdmin webmaster@example.com
<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>

Ersetzen Sie den Domänennamen durch Ihre eigene Domäne in den Zeilen ServerName und ServerAdmin.

Starten Sie dann den Apache neu, um die Konfigurationsänderungen zu übernehmen.

systemctl restart httpd.service

4 Testen Sie das SuPHP-Setup.

In diesem Kapitel zeige ich Ihnen verschiedene Methoden, um PHP auf dieser Website zu testen. Zuerst werde ich eine Datei erstellen, die die Funktion phpinfo() verwendet, um anzuzeigen, ob PHP funktioniert und ob es jetzt im CGI-Modus läuft.

Erstellen Sie eine info.php-Datei mit nano:

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

und fügen Sie die folgenden Zeilen zur neuen Datei hinzu:

<?php
phpinfo();

Ändere dann den Besitzer der Datei auf den web1-Benutzer und die Gruppe.

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

Öffnen Sie die URL der Datei http://example.com/info.php in einem Webbrowser, sie soll die folgende Seite anzeigen.

PHP Info

Wichtig ist die ServerAPI-Zeile, die CGI/FastCGI anzeigt. Sie zeigt, dass PHP über SuPHP und nicht über mod_php ausgeführt wird.

Nun werde ich testen, ob PHP unter dem richtigen Benutzer (web1) läuft. Woher weiß SuPHP, welchen Benutzer es verwenden soll? SuPHP schaltet PHP auf den Benutzer um, dem das PHP-Skript gehört, daher ist es wichtig, dass alle PHP-Dateien in unserem Web-Root-Ordner /var/wwww/example.com dem web1-Benutzer und der Gruppe gehören.

Also, wie kann man testen, ob PHP den richtigen Benutzer verwendet? Eine Möglichkeit besteht darin, den Befehl „whoami“ auszuführen, der den Benutzernamen zurückgibt.

Ich werde ein neues Skript testuser.php im Website-Root erstellen:

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

mit diesem Inhalt:

<?php
system('whoami');

Ändere dann den Besitzer der Datei auf den web1-Benutzer und die Gruppe.

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

Öffnen Sie http://example.com/testuser.php in einem Webbrowser, das Ergebnis ist: web1

SuPHP läuft jetzt als Benutzer web1.

SuPHP ist konfiguriert und führt die PHP-Dateien als Benutzer dieser Website aus. Entfernen Sie die Testdateien aus dem Website-Verzeichnis und fügen Sie Ihre Webseiten-Skripte hinzu.

Das könnte Dich auch interessieren …