Der Versuch, chroot'd rsync einzurichten


10

Ich versuche, einen Sicherungsserver einzurichten. Ich mag chroot jeden Benutzer (Client) zu seinem Home - Verzeichnis, und nur erlauben , es zu benutzen SFTP und rsync .

Ich stellte schnell fest, dass ich nicht der einzige war, der versuchte, so etwas zu tun, und fand diesen Leitfaden und folgte ihm. Jetzt habe ich nur noch Benutzer mit SFTP.

Dann fand ich heraus, dass rsync ssh benötigt, um sich auf dem anderen Computer zu erzeugen, und dass sftp nicht ausreicht. Jedem Benutzer ein SSH-Login zu geben, wollte ich zunächst vermeiden.

Kann sich jemand mögliche Lösungen vorstellen?

Vielen Dank,

Kennzeichen


Schauen Sie sich diese Antwort an, die ich einige Zeit geschrieben habe. Gehen Sie zu serverfault.com/questions/255084/…
user9517

Antworten:


11

Eine SFTP-Lösung würde auch ein SSH-Login für alle erfordern, sodass Sie hier nichts wirklich verloren haben. Das Gewähren des SSH-Zugriffs bedeutet nicht unbedingt einen vollständigen Shell-Zugriff. Dies zeigt beispielsweise, wie die SSH- authorized_keysDatei verwendet wird, um eine Sicherung über rsync zu ermöglichen, während die verfügbaren Befehle nur auf den rsync-Empfänger beschränkt werden.

Wenn Sie sich für eine schlüsselbasierte Authentifizierung anstelle einer Kennwortauthentifizierung entscheiden (was Sie sollten), können Sie alles unter einem Benutzerkonto ausführen, anstatt mehrere Konten zu benötigen. Sie würden Schlüssel verwenden, um entfernte Benutzer zu identifizieren und den rsync-Empfänger auf ein bestimmtes Verzeichnis zu lenken.

So etwas in Ihrer authorized_keysDatei:

command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1
command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2

Jemand, der den user1privaten Schlüssel verwendet, wird in sichern /tmp/user1, und jemand, der den user2privaten Schlüssel verwendet, wird in sichern /tmp/user2. Und so weiter...


Link ist weg 404.
Glückydonald

Ich habe den Link aktualisiert.
Larsks

6

Führen Sie wie gewohnt rsyncvom Client zum Remote-Server aus, fügen Sie jedoch einen zusätzlichen ausführlichen Schalter hinzu : SSH -v, und suchen Sie nach Sending command. Sie sehen den genauen Befehl, den der Client an den Remote-Server sendet:

rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command"

In meinem Fall war es

rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path

Fügen Sie dies als command="..."Remote-Server- /home/USER/.ssh/authorized_keysDatei hinzu, wie @larsks erwähnt. Fügen Sie bei Bedarf zusätzliche Sicherheitseinstellungen hinzu:

no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

Alle zusammen:

command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

(Entnommen aus einem sehr guten Tutorial http://en.positon.org/post/Rsync-command-restriction-over-SSH )


Gute 1. Antwort.
Slm

2

Sie müssen eine Form von Shell-Zugriff bereitstellen, um rsync verwenden zu können, es sei denn, Sie stellen eine direkte Verbindung zum rsync-Server her. Der Standardport ist 873 (TCP).

Von der rysnc-Manpage :

Es gibt zwei verschiedene Möglichkeiten für rsync, ein Remote-System zu kontaktieren: Verwenden eines Remote-Shell-Programms als Transportmittel (z. B. ssh oder rsh) oder direktes Kontaktieren eines rsync-Daemons über TCP. Der Remote-Shell-Transport wird immer dann verwendet, wenn der Quell- oder Zielpfad nach einer Hostspezifikation ein einzelnes Doppelpunkttrennzeichen (:) enthält. Die direkte Kontaktaufnahme mit einem rsync-Daemon erfolgt, wenn der Quell- oder Zielpfad nach einer Hostspezifikation ein Doppelpunkt-Doppeltrennzeichen (: :) enthält, ODER wenn eine rsync: // -URL angegeben wird (siehe auch die lqUSING RSYNC-DAEMON-FUNKTIONEN ÜBER EINE REMOTE-SHELL) Abschnitt CONNECTIONrq für eine Ausnahme von dieser letzteren Regel).

Beachten Sie die folgende Anleitung, um einen eingeschränkten Shell-Zugriff zu ermöglichen . (Hinweis: Der ursprüngliche Link ist tot.) Zusammenfassung:

Dieses Setup kombiniert die besten Funktionen von rsync, SSH und chroot. Rsync bietet Flexibilität und Effizienz bei der Dateiübertragung, SSH schützt die übertragenen Daten und chroot schützt die Daten auf dem Server vor unbefugtem Zugriff. Der Dummysh beschränkt nur den Zugriff auf rsync.

Während der rsync-Server chroot implementiert, fehlt ihm der häufig erforderliche SSH-Schutz. Außerdem stellt das Öffnen eines zusätzlichen rsync-Server-Ports ein Sicherheitsrisiko dar und ist manchmal weder technisch noch politisch möglich. Sftp und scp verfügen nicht über die Flexibilität und Effizienz von rsync, insbesondere wenn es sich um einen Verzeichnisbaum handelt, z. B. eine Website.

Oder nehmen Sie einen Blick auf mit rssh (es gibt eine Anleitung zur Einrichtung rssh hier ):

rssh ist eine eingeschränkte Shell zur Verwendung mit OpenSSH, die nur scp und / oder sftp zulässt. Es enthält jetzt auch Unterstützung für rdist, rsync und cvs. Wenn Sie beispielsweise einen Server haben, von dem Benutzer nur Dateien über scp kopieren dürfen, ohne Shell-Zugriff zu gewähren, können Sie dazu rssh verwenden.


1
Aktuelle Nachrichten sind, dass RSSH nicht gewartet wird und einige seltsame Sicherheitslücken aufweist. Überprüfen Sie den aktuellen Status, bevor Sie in ihn investieren.
Chutz

2
Sie können das Perl-Skript rrsyncanstelle von rssh verwenden, das im offiziellen rsync-Paket enthalten ist. Siehe derek.simkowiak.net/backing-up-multiple-servers-with-rsnapshot
Unhammer

0

Sie können eine Shell schreiben, die rsync umschließt.

Schauen Sie sich die allgemeine Idee hier an: https://sixohthree.com/1458/locking-down-rsync-using-ssh

In Ihrer Wrapping-Shell können Sie tun, was Sie wollen, und den Benutzer möglicherweise herausfordern.

In meinem Fall musste ich das virtuelle Konto mit demselben * nix-Benutzer aktivieren. Ich schaffe es mit dieser Art von Shell und vielen Zeilen in der Datei "authorized_keys". Ich habe den Benutzer nicht chrooted, aber ich habe dem Befehl rsync server eine Benutzerordnerebene hinzugefügt.

Betrachten Sie den Prozessbenutzer mit dem SSH-Schlüssel anders



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.