Handbuch:Datenbankpasswörter sichern

This page is a translated version of the page Manual:Securing database passwords and the translation is 65% complete.

LocalSettings.php enthält standardmäßig MySQL-Datenbankbenutzer-IDs und Passwörter. Das Aufbewahren dieser Anmeldeinformationen in LocalSettings.php ist riskant, weil in seltenen Fällen PHP-Dateien als Klartext bereitgestellt werden, der diese Anmeldeinformationen der Welt offenbart:

  • PHP ist auf dem Server deaktiviert
  • PHP selbst geht kaputt
  • Du hast CGI search.pl (Ein häufig zu findener CGI-Suchskript) irgendwo in der Domain. Beschreibung des Exploits.

Falls du in diesen seltenen Fällen dein MySQL-Benutzername und Passwort geheim halten möchtest, sollten sie nicht teil der LocalSettings.php-Datei sein.

MySQL-Passwörter außerhalb von Webroot

Du solltest nie deine MySQL-Passwörter in einer Textdatei, welches im Webroot ist, speichern. Du kannst dies vermeiden, indem du folgendes machst:

  • Erstelle einen Ordner außerhalb deines Webroots. Zum Beispiel, wenn deine Website sich in "/htdocs/www-wiki" befindet, dann erstelle einen Ordner namens "external_includes" außerhalb deines Webroots:
    • mkdir /external_includes
  • Erstelle eine Datei in den Ordner, den du gerade gemacht hast, namens etwas wie "mysql_pw.php" und platziere eine Variabel auf einer separaten Zeile für dein MySQL-Benutzername, Passwort, Hostname und Datenbankname, wobei jede Variable auf die tatsächlichen Werte gesetzt wird. Zum Beispiel mit nano als dein Editor:
    • nano /external_includes/mysql_pw.php
    • Gebe die folgenden Zeilen ein, wobei du natürlich die realen Werte anstelle der eingeklammerten "mysql_"-Füller verwendest:
<?php
  $wgDBserver = "[mysql_host]";
  $wgDBname = "[mysql_db_name]";
  $wgDBuser = "[mysql_user]";
  $wgDBpassword = "[mysql_password]";
  
  // more confidential data...
?>
  • Sorge dafür, dass keine Leerzeichen (leeren Zeilen) nach den Text bleiben.
  • Speichere und schließe die Datei. In w:de:Nano (Texteditor) ist es: Ctr+O (Speichern) und Ctr+X (Schließen)

Check with your distro for the webserver's user. This varies, and examples include "apache", "www-data", "nobody", "httpd". Lege dann die Berechtigungen für die Passwortdatei wie gefolgt fest:

  • chgrp apache mysql_pw.php
  • chmod 640 mysql_pw.php (entfernt Zugangsrechte von anderen und Schreibrechte vom Webserver)
  • (probably repeat with g-rxw ... for LocalSettings.php )
  • Make sure that the file owner has r (or chmod 400 LocalSettings.php)
  • Bearbeite deine LocalSettings.php-Datei und füge die folgende Zeile am Anfang der Datei ein:
require_once "/external_includes/mysql_pw.php"; //require_once "[FULL ABSOLUTE PATH TO mysql_pw.php]";
  • Entferne nun diese Variablen von LocalSettings.php:
$wgDBserver
$wgDBname
$wgDBuser
$wgDBpassword

This way if somebody is able to access and display LocalSettings.php, all they will see is some settings rather than the password, username, etc. to your MySQL database and the real file containing that information is off limits to the web server. You still need to make sure LocalSettings.php is only readonly to the apache user as described above.

If you are doing these changes and do not have access to the users because your web server provider does not let you, then, from ftp the minimum rights you have to set for your "external_includes" are: drwx--x--x (711). For the file "mysql_pw.php" you will have to set rw-r--r-- (644), otherwise your wiki will not run. Still, your password is secure because the file with critical info is out of web access.
If you can't create any files outside of your webroot, you can still achieve some protection by going through the process above and using a filename like ".htdbpasswd" inside your webroot instead of "mysql_pw.php", as most webservers are configured to deny access to any files beginning with .ht*

See also

  • The setting $wgSMTP for sending emails contains user name and password. It can be secured in the same way