Server Support Forum
Anzeige:


Zurück   Server Support Forum > FAQs, Howto's & Anleitungen > FAQs & Anleitungen


Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1  
Alt 19.12.2004, 01:23
Benutzerbild von miko93
Registered User
 
Registriert seit: 05.2004
Ort: Regensburg
Beiträge: 312
[HowTo] Server-Backup mit rsync

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/...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 ?"
__________________
www.mikoweb.de | Netdirekt SP733-150 (Sarge)

Geändert von miko93 (19.12.2004 um 01:27 Uhr)
Mit Zitat antworten

  #2  
Alt 25.05.2009, 12:37
Registered User
 
Registriert seit: 02.2009
Beiträge: 11

Ich hab einen Verbesserungsvorschlag. Man möchte das Skript als Cronjob starten lassen. Ich hab es nicht hinbekommen das das skript ohne passwordeingabe startet. Daher meine Vorgehensweise:

Am Source-Server mit dem Backupuser anmelden, dann folgende Befehle ausführen:
Code:
ssh-keygen -t rsa
Alles ohne Eingaben bestätigen.
Jetzt benutzen wir SSH um auf dem Zielserver das .ssh Verzeichnis im Homeverzeichnis des Backupusers anzulegen.

Code:
ssh Backupuser@Zielserver mkdir -p .ssh
Hier müssen wir noch das Kennwort des Backupusers eingeben.

Als nächstes schreiben wir den Schlüssel in die authorized_keys, diesmal auf wieder per ssh

Code:
cat .ssh/id_rsa.pub | ssh Backupuser@Zielserver 'cat >> .ssh/authorized_keys'
auch hier möchte SSH noch ein Kennwort, was auch nicht verwunderlich ist, denn erst jetzt hat er ja den Schlüssel.
der folgende Befehl funktioniert aber jetzt ohne Kennwort
Code:
ssh Backupuser@Zielserver hostname

Ansonsten musste ich noch in der rsync-Zeile des Skripts eine Änderung durchführen

Code:
rsync -avze ssh --rsync-path='sudo /usr/bin/rsync' --bwlimit=200 --stats --delete --exclude=$E1 --exclude=$E2 --exclude=$E3 --exclude=$E4  $BACKUPDIR -r USER@$BACKUPSERVER:$TARGETDIR
Ansonsten hat das nicht mit dem authorized_key funktioniert. Auch musste ich nach dem $Backupdir noch das "-r" ranmachen da er ansonsten nicht die Unterverzeichnisse mitgesichert hätte


Wichtig ist noch zu sagen, die Zeile
Code:
Backupchef ALL=(root)NOPASSWD:/usr/bin/rsync
muss auf beiden Servern eingetragen werden.
Mit Zitat antworten
  #3  
Alt 26.09.2009, 08:00
Benutzerbild von michael-08
Registered User
 
Registriert seit: 06.2009
Beiträge: 555

Hallo, also das mit dem rsync ist eine nette Sache und teilweise kostet ein rootDS der genügend GB hat nicht arg soviel mehr als ein FTP!

Aber die Variante vom Backupserver aus zu connecten ist nochmal sicherer!

Einen Key auf dem Hauptserver anlegen, den public key zu den authorized Keys hinzufügen und den private key auf den Backupserver legen um sich mit dem rsync Benutzer ohne Passwort zu connecten! Die Backups sind zumindest dann mal sicher, falls der Hauptrechner in fremde Hände gerät!

Wenn jemand den Backupserver "hackt" und sich so Zutritt zum Hauptserver verschaffen kann ist dann wohl die umgekehrte Problematik! Hier würde es sich lohnen Beispielsweise auf dem Hauptserver ein Script auszuführen, dass einen Port öffnet wenn die rsync Prozedur beginnen soll und später per Script die Ports wieder schliesst! Wohl mit einem 2. SSH Server, sodass im Falle des Falles der Hauptserver mit einem anderen Port nicht so leicht zu erraten ist (Eventuell könnte man sogar die IP des Backupservers für den "offiziellen" port sperren, sodass man sich nur zu der Zeit während das Script den zweiten SSH Server aufmacht connecten kann)

Ist leider nicht mein erlerntes Gebiet, aber vielleicht gibt es noch eine bessere Alternative! Die Variante aber vom Backupserver aus zu connecten schlug mir einer aus #rsync vor der mit dieser Materie gut bewandert war

Geändert von michael-08 (26.09.2009 um 08:04 Uhr)
Mit Zitat antworten
  #4  
Alt 26.09.2009, 10:31
Benutzerbild von Firewire2002
Registered User
 
Registriert seit: 02.2006
Ort: Hürth
Beiträge: 4.350

Zitat:
Zitat von michael-08 Beitrag anzeigen
Ist leider nicht mein erlerntes Gebiet, aber vielleicht gibt es noch eine bessere Alternative!
Dann konzentriere dich doch bitte auf die "Gebiete", die du erlernt hast.

Sorry für Offtopic.
Mit Zitat antworten
  #5  
Alt 26.09.2009, 13:53
Benutzerbild von wstuermer
Support Guru
 
Registriert seit: 04.2007
Ort: Hürth
Alter: 34
Beiträge: 2.912
wstuermer eine Nachricht über ICQ schicken

Prinzipiell schonmal ein guter Ansatz. Aber warum nicht die Daten schon vor dem eigentlichen Transfer verschlüsseln? Stichwort: gpg
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
rsync für Backup auf andere Maschine tim Security 11 23.09.2006 22:00
Strato Server jetzt mit Backup Space Thorsten Hosting & Provider 2 04.02.2004 11:12
VirtualHost wurmi Virtuelle Server 7 01.10.2003 22:20





Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Content Relevant URLs by vBSEO ©2011, Crawlability, Inc.