Lassen Sie das eingeschränkte rsync-Skript (rrsync) für beliebige Verzeichnisse mit autorisierten Schlüsseln zu

9

Backups automatisieren

Ich möchte eine Sicherungslösung implementieren, die Daten aus verschiedenen Verzeichnissen von einem Webserver (WebServer) auf einen lokalen Sicherungsserver (BackupServer) kopiert. Das Backup sollte unbeaufsichtigt laufen und daher möchte ich eine schlüsselbasierte Authentifizierung mit einem kennwortlosen privaten Schlüssel verwenden.

Privilegierte Rsync

Die Verzeichnisse, die ich sichern möchte, können nur von einem privilegierten Benutzer gelesen werden. Ich möchte rsync verwenden, um die Dateien zu kopieren. Ich habe einen dedizierten Backup-Benutzer erstellt und dem Benutzer erlaubt, rsync mit sudo auszuführen, ohne zur Eingabe eines Kennworts mit der visudo-Regel aufgefordert zu werden:

backup-user ALL = NOPASSWD: /usr/bin/rsync

Sicherheitsüberlegungen

Ich möchte die Sicherheit verbessern, indem ich die Befehle einschränke, die der Sicherungsbenutzer ausführen kann, indem ich der Datei authorized_keys des WebServers eine Liste von Befehlen hinzufüge. Ich habe rrsync wie in diesem Beitrag erwähnt installiert .

command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...

Rrsync erwartet ein Unterverzeichnis

Im Gegensatz zum normalen rsync erwartet der rrsync, dass ein Unterverzeichnis in der autorisierten Schlüsseldatei bereitgestellt wird, wie in diesem Blogbeitrag beschrieben

command="/usr/share/rsync/rrsync  /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa 

Diese Einschränkung funktioniert, aber ich kann nur ein bestimmtes Verzeichnis sichern, nämlich / var / backup / client1 /

Ich möchte die Verzeichnisse, die ich vom BackupServer sichern möchte, im Befehl rsync bereitstellen. Gibt es eine Möglichkeit, rrsync genau wie rsync zu verwenden, z.

rsync -avze ssh --rsync-path='sudo rrsync' [email protected]:/media/data  /backups/Server/

Zusätzliche Klarstellung

Ich bin mir bewusst, dass der Teil command = "..." in autorisierten_Hosts die ausführbaren Befehle für diesen Benutzer auf genau die angegebenen beschränkt, aber mit dem normalen rsync kann ich so etwas tun, um den Pfad anzugeben, unter dem ich sichern möchte ein Parameter:

command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"

Dies funktioniert nicht mit rrsync.

Akzeptierte Lösung

Obwohl dies technisch gesehen nicht die endgültige Antwort auf die Frage ist, halte ich die von Gilles veröffentlichte Lösung für einen sehr guten Ansatz. Ich habe einen Stammordner für alle Ansichten des tatsächlichen Verzeichnisses erstellt, das ich sichern möchte. Aus diesem Grund kann ich die Authentifizierung sicher nur auf rrsync beschränken.

One time todo

    sudo mkdir /mnt/Backups-Rsync-Readonly
    sudo chown -R rsync-backup /mnt/Backups-Rsync-Readonly
    sudo mkdir /mnt/Backups-Rsync-Readonly/VAR-WWW
    sudo mkdir /mnt/Backups-Rsync-Readonly/MySQL-Backups
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/MySQL-Backups
    sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/VAR-WWW

Ansichten erstellen (nach dem Neustart verschwunden)

    sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /var/www /mnt/Backups-Rsync-Readonly/VAR-WWW
    sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /MySQL-Dumps /mnt/Backups-Rsync-Readonly/MySQL-Backups

Fstab-Version

    /home/stefan/Scans    /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0   0

Authorized_keys

command="/usr/bin/rrsync -ro /mnt/Backups-Rsync-Readonly",from="192.168.0.10",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB
Stefan
quelle
Und die Frage ist? command=Option in authorized_keysakzeptiert nur einen Befehl, der ausgeführt wird. Das ist es.
Jakuje
Ich habe versucht, die Frage zu klären
Stefan

Antworten:

5

Eine Möglichkeit besteht darin, eine schreibgeschützte Ansicht der Verzeichnisse zu erstellen, die der dedizierte Benutzer mit bindfs sichern soll . Verwenden Sie Sudo überhaupt nicht. Machen Sie rrsyncden einzigen Befehl, der diesem Benutzer erlaubt ist. Einmaliges Setup:

mkdir /somewhere/backup-views /somewhere/backup-views/dir1 /somewhere/backup-views/dir2
chmod 700 /somewhere/backup-views
setfacl -m u:rx:backup-user /somewhere/backup-views

Setup nach jedem Start:

bindfs -o perms=a+r-w /actual/dir1 /somewhere/backup-views/dir1
bindfs -o perms=a+r-w /actual/dir2 /somewhere/backup-views/dir2

Oder entsprechende Zeilen in /etc/fstab:

/actual/dir1 /somewhere/backup-views/dir1 bindfs perms=a+r-w
/actual/dir2 /somewhere/backup-views/dir2 bindfs perms=a+r-w

Richten Sie dann den Sicherungsbenutzer für die Ausführung rsyncein /somewhere/backup-views.

Gilles 'SO - hör auf böse zu sein'
quelle