command restriction - authorized_keys

tyan_trinity

New Member
Hallo zusammen!

Erstmal Gratulation zu diesem hervorragenden Forum, in dem man auch als Einsteiger verständliche Informationen findet! Sehr gelungen!

Nun zu meiner Problematik: Ich bin gerade dabei eine Backup-Lösung für meinen ersten Root-Server zu schaffen. Dafür habe ich mir zu Hause auf einem Rechner SUSE Linux 9.3 installiert. Auf meinem Server läuft derzeit auch SUSE Linux 9.3 mit SA24. Um meine Backups zu automatisieren habe ich mir erstmal einige Artikel durchgelesen - die ich jedem, der sich das erste mal damit beschäftigt nur wärmstens empfehlen kann:
Snapshot-Backups mit Rsync
Backups mit Rsync
Die Links habe ich natürlich auch aus diesem Forum hier :). Ausserdem habe ich mir das enstprechende Buch von Wolfgang Barth, "Datensicherung unter Linux" gekauft und den Rsync-Teil gelesen.

In dem Artikel von Heinlein gibt es fertige Skripte, die ich allerdings nicht verwenden möchte, weil ich gerne verstehen möchte, was ich da mache. Ich fange also ganz rudimentär an:

Zunächst habe ich mir mit ssh-keygen eine private und eine öffentliche Schlüsseldatei gebastelt. Die öffentliche habe ich auf meinen Server geladen und in authorized-keys eingefügt.

Dann habe ich mich mit dem SSH-Agent beschäftigt und seine Ausgaben in eine agent.sh-Datei gespeichert. Jetzt habe ich ein kleines Skript:

Code:
. agent.sh
rsync --archive --compress --delete --exclude "proc/" --exclude "sys/" -e 'ssh -i /root/.ssh/id_rsa' root@192.168.0.1:../ ../192.168.0.2/

Wenn ich dieses Skript nun per Cronjob aufrufe funktioniert es wunderbar. Nun weiß ich, das ich mit der Strategie das alles per root zu machen, schon ein paar Sicherheitsaspekte außer acht lasse. Bis ich aber dazu in der Lage bin einen Backup-User anzulegen, möchte ich gerne den Zugriff mit dem Key auf das im Skript beschriebene Kommando beschränken. Und genau hier liegt mein Problem. Ich krieg es einfach nicht auf die Reihe... ich habe nun schon stundenlang nach der korrekten Syntax gesucht, habe diverse Varianten ausprobiert, schaffe es aber einfach nicht. Überall steht das man das identische Rsync-command in der authorized-keys hinterlegen muss und zwar genau vor dem key, der key muss danach in der gleichen Zeile stehen... es klappt nicht. Deshalb nun meine Frage an Euch: was mache ich falsch? Für oben genanntes Kommando müsste in meiner authorized-keys imho doch einfach folgendes stehen:

Code:
command="rsync --archive --compress --delete --exclude "proc/" --exclude "sys/" -e 'ssh -i /root/.ssh/id_rsa' root@192.168.0.1:../ ../192.168.0.2/" ssh-rsa AAAAAAAAAAundderRestdesKeys= root@linux

Wenn ich das so mache bekomme ich folgende Fehlermeldung vom Cronjob:
Permission denied (publickey,keyboard-interactive).
rsync: connection unexpectedly closed (0 Bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(359)

Und, wie gesagt, führe ich den Cronjob ohne die Command-Restriction in authorized_keys aus, funktioniert das alles einwandfrei... was mache ich falsch?? :confused:
 
Überall steht das man das identische Rsync-command in der authorized-keys hinterlegen muss

Ich kann mir nicht so recht vorstellen, dass das so gemeint ist. Durch die Restriktion kann ja nur genau der Befehl ausgeführt werden, der spezifiziert wurde. In diesem Fall muss dort also der Befehl stehen, den rsync via ssh ausführen will, und das ist nicht der selbe Befehl, der auch auf der startenden Seite läuft. Als Mindestes wird in Deinem Beispiel die Option "--server" benötigt....

Starte das Script nochmals ohne eingestellte Restriktionen und gib in einem anderen (ausreichend großen Fenster) auf dem Server den Befehl "ps -ef" ein, während rsync läuft -- dann siehst Du, mit welchen Optionen rsync auf dem Server aufgerufen wird. Die identischen rsync Optionen müssen dann auch bei den Restriktionen angegeben werden. Erst wenn man das "identisch" in dieser Weise interpretiert, gibt das ganze einen Sinn.

Viele Grüße,
LinuxAdmin
 
...die Du uns natürlich nicht vorenthalten möchtest, damit der nächste sich das Ausprobieren evtl. sparen kann :)
 
ja, genau, selbstverständlich :o

ich habe, wie von Linux Admin empfohlen, den rsync-Befehl auf meinem Backup-Rechner ausgeführt und dann am zu sichernden Server ps -ef (gibt eine Liste der laufenden Prozesse aus, wie ich mittlerweile gelernt habe) ausgeführt und da stand dann irgendwo: rsync --server --sender -logDtprz . ../ das hab ich dann so in die authorized-keys eingetragen:

command="rsync --server --sender -logDtprz . ../" ssh-rsa AAAA.............

und, wie gesagt, es funktioniert, Linux(-Admin) sei dank!
 
Back
Top