miko93
Registered User
Während mein erstes Backup läuft, ein kleines How-To: Server-Backup mittels RSYNC
1. Das Ziel
Automatisches und möglichst komplettes Backup eines dedizierten Servers auf einen anderen.
2. Die Anfordungen
- Verwendung von rsync (wg. inkrementeller Schreibmöglichkeit; unveränderte Dateien werden nicht erneut kopiert).
- Datenübertragung mittels SSH (also kein laufender rsync-Server mit Port nach aussen - obwohl es damit sehr komfortabel geht. Aber die Daten sind während der Übertragung eben nicht verschlüsselt).
- SSH-Login für den Backup als user, nicht als root (kein Root-Zugang von aussen). Root-Rechte brauchen wir aber trotzdem, da sonst manche rsync-Features (z.B. Beibehaltung der ursprünglichen Owner) nicht funktionieren.
- Automatisierbar. Also keine Login-Abfragen.
3. Der Verbindungsweg einer Sicherung
Webserver -> rsync(client) -> SSH -> Internet -> SSH -> rsyn (servermode) -> Backupserver
4. Die einfachen Sachen
- sudo und visudo müssen installiert sein (zumindest auf dem Backup-Server)
(der gediegene Debian-User prüft mit dpkg -l sudo)
- rsync muss auf beiden Maschinen installiert sein (wer hätte es gedacht...)
(der gediegene Debian-User prüft mit ... jaja, ist ja gut)
5. Die nicht-mehr-ganz-so-einfachen Sachen
Zuerst benötigen wir einen User auf dem Backupserver, über den später der SSH-Login vom Webserver aus läuft. Also
z.B.
Useradd -m -p* Backupchef
passwd backupchef
Nun bekommt dieser User root-rechte für den rsync-Befehl:
visudo, dann eintragen:
Backupchef ALL=(root)NOPASSWD:/usr/bin/rsync
Das NOPASSWD soll später eine Abfrage im automatischen Betrieb verhindern. Anders hab' ich es nicht hinbekommen.
Der Login über SSH soll mittels Keys erfolgen. Also nicht über Passworteingabe. Und da schauen wir 'mal, wie die es hier machen:
http://servers.linux.com/servers/04/11/04/0346256.shtml?tid=119&tid=47
Also, auf dem Webserver (als root eingeloggt):
ssh-keygen -t dsa -b 2048 -f ~/rsync-key (bei den Abfragen nur RETURN drücken)
Es wurden nun 2 Dateien in /root erzeugt: rsync-key, rsync-key.pub
Nun kommt der Backup-Server dran:
Das auf dem Webserver erzeugte File rsync-key.pub muss nach /home/Backupchef (oder wie der User eben hiess) auf dem Backup-Server kopiert werden. Ich habe dort einfach mit vim eine neue Datei erzeugt, und den Inhalt 'reinkopiert
Dann cd /home/Backupchef, und wir klauen wir die Befehle aus dem o.g. Link:
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/rsync-key.pub ~/.ssh/
cd ~/.ssh/
touch authorized_keys
chmod 600 authorized_keys
cat rsync-key.pub >> authorized_keys
Kleines Sicherheits-"Schmankerl":
vim /home/Backupchef/.ssh/authorized_keys
Ändern: "ssh-dss AAAAB3NzaC..." (das AAAAB3NzaC...ist der Key, der sieht bei Euch wohl dann anders aus) in
from="xxx.xx.xxx.xxx" ssh-dss AAAAB3NzaC...
Die IP ist die Adresse des Webservers, der sich später in den Backupserver einloggt. Damit kann sich nur dieser hier über die Keys einwählen. Die anderen müssen den Passwort-Login verwenden (und den kann man ggfs. auch noch abschalten...)
6. Das wilde Backup-Spript
Auf dem Webserver verwende ich ein Script wie das hier. Wie man sieht, werden die Verzeichnisse /proc /tmp /lost+found und /dev ausgespart. Ausserdem wird vor dem rsync'en noch ein mysqldump ausgeführt (hier evtl. noch den Pfad hinzufügen). User "Backupchef" loggt sich ein, und führt den eigentlichen rsync-Befehl mit sudo aus.
Und das sollte es gewesen sein.
...und nächste Woche: "Wie bekomme ich die Daten vom Backup-Server wieder 'runter ?"
1. Das Ziel
Automatisches und möglichst komplettes Backup eines dedizierten Servers auf einen anderen.
2. Die Anfordungen
- Verwendung von rsync (wg. inkrementeller Schreibmöglichkeit; unveränderte Dateien werden nicht erneut kopiert).
- Datenübertragung mittels SSH (also kein laufender rsync-Server mit Port nach aussen - obwohl es damit sehr komfortabel geht. Aber die Daten sind während der Übertragung eben nicht verschlüsselt).
- SSH-Login für den Backup als user, nicht als root (kein Root-Zugang von aussen). Root-Rechte brauchen wir aber trotzdem, da sonst manche rsync-Features (z.B. Beibehaltung der ursprünglichen Owner) nicht funktionieren.
- Automatisierbar. Also keine Login-Abfragen.
3. Der Verbindungsweg einer Sicherung
Webserver -> rsync(client) -> SSH -> Internet -> SSH -> rsyn (servermode) -> Backupserver
4. Die einfachen Sachen
- sudo und visudo müssen installiert sein (zumindest auf dem Backup-Server)
(der gediegene Debian-User prüft mit dpkg -l sudo)
- rsync muss auf beiden Maschinen installiert sein (wer hätte es gedacht...)
(der gediegene Debian-User prüft mit ... jaja, ist ja gut)
5. Die nicht-mehr-ganz-so-einfachen Sachen
Zuerst benötigen wir einen User auf dem Backupserver, über den später der SSH-Login vom Webserver aus läuft. Also
z.B.
Useradd -m -p* Backupchef
passwd backupchef
Nun bekommt dieser User root-rechte für den rsync-Befehl:
visudo, dann eintragen:
Backupchef ALL=(root)NOPASSWD:/usr/bin/rsync
Das NOPASSWD soll später eine Abfrage im automatischen Betrieb verhindern. Anders hab' ich es nicht hinbekommen.
Der Login über SSH soll mittels Keys erfolgen. Also nicht über Passworteingabe. Und da schauen wir 'mal, wie die es hier machen:
http://servers.linux.com/servers/04/11/04/0346256.shtml?tid=119&tid=47
Also, auf dem Webserver (als root eingeloggt):
ssh-keygen -t dsa -b 2048 -f ~/rsync-key (bei den Abfragen nur RETURN drücken)
Es wurden nun 2 Dateien in /root erzeugt: rsync-key, rsync-key.pub
Nun kommt der Backup-Server dran:
Das auf dem Webserver erzeugte File rsync-key.pub muss nach /home/Backupchef (oder wie der User eben hiess) auf dem Backup-Server kopiert werden. Ich habe dort einfach mit vim eine neue Datei erzeugt, und den Inhalt 'reinkopiert
Dann cd /home/Backupchef, und wir klauen wir die Befehle aus dem o.g. Link:
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/rsync-key.pub ~/.ssh/
cd ~/.ssh/
touch authorized_keys
chmod 600 authorized_keys
cat rsync-key.pub >> authorized_keys
Kleines Sicherheits-"Schmankerl":
vim /home/Backupchef/.ssh/authorized_keys
Ändern: "ssh-dss AAAAB3NzaC..." (das AAAAB3NzaC...ist der Key, der sieht bei Euch wohl dann anders aus) in
from="xxx.xx.xxx.xxx" ssh-dss AAAAB3NzaC...
Die IP ist die Adresse des Webservers, der sich später in den Backupserver einloggt. Damit kann sich nur dieser hier über die Keys einwählen. Die anderen müssen den Passwort-Login verwenden (und den kann man ggfs. auch noch abschalten...)
6. Das wilde Backup-Spript
Auf dem Webserver verwende ich ein Script wie das hier. Wie man sieht, werden die Verzeichnisse /proc /tmp /lost+found und /dev ausgespart. Ausserdem wird vor dem rsync'en noch ein mysqldump ausgeführt (hier evtl. noch den Pfad hinzufügen). User "Backupchef" loggt sich ein, und führt den eigentlichen rsync-Befehl mit sudo aus.
Code:
# miko 19.12.2004
# Backup Webserver nach Backupserver
#!/bin/sh
echo "-----------------------------------"
echo "/usr/local/rsync_backup.sh started."
BACKUPDIR=/
TARGETDIR=/home/Backupchef/backup/
E1=/proc
E2=/tmp
E3=/lost+found
E4=/dev
BACKUPSERVER=xxx.xxx.xxx.xx
echo "Creating mysql-dump: /usr/local/mysql_dump.sql.gz..."
PASSWD=mysqlrootpasswort
mysqldump -uroot -p$PASSWD --all-databases | gzip > /usr/local/mysql_dump.sql.gz
echo "...ready"
echo "Starting rsync to remote machine..."
rsync -a -z -e "ssh -i /root/rsync-key" --rsync-path='sudo /usr/bin/rsync' --bwlimit=200 --stats --delete
--exclude=$E1 --exclude=$E2 --exclude=$E3 --exclude=$E4 $BACKUPDIR Backupchef@$BACKUPSERVER:$TARGETDIR
echo "...ready"
echo "/usr/local/rsync_backup.sh finished."
echo "-----------------------------------"
Und das sollte es gewesen sein.
...und nächste Woche: "Wie bekomme ich die Daten vom Backup-Server wieder 'runter ?"
Last edited by a moderator: