Website-Icon .: blog cscholz.io :.

Linux: rsync auf nur ein Verzeichnis

Ein Linux-System, das direkt über das Internet erreichbar ist, sollte entsprechend abgesichert werden. Wie die Absicherung per SSH-Schlüssel und rbash funktioniert wurde hier bereits erläutert.

Diese Konfiguration macht es jedoch schwierig, ein Backup von einem so gesicherten Remote-System zu ziehen. Um dies dennoch zu ermöglichen, gibt es eine entsprechede rsync-Lösung, die ich hier vorstellen möchte.
Das Zielszenario ist, dass ein dedizierter Benutzer von System L(ocal) per rsync von Server R(emote) nur ein ein dediziertes Verzeichnis (/backups) sichern kann.

System R

Neuen Benutzer anlegen

Zuest wird ein neue Benutzer dafür angelegt.

adduser backupuser

rrsync installieren

rrsync ist ein Script, das die Entwickler des rsync Paketes für genau das hier beschriebene Szenario mitliefern.
rrsync wird nicht standardmäßig installiert, daher müssen wir dies noch tun.

apt-get install rsync
mkdir /home/backupuser/bin
cp /usr/share/doc/rsync/scripts/rrsync.gz /home/backupuser/bin
chmod +x /home/backupuser/bin/rrsync

SSH Schlüssel hinterlegen

Nun einen SSH Schlüssel wie hier beschrieben OHNE Kennwort erstellt. Der öffentliche SSH Schlüssel wird anschließend in der Datei authorized_keys gespeichert. Jedoch nicht einfach so, sondern es wird ein Befehl vorangestellt, der den rsync Zugang auf das gewünschte Verzeichniss limitiert. Der Befehl als auch der öffentliche Teil des gerade erstellen Schlüssels werden in einer Zeile eingefügt.

mkdir /home/backupuser/.ssh

vim /home/backupuser/.ssh/authorized_keys
command="$HOME/bin/rrsync -ro /backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAA...L7Xi0= backupuser

SSHD Config anpassen

Wurde die Anmeldung per SSH auf einen bestimmten Benutzerkontenkreis limitiert, so muss der neue Benutzer dort noch freigeschaltet werden. Ist AllowUsers auskommentiert, kann dieser Schritt übersprungen werden.

vim /etc/ssh/sshd_config
AllowUsers ... backupuser

 

/etc/init.d/ssh restart

System L

Auf dem lokalen System wird nun der SSH Schlüssel für die Anmeldung des Backupusers hinterlegt. In welcher Datei das erfolgen muss, steht in der Datei /root/.ssh/config.

Host *
IdentityFile ~/.ssh/ssh-rsa_key

In diesem Beispiel ist das die Datei /root/.ssh/ssh-rsa_key.

Sobald der Schlüssel hinterlegt wurde, kann das Backup per rsync kopiert werden. Der Pfad ist dabei relativ zum limitierten Verzeichnis anzugeben.
Da der Zugriff auf /backups( eingeschränkt wurde, ist das Root Verzeichnis in diesem Fall under /backups/ Verzeichnis.

rsync -e "ssh -i $HOME/.ssh/ssh-rsa_key" -av backupuser@System-R.com:/ /tmp/
receiving incremental file list
./
2016.11.28_...

Versuch man sich per SSH mit diesem User dennoch anzumelden, wird die Sitzung terminiert.

PTY allocation request failed on channel 0
/home/backupuser/bin/rrsync: Not invoked via sshd
Use 'command="/home/backupuser/bin/rrsync [-ro] SUBDIR"'
        in front of lines in /home/backupuser/.ssh/authorized_keys
Connection to System-R.com closed.

 

Die mobile Version verlassen