QNAP – SSH-Key und Cronjob einrichten

Ich wollte mal wieder ein wenig mehr Sicherheit in mein System bringen – also die Daten meiner Seite hier auch ab und an mal sichern…
Gesagt, getan – also machte ich mich auf die Suche nach dem ein oder anderen Backup-Plugin für WordPress, um immer wieder festzustellen, dass die Plugins zwar alle gut funktionieren, allerdings (leider) nicht meine Idee unterstützen – und wenn, dann nur im Rahmen eines kostenpflichtigen Plugins.

Meine Idee war/ist, dass ich einmal die aktuelle Seite mit allem drum und dran sichere. Ok, das ist die leichteste Übung, denn das können fast alle Plugins! Der nächste Schritt wäre dann, diese Sicherung an einem anderen Ort zu speichern – hier kommen aber die meisten Plugins an ihre (kostenfreien) Grenzen. Zumal ich da ja noch einen Sonderwunsch habe – nicht das sichern irgendwo in der Cloud (ACHTUNG: Buzzword 🙂 ), sondern das speichern des Backups auf meinem QNAP – zu Hause bei mir! Dabei ergeben sich auch zusätzliche Überlegungen – wie zum Beispiel das Hinterlegen der Logindaten zu meinem Heim-NAS auf dem Webserver? Nein, das gefällt mir gar nicht – ich hätte gerne, dass mein QNAP die Daten selbst beim Webserver abholt, das ist mir etwas angenehmer…

Nun – Schritt 1 ist also, die Daten der WordPress-Installation auf einem Verzeichnis des Webservers zu sichern. Hier am einfachsten in einer einzigen (gepackten) Datei. Das können fast alle verfügbaren Plugins… also sagen wir mal FERTIG !

Schritt 2: QNAP so konfigurieren, dass es die Daten auch automatisch abholt.

Ich verbinde mich also mittels SSH (oder Telnet) mit meinem QNAP, melde mich mit meiner Kennung an und versuche zuerst einmal händisch die Daten vom Webserver zu kopieren.

scp USERNAME@WEBSERVER:/absoluter/pfad/zumBackup/* /share/QNAPPFAD/

SCP stellt die Verbindung her und will dann mein Passwort für USERNAME@WEBSERVER eingegeben haben. Das klappt so auch ganz gut, ist aber natürlich für eine automatische Variante nicht so geeignet. Beim prüfen der Parameter stelle ich fest, dass es keine Option gibt, das Passwort mit anzugeben. Es gibt andere Tools, oder Scripte, die das können, aber die ersteren sind auf dem QNAP nicht verfügbar und das zweitere bleibt nur die Notlösung. Also versuchen wir den anderen Weg – wir erstellen einen SSH-Key, um eine Anmeldung ohne Passwort zu ermöglichen.

Also erstellen wir auf dem QNAP einen SSH-Key, das geht (sollte gehen) so:

ssh-keygen -t rsa -C "Server Kommentar Feld"

Man kann auch noch mittels -t rsa -b ANZAHLBYTES die Schlüssellänge vorgeben – Bsp: 4096 ! Das dauert aber ein wenig länger bei der Erzeugung – ist dafür aber auch sicherer!

Leider kam es beim Speichern der entsprechenden Dateien bei meinem QNAP zu einer Fehlermeldung. Mein Anmeldename bzw. sein entsprechender HOME-Pfad war nicht vorhanden. Ein Blick in /etc/passwd zeigt, den Nutzernamen bzw. dessen Homeverzeichnis – das war bei mir nicht angelegt. Das kann ich allerdings auch selbst erledigen.

mkdir /Users/QNAP_USERNAME

und

mkdir /Users/QNAP_USERNAME/.ssh

Dann nocheinmal die Keys mit obigem Kommando erzeugen und dieses Mal sollte das Speichern der KEY-Dateien auch funktionieren!

Im Verzeichnis /Users/QNAP_USERNAME/.ssh/ sollten jetzt drei Dateien angelegt worden sein:

known_hosts
id_rsa
id_rsa.pub

Um eine Anmeldung ohne Passwort auf dem Webserver zu ermöglichen, muss ich nun dem Webserver noch mitteilen, dass er den Nutzer mit dem öffentlichen Schlüssel (id_rsa.pub) hereinlassen soll. Das funktioniert natürlich nur, wenn der Webserver auch SSH-Verbindungen zulässt und das ganze passend konfiguriert ist. Also braucht der Webserver die Datei id_rsa.pub bzw deren Inhalt. Man kann diesen nun per Copy/Paste einfügen oder man nutzt wieder scp:

scp /Users/USERNAME/id_rsa.pub USERNAME@WEBSERVER:/PFAD/ZUM/NUTZER/.ssh

Sollte das Verzeichnis auf dem Server nicht vorhanden sein, müssen wir dieses noch anlegen – wichtig bei diesem Verzeichnis und der Datei sind nachher noch die Berechtigungen – der SSH-Dienst ist da etwas „zickig“ 😉

Jetzt liegt der öffentliche Schlüssel des QNAP auf dem Webserver schon im richtigen Verzeichnis – nun muss der Inhalt noch in die Datei authorized_keys eingefügt werden. Um sicherzugehen, dass wir nichts löschen, fügen wir unseren QNAP-Key ans Ende der Datei an:

(Auf dem Webserver im Verzeichnis des Nutzers, den wir zur Anmeldung nutzen wollen)

cd /home/NUTZERNAME_WEBSERVER/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
cd ..
chmod 700 .ssh

Die Datei id_rsa.pub kann auch wieder entfernt werden:

rm .ssh/id_rsa.pub

Mein Webserver läuft übrigens mit einem Debian-System – also bei anderen Systemen kann die Datei authorized_keys auch an anderen Orten oder Pfaden liegen – das findet man aber ohne Probleme im Netz!

Bei meiner Serverkonfiguration waren keine Änderungen des SSH-Dienstes notwendig – man kann das aber in der Konfigurationsdatei

/etc/ssh/sshd_config

überprüfen – hier muss der Punkt „PubKeyAuthentication yes“ einkommentiert sein – also das „#“ zu Beginn der Zeile ggf. entfernen !

/etc/init.d/ssh restart

Startet den SSH-Server neu, damit die Änderungen (das auskommentieren) auch übernommen werden. Nun sollte folgender Versuch vom QNAP aus auch ohne Passwort funktionieren:

scp -i /Users/QNAPUSERNAME/.ssh/id_rsa NUTZER@WEBSERVER:/PFAD/ZUM/BACKUP/* /share/MEINQNAPBACKUPPFAD/

Ich hatte zum Testen ein paar kleine Dateien ins Verzeichnis des Webservers gelegt – so konnte ich auch prüfen, ob etwas auf meinem QNAP landet 😉

Jetzt will ich das ganze ja auch noch automatisch durchführen – also lege ich mir eine Script-Datei an, die obigen Befehl ausführt:

#!/bin/sh
/usr/bin/scp -i /Users/QNAPUSERNAME/.ssh/id_rsa NUTZER@WEBSERVER:/PFAD/ZUM/BACKUP/* /share/MEINQNAPBACKUPPFAD/

Am Ende der Datei noch eine Leerzeile – das habe ich aus einem QNAP-Forumsbeitrag – kostet ja nicht viel 😉

Ich habe das mit dem Texteditor vi in meinem Scriptverzeichnis auf meinem QNAP angelegt. Die Scriptdatei muss noch mittels

chmod +x /PFAD/ZUR/DATEI/copyfromwebserver.sh

ausführbar gemacht werden.

Nun folgt im letzten Schritt noch das automatische ausführen des Scriptes mittels eines CronJobs. Hier muss ich mir noch überlegen wie oft ich dieses Script ausführen möchte und natürlich auch wann – also zu welchen Zeiten. Das Ganze muss dann in das Format eines CronJobs gebracht werden:

* * * * * *
| | | | | | 
| | | | | +-- Year (range: 1900-3000)
| | | | +---- Day of the Week (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)

Nehmen wir also jeden Montag um 7 Uhr dann ergibt das folgenden Eintrag:

0 7 * * 1 * /bin/sh /PFAD/ZUM/SCRIPT/copyfromwebserver.sh

Diesen Eintrag füge ich nun ans Ende der bestehenden CronJobs an – das geht nicht wie in den üblichen Lunixen mittels cronteb -e. Aber es ist dennoch einfach:

echo "0 7 * * 1 * /bin/sh /PFAD/ZUM/SCRIPT/copyfromwebserver.sh" >> /etc/config/crontab

Nun müssen wir noch den Dienst neu starten, damit unser QNAP auch unser Script ausführt:

crontab /etc/config/crontab
/etc/init.d/crond.sh restart

Nun noch auf den nächsten Montag warten und überprüfen, ob die Dateien vom Webserver auch auf dem QNAP landen 😉

 

Dieser Beitrag wurde unter Technik abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.