MySQLDumper unter CentOS 7.x mit Apache 2.4, PHP 7.2 und PHP-FPM installieren und einrichten
Zum komfortablen Sichern und ggf. Wiederherstellen einzelner Tabellen und/oder Datenbanken unseres MariaDB-Datenbankservers greifen wir auf das Projekt MySQLDumper zurück.
Eine genaue Funktionsbeschreibung von MySQLDumper findet man auf der zugehörigen Projektseite.
Installation
PHP-Voraussetzungen
Für unseren komfortablen Weg der Sicherung unseres MariaDB-Servers muss natürlich ein funktionstüchtiger MariaDB-Server unter CentOS 7.x und entweder ein passender Apache-Webserver oder der Webserver NGiNX zur Verfügung stehen. Es werden werden von mysqldumper folgende Pakete benötigt:
- php72u (aus dem IUS Repository)
- perl-CGI
- perl-Email-Date-Format
- perl-Net-SMTP-SSL
- perl-Net-HTTPTunnel
- perl-Net-Daemon
- perl-PlRPC
- perl-DBI
- perl-MIME-Types
- perl-MIME-Lite
- perl-DBD-MySQL
- perl-Net-FTPSSL
- perl-MailTools
Zur einfachen Installation via YUM greifen wir auf die folgenden Repositories zurück:
- CentOS-Base
- IUS Repo
Die oben genannten Pakete installieren wir, sofern diese nicht schon bei der Grundinstallation unseres Apache-Webservers erfolgte, mit Hilfe von YUM
# yum install php72u perl-CGI perl-Email-Date-Format perl-Net-SMTP-SSL perl-Net-HTTPTunnel perl-Net-Daemon \ perl-PlRPC perl-DBI perl-MIME-Types perl-MIME-Lite perl-DBD-MySQL perl-Net-FTPSSL perl-MailTools -y
mysqldumper
Die aktuelle Entwicklerversion von mysqldumper mit PHP7-Unterstüzung wird vom Maintainer des Pakets auf GitHub weitergeführt.
Wir klonen uns also dieses Programmpaket. Dazu wechseln wir zuerst in das Zielverzeichis auf unserem Datenbank-/Web-Server.
# cd /srv/www/html/
Anschließend klonen wir den Programm-Zweig.
# git clone https://github.com/DSB/MySQLDumper.git
Für die Backup-Dateien, die Konfigurations-, Backup- sowie für die Logdateien legen wir uns nun noch im entsprechenden Zielverzeichnis jeweils ein Verzeichnis an., Hierzu benutzen wir folgenden Befehl.
# mkdir -p /srv/www/html/MySQLDumper/work/{config,backup,log}
Da wir den Alternativer FastCGI Process Manager einsetzen passen wir noch die Verzeichnis und Dateirechte entsprechend an, unser Webserver und die PHP-/Perl-Scripte dort auch die Daten ablegen kann.
# chown php-fpm: /srv/www/html/MySQLDumper/ -R
# chmod -R 777 /srv/www/html/msd1.24.4/work # chmod -R 755 /srv/www/html/msd1.24.4/msd_cron
grundlegende Konfiguration
Apache vHOST
Im ersten Konfigurationsbeispiel richten wir uns einen vHOST für unseren Apache-Webserver ein. Hier legen wir uns nachfolgende Konfigurationsdatei an und passen dieser entsprechend unserer Umgebung nach an.
# vim /etc/httpd/conf.d/mysqldumper.conf
- /etc/httpd/conf.d/mysqldumper.conf
# # Django : 2017-10-08 # vHost mysqldumper # # Variablen der Hostvariablen Define vhost mysqldumper Define errors_log logs/${vhost}_error.log Define access_log logs/${vhost}_access.log Define ssl_log logs/${vhost}_ssl_request.log <VirtualHost *:80> ServerAdmin webmaster@nausch.org ServerName ${vhost}.nausch.org # HTTP auf HTTPS umleiten RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} # Welche Logdateien sollen beschrieben werden SetEnvIf Remote_Addr "10\.0\.0\.117" dontlog ErrorLog ${errors_log} CustomLog ${access_log} combined env=!dontlog </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@nausch.org ServerName ${vhost}.nausch.org ServerPath / # Wer soll Zugriff auf die Webseite(n) bekommen? <Location /> Options +FollowSymLinks +Multiviews -Indexes AllowOverride None AuthType Basic AuthName "Fuer den Zugriff auf den Webserver bitte Anmeldedaten eingeben!" AuthBasicProvider ldap AuthLDAPUrl ldaps://openldap.dmz.nausch.org:636/ou=People,dc=nausch,dc=org?uid AuthLDAPBindDN cn=Technischeruser,dc=nausch,dc=org AuthLDAPBindPassword "e1n531f!D4xIi57n38103034u!" AuthLDAPBindAuthoritative on Require ldap-user admindb </Location> # Welcher Inhalt soll angezeigt bzw. auf welchen Server sollen die HTTP-Requests weitergeleitet werden? DocumentRoot "/srv/www/html/MySQLDumper/" DirectoryIndex index.php <Directory /srv/www/html/MySQLDumper/> Options none AllowOverride Limit Require all granted Options ExecCGI FollowSymLinks AddHandler cgi-script .pl </Directory> <LocationMatch "/(config.php|configs|scripts|smarty|tests|users|VIRTUAL_VACATION)/"> Require all denied </LocationMatch> # Nutzung des PHP-FPM Interpreters <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9001" #SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> # Welche Logdateien sollen beschrieben werden SetEnvIf Remote_Addr "10\.0\.0\.117" dontlog ErrorLog ${errors_log} CustomLog ${access_log} combined env=!dontlog CustomLog ${ssl_log} "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" # Absicherung der Übertragung mit Hilfe von TLS # Django : 2015-10-04 - TLS-Verschlüsselung mit Hilfe von mod_ssl SSLEngine on # Definition der anzubietenden Protokolle SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 # Definition der Cipher SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384 # Schlüsseldatei, mit der der CSR erstellt wurde SSLCertificateKeyFile /etc/pki/tls/private/wildcard_2017.nausch.org.serverkey.pem # Zertifikatsdatei, die von der CA signiert wurde SSLCertificateFile /etc/pki/tls/certs/wildcard_2017.nausch.org.certificate_161118.pem # Zertifikatsdatei des bzw. der Intermediate-Zertifikate(s) SSLCertificateChainFile /etc/pki/tls/certs/AlphaSSL_Intermediate.certificate.pem # Änderung der Cipherorder der Clients verneinen SSLHonorCipherOrder on # TLS 1.0 Kompremmierung deaktivieren (CRIME attacks) SSLCompression off # Online Certificate Status Protocol stapling zum Prüfen des Gültigkeitsstatus des Serverzertifikats. SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off # HTTP Strict Transport Security (HSTS), bei dem der Server dem Client im HTTP-Header mitteilt, # dass dieser nur noch verschlüsselt mit dem Server kommunizieren soll. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # This header enables the Cross-site scripting (XSS) filter built into most recent web browsers. # It's usually enabled by default anyway, so the role of this header is to re-enable the filter for # this particular website if it was disabled by the user. # https://www.owasp.org/index.php/List_of_useful_HTTP_headers #Header set X-XSS-Protection "1; mode=block" Header always set X-Xss-Protection "1; mode=block" # when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header, # to disable content-type sniffing on some browsers. # https://www.owasp.org/index.php/List_of_useful_HTTP_headers # currently suppoorted in IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx # http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx # 'soon' on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020 # Sofern die Datei auch den entsprechenden MIME-Typ "text/css" entspricht, soll der Browser # CSS-Dateien nur als CSS interprätieren. Header always set X-Content-Type-Options nosniff # config to don't allow the browser to render the page inside an frame or iframe # and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking # if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri # https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options ###header set X-Frame-Options SAMEORIGIN header always set X-Frame-Options DENY # hide server header (apache and php version) Header always unset Server # Only allow JavaScript from the same domain to be run. # don't allow inline JavaScript to run. Header always set X-Content-Security-Policy "allow 'self';" #Header always set Content-Security-Policy "default-src 'self'; report-uri https://nausch.report-uri.io/r/default/csp/enforce" # Add Secure and HTTP only attributes to cookies Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure # prevent Clickjacking Attack #Header always append X-Frame-Options SAMEORIGIN Header always set X-Frame-Options "SAMEORIGIN" # hkpk-stuff Header always set Public-Key-Pins "pin-sha256=\"nMiOpb6vUnjCoWCkPkDaxieG4ND8SNWzFTsQf2ZfruLno0=\"; pin-sha256=\"INhxSQ38nCS6ijaAAyo4xBabej9xeL3Xaak+GGiM2fo=\"; max-age=2592000; report-uri=\"https://nausch.report-uri.io/r/default/hpkp/enforce\"" </VirtualHost>
Haben wir die Konfigurationsdatei vervollständigt, prüfen wir diese noch auf syntaktische Fehler.
# apachectl -t
Syntax OK
Ein reload unseres Apache Webserver reicht nun aus, um den neuen vHOST verfügbar zu haben.
# systemctl reload httpd
Anwendungskonfiguration
Die Konfiguration von MySQLDumper erfolgt über eine WEB-GUI, die über folgende URL erreichbar ist: http://mysqldumper.nausch.org. Diese URL rufen wir nun mit dem Webbrowser unserer Wahl auf.
$ firefox http://mysqldumper.nausch.org
Nach Aufruf der Seite, müssen wir als erstes auswählen welche Sprache verwendet werden soll.
Haben wir die Sprache ausgewählt klicken wir auf die Schaltfläche [ Installation ]. Auf der nächsten Seite definieren wir den Datenbankuser, der Zugriff auf alle Datenbanken und Tabellen hat.
Haben wir die benötigten Parameter eingegeben, klicken wir auf die Schaltfläche [ zu MySQL verbinden ]. In der unteren Bildschirmhälfte wird uns dann angezeigt welche Datenbanken gefunden wurden.
Da die Verbindung erfolgreich hergestellt werden konnte, können wir nun die Konfigurationsdatei schreiben. Hierzu klicken wir auf die Schaltfläche [ speichern und Installation fortsetzen ].
Wir befinden uns nun auf der Hauptseite von MySQLDumper. Da wir noch keinen Verzeichnisschutz angelegt haben, wird uns der Hinweis Dringend empfohlen und blendet die Schaltfläche [ Verzeichnisschutz erstellen ] . Wir klicken daher auf diese Schaltfläche.
Haben wir alle Daten wie gewünscht eingetragen klicken wir auf die Schaltfläche [ Verzeichnisschutz erstellen ] .
Die nun eingeblendete Frage, bestätigen wir durch einen Klick auf die Schaltfläche [ OK ]. Konnte der Webserver die benötigte Datei nicht selbst schreiben, da er z.B. keine Berechtigung zum Scheiben des WebRoot-Verzeichnisses hat, wird uns folgende Seite präsentiert.
Die angezeigten Daten kopieren wir uns nun und speichern die beiden Dateien im Verzeichnis /srv/www/html/msd1.24.4/.
# vim /srv/www/html/MySQLDumper/.htaccess
- /srv/www/html/MySQLDumper/.htaccess
<IfModule mod_rewrite.c> RewriteEngine off </IfModule> AuthName "MySQLDumper" AuthType Basic AuthUserFile "/srv/www/html/MySQLDumper/.htpasswd" require valid-user
# vim /srv/www/htmlMySQLDumper/.htpasswd
- /srv/www/html/MySQLDumper/.htpasswd
admindb:{SHA}llv64xop1TodKTSFZqHb1vbAo1ogh8=
Nun klicken wir im Webfrontend auf die Schaltfläche [ Home ].
Der Paypal-Spendebutton auf der linken Seite beißt keineswegs! ;) Wer schon mal per Hand versucht hat sehr große Datenbankbackups zurück zu sichern, kann ein Lied davon singen, wie aufwändig dies sein kann.
Also nicht zaudern, sondern direkt an den Programmautor Daniel Schichtholz ein paar € spenden!