SuPHP ist ein Apache-Modul, das PHP unter einem anderen Linux-Benutzer als dem Apache-Benutzer ermöglicht. 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 für CentOS 7.2 keine SuPHP-Pakete verfügbar sind.
Voraussetzungen
Sie müssen einen Server haben, auf dem CentOS 7.2 oder höher installiert ist. Ich werde diese Anleitung als Grundlage für meine Einrichtung verwenden. Im ersten Kapitel werde ich den Apache-Webserver installieren. Wenn Sie Apache bereits 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 im folgenden Tutorial vorkommen.
Ich empfehle aus Sicherheitsgründen eine Firewall installiert zu haben, wenn Sie noch keine Firewall installiert haben, dann können Sie sie mit diesen Befehlen installieren:
yum -y install firewalld
Starten Sie die Firewall und aktivieren Sie sie so, dass sie beim Booten gestartet wird.
systemctl start firewalld.service
systemctl enable firewalld.service
Öffnen Sie als Nächstes Ihren SSH-Port, um sicherzustellen, dass Sie sich per 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, sodass wir beide Softwarepakete mit yum installieren können.
Installieren Sie Apache und das Apache-Entwicklungspaket, das Dateien enthält, die später für die 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 Apache ermöglichen, beim Booten zu starten und den Dienst zu starten.
systemctl start httpd.service
systemctl enable httpd.service
Wir müssen die Ports HTTP (80) und HTTPS (443) ö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 dem Quellcode kompilieren. Installieren Sie die Entwicklungstools, um die erforderliche Build-Kette einzurichten.
yum -y groupinstall 'Development Tools'
Und wget, um die Quelldateien und den Nano-Editor herunterzuladen.
yum -y install wget nano
Laden Sie das SuPHP-Quellarchiv 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, also müssen wir suphp patchen, bevor wir es gegen Apache kompilieren können. Der Patch wird wie folgt angewendet:
wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch[[email protected] suphp-0.7.2]# autoreconf -if
patch -Np1 -d suphp-0.7.2 < suphp.patch
cd suphp-0.7.2
autoreconf -if
libtoolize:Hilfsdateien in AC_CONFIG_AUX_DIR, `config' einfügen.
libtoolize:Datei `config/ltmain.sh' kopieren
libtoolize:Erwägen Sie das Hinzufügen von `AC_CONFIG_MACRO_DIR([m4])' zu configure.ac und
libtoolize:Führen Sie libtoolize erneut aus, um die korrekten libtool-Makros im Baum zu behalten.
libtoolize:Erwägen Sie das Hinzufügen von `-I m4' zu ACLOCAL_AMFLAGS in Makefile.am.
configure.ac:9:Warnung:AM_INIT_AUTOMAKE:Formulare mit zwei und drei Argumenten 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 :'config/config.guess' installieren
configure.ac:24:'config/config.sub' installieren
configure.ac:9:'config/install-sh' installieren
configure .ac:9:„config/missing“ wird installiert
src/Makefile.am:„config/depcomp“ wird installiert
[[email protected] suphp-0.7.2]#
Der Befehl autoreconf wendet den Patch an, jetzt können wir die neue Quelle wie folgt konfigurieren. HINWEIS: Der Befehl configure ist einzeilig!
./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"
Abschließend starten wir Apache neu:
systemctl restart httpd.service
3 Konfigurieren Sie einen 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 verwenden für die Website und PHP soll als Benutzer und Gruppe "web1" laufen ", das Dokumentenstammverzeichnis für die Website ist /var/www/example.com
Fügen Sie zuerst 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 im Apache-Verzeichnis conf.d hinzu.
nano /etc/httpd/conf.d/example.com.conf
mit diesem Inhalt:
<VirtualHost *>
DocumentRoot /var/www/example.com
ServerName example.com
ServerAdmin [email protected]
<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 in den Zeilen ServerName und ServerAdmin durch Ihre eigene Domäne.
Starten Sie dann Apache neu, um die Konfigurationsänderungen zu übernehmen.
systemctl restart httpd.service
4 Testen Sie das SuPHP-Setup
In diesem Kapitel zeige ich Ihnen mehrere Methoden zum Testen von PHP auf dieser Website. 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 der neuen Datei die folgenden Zeilen hinzu:
<?php
phpinfo();
Ändern Sie dann den Eigentümer der Datei in den Benutzer und die Gruppe web1.
chown web1:web1 /var/www/example.com/info.php
Öffnen Sie die URL der Datei http://example.com/info.php in einem Webbrowser, sie sollte die folgende Seite anzeigen.
Wichtig ist die ServerAPI Zeile, die CGI/FastCGI anzeigt . was zeigt, dass PHP über SuPHP und nicht über mod_php ausgeführt wird.
Jetzt 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/www/example.com dem Benutzer und der Gruppe web1 gehören.
Wie kann man also testen, ob PHP den richtigen Benutzer verwendet? Eine Möglichkeit besteht darin, den "whoami"-Befehl auszuführen, der den Benutzernamen zurückgibt.
Ich erstelle ein neues Skript testuser.php im Stammverzeichnis der Website:
nano /var/www/example.com/testuser.php
mit diesem Inhalt:
<?php
system('whoami');
Ändern Sie dann den Eigentümer der Datei in den Benutzer und die Gruppe web1.
chown web1:web1 /var/www/example.com/testuser.php
Öffnen Sie http://example.com/testuser.php in einem Webbrowser, das Ergebnis sollte das: web1
sein
SuPHP wird als Benutzer dieser Website konfiguriert und führt die PHP-Dateien aus. Entfernen Sie die Testdateien aus dem Website-Verzeichnis und fügen Sie Ihre Website-Skripte hinzu.
5 Laden Sie diesen CentOS 7.2-Server als virtuelle Maschine herunter
Dieses Setup ist als Download einer virtuellen Maschine im ova/ovf-Format (kompatibel mit VMWare und Virtualbox) für howtoforge-Abonnenten verfügbar.
Anmeldedaten für die VM
- Das Root-Passwort lautet:howtoforge
- Das Passwort des "Administrator"-Benutzers lautet:howtoforge
Bitte ändern Sie beide Passwörter bei der ersten Anmeldung.
- Die IP-Adresse der VM lautet 192.168.1.100
6 Links
- CentOS
- Apache-Webserver
- SuPHP