Forum: PC Hard- und Software rsync, ssh und Zugriffsrechte


von Karlo (Gast)


Lesenswert?

Hallo,

ich habe einen (bzw. mehrere) Raspberry (mit Raspbian) daheim laufen 
sowie einen Hauptrechner mit einem Linux.
Am Hauptrechner hängt eine externe Backup-Platte. Darauf soll auch die 
root-Partition der Raspberrys gesichert werden.
Dazu verwende ich rsync via ssh, später dann mal rsnapshot für 
inkrementelle Backups.

Grundsätzlich klappt das soweit.
Der rsync-Befehl sieht aus wie folgt:
1
sudo rsync -[optionen] root@ip.vom.raspberry.pi:/ /pfad/zur/backupplatte

Allerdings habe ich damit zwei (Schönheits-)Probleme.

1) Auf meinem Desktop muss ich rsync als root laufen lassen. Ansonsten 
passen hinterher die uids der abgelegten Backup-Dateien nicht.

2) Was mich noch mehr stört: ich kann mich am Pi über ssh nicht als user 
pi anmelden sondern muss root benutzen da ich ansonsten nicht an die 
komplette root-Partition herankomme. Dementsprechend musste ich in der 
ssh-config root-login erlauben

3) Die Folge aus 1) und 2) ist: Da ich ssh über RSA-key benutze braucht 
mein raspberry-root den public key meines Desktop-roots. Finde ich etwas 
unelegant dass mein Desktop-root überhaupt ein Key-Pärchen generieren 
muss. Aber durch das "sudo rsync" wird halt die ssh-Verbindung als root 
aufgebaut, nicht als NormalerUserName.

Krieg ich das etwas eleganter hin?
Möchte gerne mit sowenig root-Rechten arbeiten wie möglich.

von Philipp K. (philipp_k59)


Lesenswert?

Rsync hat extra optionen für übernahme/Definierung von Rechteverwaltung 
im Zielsystem, ob das jetzt mit "Root" vereinbar ist muss man selbst 
entscheiden.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Karlo schrieb:
> 1) Auf meinem Desktop muss ich rsync als root laufen lassen. Ansonsten
> passen hinterher die uids der abgelegten Backup-Dateien nicht.

Schau dir mal mount namespaces, und user namespaces, unshare, 
https://github.com/Daniel-Abrecht/usernsexec, und selinux oder apparmor 
an.
Mit all den Dingen kann man die Zugriffsrechte der Programme 
einschränken und diese weiter isolieren. Ohne echtes root kann man zwar 
nicht alle Rechte richtig setzen, aber mit user namespaces kann man 
einen Bereich an uids und gids für ein Programm auf einen anderen 
mappen, inclusive der UID für root. Mit mount namespaces kann man 
Einschränken, auf welche Verzeichnisse ein Programm zugriff hat, bzw. 
einen ganz anderen Verzeichnisbaum mounten. Und mit selinux oder 
apparmor kann man einstellen, was ein Programm darf, selbst wenn es root 
ist.

> 2) Was mich noch mehr stört: ich kann mich am Pi über ssh nicht als user
> pi anmelden sondern muss root benutzen da ich ansonsten nicht an die
> komplette root-Partition herankomme. Dementsprechend musste ich in der
> ssh-config root-login erlauben

Eventuell kann man da mit folgendem was machen:
http://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man5/sshd_config.5?query=sshd_config#ForceCommand
https://askubuntu.com/questions/719439/using-rsync-with-sudo-on-the-destination-machine
https://unix.stackexchange.com/questions/18830/how-to-run-a-specific-program-as-root-without-a-password-prompt
https://serverfault.com/questions/295927/sudo-prevent-switches-arguments-on-command
https://www.petefreitag.com/item/877.cfm#:~:text=You%20will%20find%20that%20the,shell%20will%20not%20be%20passed.

Man könnte also einen User erstellen, und diesem erlauben, mit sudo ein 
bestimmtes Script aufzurufen. Im Script könnte man versuchen, erlaubte 
Argumente zu filtern, mit unshare einen neuen mount namespace erstellen, 
und darin nur das nötigste als readonly zu mounten, und solches zeugs. 
Oder alternativ zu letzterem mit selinux/apparmor vergleichbares machen, 
ist vermutlich einfacher. Dann kann man in der sshd config einschränken, 
dass von dem User nur dieses Script aufgerufen werden kann, auf dem 
Desktop kann man für diesen login per key machen. Wenn man das richtig 
macht, könnte man dann dort rsync vermutlich relativ normal verwenden. 
Ist aber nicht trivial.

Das ganze ist vermutlich auch etwas overkill.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

firejail könnte auch noch hilfreich sein: 
https://wiki.ubuntuusers.de/firejail/

von Mathias A. (mrdelphi)


Lesenswert?

Hi,

Schau Dir mal die Option --fakeroot an: damit brauchst dann auf dem 
Backup-Ziel kein root mehr: diejenigen Metadaten für die rsync root 
bräuchte, werden in extended attributes gesichert. Daraus kann rsync sie 
dann wiederherstellen, wenn man die Dateien aus dem Backup zurück 
kopiert.

Noch ein Tipp: unabhängig davon empfiehlt sich für Deinen 
Anwendungsfall, --numeric-ids zu verwenden, da es sonst bei den uid/gid 
Chaos gibt falls die Zuordnung Name zu uid/gid bei beiden Hosts 
unterschiedlich ist

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.