Geben Sie allen Dateien und Ordnern Benutzerberechtigungen

9

Ich möchte einen Benutzer haben, der Zugriff auf alle Dateien und Ordner auf dem System hat. Dies dient dazu, RSYNC auf einem lokalen Computer zum Sichern eines Remotecomputers zu verwenden.

Im Moment verwenden wir den Benutzer backupsund obwohl wir diesen Benutzer zu den Gruppen hinzugefügt haben sudound adminrsync immer noch Nachrichten zurückgibt wie:

rsync: opendir "/ location / to / folder" fehlgeschlagen: Berechtigung verweigert (13)

rsync: send_files konnte nicht geöffnet werden "/ location / to / file": Berechtigung verweigert (13)

Jede Idee, wie wir dem Benutzer die backupsBerechtigung geben, auf alles zuzugreifen (ohne den Benutzer jemals zu allen Gruppen hinzuzufügen - der Remote-Server, den wir sichern möchten, ist ein dedizierter Hosting-Server, auf dem jedes Konto seinen eigenen Benutzer im System hat).

Vielen Dank für jede Hilfe.

Thomas Clayson
quelle
1
Können Sie Beispiele für Pfade nennen? Wenn es sich um solche handelt /proc, /devsind Fehler zu erwarten.
Phil
Benutzer hinzufügen backupszu sudound adminnichts ändern.
Favadi
@Phil Ich versuche, das gesamte Verzeichnis / home zu sichern. Dateien / Verzeichnisse, die fehlschlagen, sind solche /home/a/c/account/users/mail:username, die Berechtigungen wie drwx------und im Besitz von haben mail:4096. Ich gehe davon aus, dass Benutzer backupsin der Gruppe sind sudooder adminkeinen Zugriff haben, weil keine Zugriffsberechtigungen für Gruppen vorhanden sind. Ich weiß nicht, aber es ist ein Fehler in solchen Ordnern / Dateien.
Thomas Clayson
@favadi Ich habe das schon gemacht ... funktioniert immer noch nicht.
Thomas Clayson
Sie müssen den rsyncBefehl mit sudo ausführen .
Phil

Antworten:

6

Durch einfaches Hinzufügen des Benutzers backupszur Benutzergruppe sudoerhält das Konto nicht automatisch Zugriff auf alle Dateien im System. Es gibt dem Benutzer die Berechtigung, den sudoBefehl auszuführen .

Da Sie die Authentifizierung mit öffentlichem Schlüssel verwenden (vermutlich ohne Passphrase), würde ich dies mit Blick auf Sicherheit und einfache Implementierung angehen. Mit sshkönnen Sie den Benutzer darauf beschränken, nur sehr spezifische Befehle auszuführen. In diesem Fall können Sie dem Benutzer erlauben backups, rsyncmit Superuser-Berechtigungen auszuführen .

Sie haben den Schlüsselaustausch bereits durchgeführt und die verifizierte Authentifizierung ist erfolgreich. In der authorized_keysDatei auf dem Remote-Host, von dem Sie das /homeVerzeichnis sichern, können Sie dem command=vom Benutzer verwendeten Schlüssel eine Direktive hinzufügen backups. Mit dieser Anweisung kann dieser Befehl nur ausgeführt werden, wenn dieser Schlüssel zur Authentifizierung verwendet wird. Das erste Feld des Schlüssels würde also ungefähr so ​​aussehen:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Sie können noch weiter gehen und dem Schlüssel weitere Optionen hinzufügen, z from=myhost,no-pty,no-X11-forwarding.

Dies sollte Ihnen angemessene Sicherheit bieten und nicht erfordern, dass Sie die zugrunde liegenden Dateisystemberechtigungen ändern. Sie müssen wahrscheinlich mit dem Befehl spielen, den Sie in die authorized_keysDatei einfügen, bis er wie erwartet funktioniert. Es kann ein bisschen dauern, bis Sie Ihr Gehirn darum gewickelt haben. Der im Befehl angegebene Befehl authorized_keysüberschreibt grundsätzlich die rsyncOptionen, die Sie vom Verbindungshost übergeben.

Viele gute Informationen in man sshd. Sie möchten speziell den Abschnitt AUTHORIZED_KEYS FORMAT lesen.

George M.
quelle
Ok, ich folge, denke ich. Durch Hinzufügen dieser Anweisung zur Datei "authorized_keys" können Sie einen Remote-Befehl mit Superuser-Berechtigungen ausführen, oder? Wie würde ich den Befehl ändern rsync -e ssh -az [email protected]:/home /location/of/local/folder, um ihn anzuweisen, als Superuser auf dem Remotecomputer ausgeführt zu werden? Oder wird es das automatisch tun? Vielen Dank für Ihre Zeit und Hilfe. :)
Thomas Clayson
1
Mit der Direktive können Sie den Befehl nicht automatisch als Superuser ausführen. Wenn dieser bestimmte Schlüssel zur Authentifizierung verwendet wird, beschränkt er den Benutzer auf NUR den angegebenen Befehl. Die Superuser-Berechtigungen stammen von "sudo". Technisch gesehen können Sie Ihren gesamten Befehl "rsync" in die Datei "authorized_keys" einfügen und einfach die SSH-Verbindung vom Sicherungshost aus initiieren. Der gesamte Prozess wird dann nach Abschluss der Authentifizierung automatisch gestartet. Ich würde die Verbindung mit etwas wie "ssh backups @ remotehost sudo rsync"
George M
Es dauert ein bisschen, um Ihr Gehirn herumzuwickeln, aber es ist ziemlich cool, wenn es endlich klickt und Sie erkennen, was Sie tun können.
George M
2

Eine Möglichkeit besteht darin, einen rsync-Server auf dem Remote-System auszuführen.

Grundsätzlich erstellen Sie eine rsync.confmit uid=rootdann verwenden rsync -az rsync://domain.com.

Unter http://pastebin.com/5hQx1mRV finden Sie ein Beispiel, das jemand anderes geschrieben hat, und Konfigurieren des rsync-Daemons für einige Grundlagen zum Aktivieren eines Servers in Ubuntu.

Beachten Sie, dass Sie die Sicherheit berücksichtigen müssen. Ein besserer Ansatz besteht wahrscheinlich darin, das Remote-System auf Ihr lokales System zu übertragen.

Mikel
quelle
Das sieht ziemlich gut aus, danke. Wird das dann alles aus dem /backup/lcOrdner auf dem Remote-Server rsync ? Ändere ich das pathBit, um das /homezum Laufen zu bringen?
Thomas Clayson
Danke für den Editier. Das einzige Problem dabei ist, dass wir keine statische IP-Adresse garantieren können, wo wir sind, und wir möchten dies über cron tun, damit es immer passiert. Wenn wir "pushen", könnte es nicht mehr funktionieren, wenn sich unsere IP-Adresse ändert. : /
Thomas Clayson
@ThomasClayson: Dafür ist dynamisches DNS gedacht. :)
Warren Young
1

Sie könnten möglicherweise ACL verwenden, wenn das zugrunde liegende Dateisystem dies unterstützt.

Sie sollten die Gruppensicherung in der ACL jeder Datei und jedes Verzeichnisses hinzufügen. Um jedoch automatisch für neu erstellte Dateien und Verzeichnisse hinzugefügt zu werden, sollten Sie zuerst die Standard-ACL für alle vorhandenen Verzeichnisse festlegen. Also auf dem Remote-Server:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Dann sollten Sie die Empfangsberechtigung für alle vorhandenen Verzeichnisse haben und nach Dateien lesen. Sie können dies mit 2 Befehlen tun (diesmal ohne das -d)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

Dadurch erhalten Sie zusätzliche Berechtigungen zum Lesen der Dateien in der Gruppensicherung, ohne den vorhandenen Benutzer und die Gruppe zu ändern, die die einzelnen Dateien besitzen.

Hinweis: um die Suche zu beschleunigen | Mit dem Befehl xargs können Sie dem Befehl xargs die folgende Option hinzufügen: -P nmit n die Anzahl der parallelen Prozesse. Sie können die Anzahl der CPUs auf Ihrem Computer + 1 einstellen.

Huygens
quelle
Parallele Xargs beschleunigen in diesem Fall nicht, da der Engpass E / A und nicht CPU ist.
Mikel
Linux verwendet Caches im Speicher, bevor die Änderungen auf die Festplatte übertragen werden, sodass es sich aus Anwendersicht schneller anfühlt. Und selbst eine kleine Notebook-Festplatte könnte die Last bewältigen, mehrere ACLs in Parallelen zu setzen. Es ist nicht so viel I / O. Probieren Sie es aus :)
Huygens
Ich habe gerade hier superuser.com/a/422954/53206 gelesen, dass Sie einfach verwenden könnten: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) viel einfacher!
Huygens