LAMP unter CentOS 7 einrichten

Nach einer Standardinstallation läuft unter CentOS 7 weder ein Web- noch ein Datenbank-Server. Abhilfe schafft die Installation eines LAMP-Systems, wobei LAMP = Linux + Apache + MariaDB + PHP gilt.

Voraussetzungen

phpMyAdmin ist nicht Teil der offiziellen CentOS-Pakete. Wenn Sie phpMyAdmin verwenden möchten, müssen Sie die EPEL-Paketquelle EPEL-Paketquelle einrichten:

yum install epel-release

Apache und PHP installieren

Anschließend installieren Sie mit einem Rutsch den Webserver Apache samt PHP, den MySQL-kompatiblen Server MariaDB sowie phpMyAdmin:

yum install httpd mariadb-server mariadb php phpmyadmin

Apache wird nicht standardmäßig gestartet. Abhilfe schaffen diese beiden Kommandos:

systemctl enable httpd
systemctl start httpd

Lokal können Sie nun die Apache-Testseite ansehen (http://localhost). Nach außen hin ist der HTTP-Zugriff aber durch eine Firewall blockiert. Wir brauchen also Ausnahmeregeln für HTTP und HTTPS:

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

Jetzt ist die Apache-Testseite auch von außen sichtbar (http://hostname).

Apache-Testseite unter CentOS
Apache-Testseite unter CentOS

Um zu testen, ob PHP funktioniert, können Sie die Datei /var/www/html/phptest.php mit dem folgenden Inhalt einrichten:

<?php phpinfo(); ?>

Der Besuch von http://hostname/phptest.php zeigt dann eine PHP-Testseite mit detaillierten Informationen zur installierten PHP-Version.

Passwort-Absicherung

Möglicherweise soll Ihre Webseite vorerst nicht öffentlich sein. Dann ist es zweckmäßig, den Zugriff durch einen HTTP-Login abzusichern. Dazu richten Sie zuerst eine Passwortdatei ein:

cd /var/www
htpasswd -c pw.pwd loginname
  New password: ********
  Re-type new password: ********
  Adding password for user loginname

Anschließend laden Sie /etc/httpd/conf/httpd.conf in einen Editor und führen die folgenden Änderungen durch:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    # Require all granted  # diese Zeile auskommentieren
    AuthType Basic         # ab hier neu
    AuthUserFile /var/www/pw.pwd
    AuthName "login"
    Require valid-user
</Directory>

Mit systemctl reload httpd werden die Änderungen wirksam. Jeder, der sich nun http://hostname ansehen will, muss sich nun mit loginname und dem dazugehörenden Passwort anmelden.

MariaDB starten und absichern

Auch MariaDB ist bisher nur installiert, läuft aber nicht. Abhilfe:

systemctl start mariadb
systemctl enable mariadb

MySQL ist standardmäßig nicht abgesichert. Das muss sofort geändert werden. Mit dem Kommando mysql melden Sie sich ohne Passwort als MySQL-Benutzer root an und führen dann die folgenden SQL-Kommandos aus:

mysql -u root -p
update mysql.user set password=password('geheim') 
  where user='root' and password='';
delete from mysql.user where password='';
flush privileges;

Von nun an ist ein root-Login beim Datenbank-Server nur mit Angabe des Passworts geheimmöglich. Die Möglichkeit eines anonymen Logins wurde ganz deaktiviert.

Standardmäßig verhindert die Firewall den Zugriff auf MariaDB von externen Rechnern. Das ist eine sinnvolle Einschränkung, vor allem wenn MariaDB als Datenbank-Server für PHP-Scripts dienen soll. Wollen Sie dennoch Datenbankverbindungen auch von außen erlauben, müssen Sie den MySQL-Port 3006 in der der Firewall freischalten.

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

Außerdem müssen Sie in der MariaDB-Benutzerdatenbank mit GRANT einen Benutzer einrichten, der sich vom Netzwerk aus anmelden darf, beispielsweise so:

mysql -u root -p
GRANT SELECT ON dbname.* TO user@externer-host IDENTIFIED BY 'geheim';

phpMyAdmin

Anstatt wie oben beschrieben den direkten Datenbankzugriff über das Netzwerk freizugeben, ist es zu Administrationszwecken oft sinnvoll, phpMyAdmin einzurichten. Standardmäßig ist phpMyAdmin so konfiguriert, dass die Seite http://hostname/phpMyAdmin/ nur lokal genutzt werden soll. Um den Zugriff auch von außen zu erlauben, diesen aber zugleich mit einem HTTP-Login abzusichern, verändern Sie die Datei /etc/httpd/conf.d/phpMyAdmin.conf wie folgt:

# Die folgenden Zeilen müssen hinzugefügt werden.
# Die Änderung setzt voraus, dass mit htpasswd
# die Passwortdatei /var/www/pw.pwd
# eingerichtet wurde.
<Directory /usr/share/phpMyAdmin/>
    Options none
    AllowOverride Limit
    AuthType Basic
    AuthUserFile /var/www/pw.pwd
    AuthName "login"
    Require valid-user
</Directory>

<Directory /usr/share/phpMyAdmin/setup>
    Options none
    AllowOverride Limit
    Require all granted
    AuthType Basic
    AuthUserFile /var/www/pw.pwd
    AuthName "login"
    Require valid-user
</Directory>

# Die bereits vorhandenen <Directory>-Einträge
# für /usr/share/phpMyAdmin und 
# /usr/share/phpMyAdmin/setup müssen
# auskommentiert oder gelöscht werden:
# <Directory /usr/share/phpMyAdmin/>
#   <IfModule mod_authz_core.c>
# ...
# </Directory>

systemctl reload httpd aktiviert diese Änderungen. Die Verwendung von http://hostname/phpMyAdmin erfordert nun zwei Logins: Zuerst den HTTP-Login gemäß der mit htpasswd eingerichteten Passwortdatei als auch den MariaDB-Login für einen lokalen MariaDB-Benutzer.

3 Gedanken zu „LAMP unter CentOS 7 einrichten“

  1. Die Anweisung funktioniert so nicht auf Centos 7!

    Apache kann nicht auf die, nach Ihrer Anleitung angelegte phptest.php zugreifen.
    Außerhalb des Apachen, auf der Shell, kann jeder User die Datei ausführen!

    So schön die Anleitung aussieht so unbrauchbar ist sie.

    mfg Thomas Hilmes

    1. Ich kann Ihre harsche Kritik nicht nachvollziehen. Ich habe das ganze Setup gerade mit einer aktuellen CentOS-Installation nochmals getestet — und alles funktioniert.

      Was eingeloggte Benutzer mit phptest.php machen können, ist für die Web-Server-Konfiguration nicht relevant. Wer sich auf einem Server einloggen kann, kann die Daten, die phptest.php verrät, mühelos selbst ermitteln.

      Und warum Apache bei Ihnen auf phptest.php nicht zugreifen kann, ist für mich nicht nachvollziehbar — bei mir klappt es. Vielleicht verrät ein Blick in /var/log/httpd/error_log die Fehlerursache.

      PS: Bei der Gelegenheit habe ich gleich ein paar kleinere Korrekturen vorgenommen:

      • Zum Einrichten der EPEL-Paketquelle reicht einfach yum install epel-release.
      • Die Anleitung gibt nun als Ort für die Passwortdatei /var/www/pw.pwd an (nicht wie bisher /var/www/html/pw.pwd). Der neue Ort ist sicherer.
    2. Dein „Problem“ ist das dein Apacheuser die phptest.php nicht lesen darf. Ich hatte dasselbe Problem ein chown apache auf /var/www/html/phptest.php hat das Problem gelöst.

      Viele Grüße,

      Julian

Kommentare sind geschlossen.