Gibt es mit Linux Bash eine Möglichkeit für nicht privilegierte Benutzer, den Inhalt nur eines bestimmten Verzeichnisses zu übernehmen?

Gibt es mit Linux Bash eine Möglichkeit für nicht privilegierte Benutzer, den Inhalt nur eines bestimmten Verzeichnisses zu übernehmen?

Ich möchte, dass ein bestimmter Benutzer rekursiv den Besitzer und die Gruppe des gesamten Inhalts eines bestimmten Verzeichnisses ändert, und zwar nur dieses Verzeichnisses. Das Verzeichnis ist eine Art „Posteingang“, in den ein Dienst Dateien und Unterverzeichnisse schreibt.

Derzeit habe ich einen Administrator sudo chown, aber ich würde es vorziehen, wenn der Zielbesitzer es selbst tun würde, ohne dass dieser Benutzer über mehr Berechtigungen verfügt als erforderlich. Nehmen wir an, der ursprüngliche Besitzer ist „headsman“ und der endgültige Besitzer sollte „audience“ sein. Keiner der Benutzer ist in derselben Gruppe.

sudo chown -R audience:watchers /usr/files/pathofdir Das ist nicht ganz richtig, da ich nicht möchte, dass das Publikum uneingeschränkte Befugnisse zur Verwendung von chown hat. Meine erste Vermutung war, zu versuchen, "audience" zu /etc/sudoers hinzuzufügen, mit der Berechtigung für /usr/bin/chown und /usr/bin/chgrp. Aber das sind zu viele Befugnisse.

Ich habe darüber nachgedacht, ein Skript ausschließlich für das Publikum zu schreiben, aber ich weiß nicht, wie ich dafür sorgen kann, dass dieses Skript nur die richtigen Berechtigungen hat und nicht mehr.

Wie kann dies am besten erreicht werden?

Antwort1

Sie können in einen vollständigen Befehl sudoersmit allen Argumenten angeben. In diesem Fall ist der Benutzer nur berechtigt, den angegebenen Befehl mit den angegebenen Argumenten auszuführen. Dieser sudoersEintrag sollte Ihr Problem also lösen:

audience  ALL=/usr/bin/chown -R audience\:watchers /usr/files/pathofdir

Ich denke jedoch, dass Sie sich ACLs ansehen sollten, da ich vermute, dass Ihr Problem mit der Verwendung einer Standard-ACL für das Verzeichnis leichter zu lösen ist. Siehedieser Beitragzum Beispiel.

Antwort2

@Lasek wies darauf hin, dass ich wahrscheinlich ACLS verwenden wollte. Das hier scheint bei mir zu funktionieren:

sudo setfacl -RPdm user:audience:rwX /usr/files/pathofdir
sudo setfacl -RPdm group:watchers:rwX /usr/files/pathofdir
sudo setfacl -RPm user:audience:rwX /usr/files/pathofdir
sudo setfacl -RPm group:watchers:rwX /usr/files/pathofdir

Es gibt wahrscheinlich eine prägnantere Syntax, aber dies ist mein erster Einsatz vonsetfacl

verwandte Informationen