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' backupuser@111.222.33.44:/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
command=
Option inauthorized_keys
akzeptiert nur einen Befehl, der ausgeführt wird. Das ist es.