GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So installieren Sie SuPHP unter CentOS 7.2

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
patch -Np1 -d suphp-0.7.2 < suphp.patch
cd suphp-0.7.2
autoreconf -if
[[email protected] 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

  • CentOS
  • Apache-Webserver
  • SuPHP

Cent OS
  1. So installieren Sie Apache Cassandra unter CentOS 8

  2. So installieren Sie Apache unter CentOS 7

  3. So installieren Sie Apache Kafka unter CentOS 8

  4. So installieren Sie Apache Tomcat 8 unter CentOS

  5. So installieren Sie phpMyBackupPro unter CentOS 6

So installieren Sie Apache Cassandra in CentOS

So installieren Sie elgg unter CentOS 8

So installieren Sie Apache ServiceMix unter CentOS 8

So installieren Sie Apache SVN unter CentOS 7

So installieren Sie Mod_Security Apache unter CentOS 6

So installieren Sie Apache unter CentOS 6