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
).
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 (quittieren Sie die Passwort-Aufforderung einfach mit [Return]) 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.
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
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:
yum install epel-release
./var/www/pw.pwd
an (nicht wie bisher/var/www/html/pw.pwd
). Der neue Ort ist sicherer.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