Detaillierte Anweisungen zur Installation von SuPHP auf CentOS 7.2

Detaillierte Anweisungen zur Installation von SuPHP auf CentOS 7.2

Standardmäßig wird PHP unter CentOS 7 als Apache oder Nobody ausgeführt. Diese Methode erfordert umfangreiche Berechtigungen zum Ausführen von PHP, was ein Sicherheitsrisiko darstellen und auch von anderen Benutzern des Servers beeinflusst werden kann.

SuPHP ist ein Apache-Modul, das es ermöglicht, PHP unter einem anderen Linux-Benutzer als dem Apache-Benutzer auszuführen. Dies kann die Sicherheit Ihrer gehosteten Websites erhöhen, da Sie die PHP-Skripte jeder Website unter einem anderen Benutzer ausführen können. Dieses Tutorial behandelt SuPHP auf CentOS 7.2, installiert aus dem Quellcode, da für CentOS 7.2 keine SuPHP-Pakete verfügbar sind.

Voraussetzungen

Sie haben einen CentOS 7.2-Server oder höher installiert. Ich werde dieses Tutorial als Grundlage für mein Setup verwenden. In diesem ersten Kapitel werde ich den Apache-Webserver installieren. Wenn Sie Apache bereits installiert haben, beginnen Sie jetzt mit Kapitel 2.

Mein Server verwendet den Hostnamen server1.example.com und die IP-Adresse 192.168.1.100. Ersetzen Sie diese Werte in den folgenden Tutorials durch den Hostnamen und die IP-Adresse Ihres Servers.

Aus Sicherheitsgründen empfiehlt es sich, eine Firewall zu installieren. Falls Sie noch keine Firewall installiert haben, können Sie diese mit dem folgenden Befehl nachinstallieren:

yum -y installiere Firewall

Starten Sie die Firewall und aktivieren Sie den Start beim Booten.

systemctl starte firewalld.service
systemctl aktiviere firewalld.service

Öffnen Sie als Nächstes Ihren SSH-Port, um sicherzustellen, dass Sie über SSH eine Verbindung zu Ihrem Server herstellen können.

Firewall-Befehl --permanent --zone=public --add-service=ssh
Firewall-Befehl --reload

1. Installieren Sie Apache 2.4 und PHP 5

Apache und PHP sind in den CentOS-Basis-Repositorys verfügbar, daher können wir beide Pakete mit yum installieren.

Installieren Sie Apache- und Aapache-Entwicklungspakete, die die für die spätere SuPHP-Kompilierung erforderlichen Dateien enthalten.

yum -y installiere httpd httpd-devel

PHP-Installation (ich habe einige gängige PHP-Module hinzugefügt):

yum -y installiere PHP, PHP-MySQL, PHP-GD, PHP-Pear, PHP-XML, PHP-XMLRPC, PHP-MBstring, Curl

Wir müssen Apache so aktivieren, dass es beim Booten gestartet wird und den Dienst startet.

systemctl start httpd.service
systemctl aktiviere 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 den folgenden Befehl aus, um die Firewall zu konfigurieren:

Firewall-Befehl --permanent --zone=public --add-service=http
Firewall-Befehl --permanent --zone=public --add-service=https
Firewall-Befehl --reload

2. Installieren Sie SuPHP

In diesem Schritt kompilieren wir SuPHP aus dem Quellcode. Installieren Sie die Entwicklungstools, um die erforderliche Build-Kette einzurichten.

yum -y groupinstall 'Entwicklungstools'

Und wget kann Quelldateien und den Nano-Editor herunterladen.

yum -y installiere wget nano

Laden Sie das SuPHP-Quellcode-Tar.gz-Archiv herunter und extrahieren 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 und können es dann gegen Apache kompilieren. Der Patch wird wie folgt 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, „config“, ablegen.
libtoolize: Datei „config/ltmain.sh“ wird kopiert
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 richtigen 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: Formen mit zwei und drei Argumenten werden nicht unterstützt. Weitere Informationen finden Sie unter:
configure.ac:9: http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_005fINIT_005fAUTOMAKE-Aufruf
configure.ac:24: „config/config.guess“ wird installiert
configure.ac:24: „config/config.sub“ wird installiert
configure.ac:9: „config/install-sh“ wird installiert
configure.ac:9: „config/missing“ wird installiert
src/Makefile.am: Installieren Sie „config/depcomp“
[root@server1 suphp-0.7.2]#

Der Befehl autoreconf wendet den Patch an und jetzt können wir die neue Quelle wie folgt konfigurieren. HINWEIS: Der Konfigurationsbefehl besteht aus einer Zeile!

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

machen
installieren

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

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

Mit folgendem Inhalt.

Lademodul suphp_module module/mod_suphp.so

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

nano /etc/suphp.conf

[global]
;Pfad zur Logdatei
logfile=/var/log/httpd/suphp.log
;Loglevel
loglevel=info
;Benutzer Apache läuft als
webserver_user=apache
;Pfad, in dem sich alle Skripte befinden müssen
docroot=/
;Pfad zu chroot() vor der Ausführung des Skripts
;chroot=/mychroot
; Sicherheitsoptionen
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
;Überprüfen Sie, welches Skript sich in DOCUMENT_ROOT befindet
check_vhost_docroot=true
;Sendet kleinere Fehlermeldungen an den Browser
Fehler im Browser = falsch
;PATH-Umgebungsvariable
env_path=/bin:/usr/bin
;Zu setzende Umask, in Oktalnotation angeben
umask=0077
; Mindest-UID
min_uid=100
; Minimale GID
min_gid=100

[Handler]
;Handler für PHP-Skripte
x-httpd-suphp="php:/usr/bin/php-cgi"
;Handler für CGI-Skripte
x-suphp-cgi="ausführen:!selbst"

Zum Schluss starten wir Apache neu:

systemctl starte httpd.service neu

3. Konfigurieren Sie Apache Vhost mit SuPHP

In diesem Kapitel erkläre ich, wie man in Apache virtuelle Hosts hinzufügt, auf denen PHP unter separaten Benutzern ausgeführt wird. Ich werde die Domäne www.example.com für die Website verwenden, PHP wird als Benutzer und Gruppe „web1“ ausgeführt und das Dokumentstammverzeichnis der Website ist /var/www/example.com

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

Benutzer hinzufügen web1

Fügen Sie das Stammverzeichnis der Website hinzu.

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

Fügen Sie nun die Konfigurationsdatei des virtuellen Hosts im Apache-Verzeichnis conf.d hinzu.

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

Für diesen Inhalt:

<VirtuellerHost *>
 Dokumentstammverzeichnis /var/www/beispiel.com
 ServerName example.com
 ServerAdmin [email protected]
 
 <FilesMatch ".+\.ph(p[345]?|t|tml)$">
 SetHandler Keine
 </FilesMatch>
 
 <IfModule mod_suphp.c>
 suPHP_Engine ein
 <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 anzuwenden.

systemctl starte httpd.service neu

4. Testen Sie die SuPHP-Einstellungen

In diesem Kapitel zeige ich Ihnen mehrere Möglichkeiten, PHP auf dieser Website zu testen. Zuerst erstelle ich eine Datei, die die Funktion phpinfo() verwendet, um anzuzeigen, ob PHP ordnungsgemäß funktioniert und derzeit im CGI-Modus ausgeführt wird.

Erstellen Sie mit Nano eine info.php-Datei:

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

Und fügen Sie der neuen Datei die folgenden Zeilen hinzu:

<?php
phpinfo();

Ändern Sie dann den Besitzer 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. Die folgende Seite wird angezeigt.

Wichtig ist die ServerAPI-Zeile, die CGI/FastCGI anzeigt. Dies zeigt an, dass PHP über SuPHP statt über mod_php ausgeführt wird.

Nun werde ich testen, ob PHP unter dem richtigen Benutzer (web1) läuft. Woher weiß SuPHP, welcher Benutzer verwendet werden soll? SuPHP stellt PHP auf den Benutzer um, dem die PHP-Skripte gehören. Daher ist es sehr wichtig, dass alle PHP-Dateien in unserem Web-Stammordner /var/www/example.com dem Benutzer und der Gruppe web1 gehören.

Wie teste ich also, 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 Stammverzeichnis der Website erstellen:

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

mit diesem Inhalt:

<?php
system('wer bin ich');

Ändern Sie dann den Besitzer 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 sein: web1

SuPHP ist so konfiguriert, dass PHP-Dateien als Benutzer dieser Website ausgeführt werden. Entfernen Sie die Testdateien aus dem Website-Verzeichnis und beginnen Sie mit dem Hinzufügen Ihrer Website-Skripte.

5. Laden Sie diesen CentOS 7.2-Server als virtuelle Maschine herunter

Mit dieser Einstellung können virtuelle Maschinen im OVA-/OVF-Format (kompatibel mit VMWare und Virtualbox) heruntergeladen werden, wobei die Identität des Benutzers bekannt ist.

Anmeldedaten für die VM

Das Root-Passwort lautet: howtoforge
Das Passwort für den Benutzer "admin" lautet: tecmint
Bitte ändern Sie beide Passwörter, wenn Sie sich das erste Mal anmelden.

Die IP-Adresse der virtuellen Maschine lautet 192.168.1.100

6. Links

CentOS

Apache-Webserver

SuPHP

Das könnte Sie auch interessieren:
  • So installieren Sie suPHP für PHP5 auf CentOS 7 (Peng Ge)

<<:  MySQL 8.0.11 Installationshandbuch für Mac

>>:  Mehrere Möglichkeiten zur Implementierung eines 0-ms-Verzögerungstimers in js

Artikel empfehlen

Vue implementiert das Ziehen und Sortieren von Bildern

In diesem Artikelbeispiel wird der spezifische Co...

So implementieren Sie die King of Glory-Personal-Ladeseite mit CSS3

Wer King of Glory gespielt hat, sollte mit der Wi...

js, um ein Wasserfall-Flusslayout zu erreichen (unendliches Laden)

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs

Überblick Heute werde ich hauptsächlich erklären,...

MySQL 5.7.20 Green Edition Installation Detailliertes grafisches Tutorial

Lassen Sie uns zunächst verstehen, was MySQL ist....

Verwenden Sie Docker, um ein Git-Image mithilfe des Klon-Repositorys zu erstellen

Überblick Ich verwende Docker seit über einem Jah...

Zusammenfassung der 16 XHTML1.0- und HTML-Kompatibilitätsrichtlinien

1. Vermeiden Sie es, die Seite als XML-Typ zu dek...

Öffentliche kostenlose STUN-Server

Öffentliche kostenlose STUN-Server Wenn das SIP-T...

Eine kurze Diskussion zur Logikextraktion und Feldanzeige von Vue3 in Projekten

Inhaltsverzeichnis Logische Schichtung Trennen Si...

Detaillierte Erläuterung der Vue-Projektoptimierung und -verpackung

Inhaltsverzeichnis Vorwort 1. Lazy Loading-Routin...