Ich habe ein Verzeichnis, das Daten enthält, die von mehreren Benutzern gemeinsam genutzt werden. Der Zugriff auf dieses Verzeichnis und alles darunter wird von der Verzeichnisgruppe gesteuert, die den betreffenden Benutzern hinzugefügt wird. Als solches habe ich den Ordner "Sticky Group" chmod g+s
eingestellt. Das Verzeichnis enthält eine Baumstruktur mit Verzeichnissen und Dateien, wobei die Gesamtzahl der Dateien wahrscheinlich einige Millionen beträgt. Die Dateien werden ziemlich klein sein, ich erwarte nichts größer als 50 MB.
Mein Problem ist, dass der Eigentümer der Datei oder des Verzeichnisses immer noch der Benutzer ist, der sie erstellt hat. Selbst wenn ich diesen Benutzer aus der Zugriffsgruppe entfernen sollte, würde ich daher seinen Zugriff nicht vollständig entfernen.
So:
Gibt es andere Optionen, die ich verpasst habe, um sicherzustellen, dass alle Dateien und Unterverzeichnisse denselben Eigentümer haben?
Ich gehe davon aus, dass ich mit einem Cron-Job in regelmäßigen Abständen durch das gesamte Verzeichnis surfen kann, aber das erscheint mir als ineffizient, wenn es sich im Wesentlichen um einen Einmal-Pr-Dateibefehl handelt.
Ich habe ein Beispiel mit INotify gefunden, das mir jedoch als wartungsintensiv erscheint, da es Skripte erfordert.
Ich habe nicht herausgefunden, ob ACL mir bei erzwungener Inhaberschaft helfen kann.
Gibt es eine intelligentere Möglichkeit, dies zu tun?
Ich möchte ein Verzeichnis haben, das freigegeben werden kann, indem einem Benutzer eine Gruppe hinzugefügt wird. Alles, was in diesem Verzeichnis erstellt wird, erbt das Berechtigungsschema von seinem übergeordneten Element. Wenn es einen besseren Weg gibt als das, was ich versuche, bin ich ganz Ohr.
quelle
chown -hR owner:group
?Antworten:
Das Setzen eines Standardbesitzers "automatisch" würde ein Verzeichnis erfordern, das
setuid
sich so verhältsetgid
. Während dies unter FreeBSD konfiguriert werden kann, werden andere UNIX- und Linux-Systeme einfach ignoriertu+s
. In Ihrem Fall könnte es jedoch eine andere Lösung geben.Im Grunde genommen möchten Sie, wie ich sehe, den Zugriff auf ein Verzeichnis mithilfe des Gruppenmechanismus steuern. Hierfür müssen Sie jedoch nicht die Berechtigungen in der gesamten Verzeichnisstruktur einschränken. Tatsächlich könnte das Verzeichnisausführungsbit
--x
genau das sein, was Sie benötigen. Lassen Sie mich Ihnen ein Beispiel geben. Vorausgesetzt, dass...group_dir
Verzeichnis kontrolliert, lautetourgroup
.ourgroup
Gruppe können darauf zugreifengroup_dir
.user1
unduser2
gehören zuourgroup
.... betrachten Sie das folgende Setup:
Angenommen, jeder Artikel wurde von seinem Besitzer erstellt.
In diesem Setup:
ourgroup
. Jeder aus der Gruppe kann Dateien überall in der Gruppe erstellen, verschieben und löschengroup_dir
(aber nicht tiefer).ourgroup
wird blockiertgroup_dir
und kann daher nichts darunter manipulieren. Zum Beispiel kannuser3
(wer kein Mitglied von istourgroup
) nicht lesengroup_dir/user2_submission/README
(obwohl er dier--
Erlaubnis für die Datei selbst hat).In diesem Fall gibt es jedoch ein kleines Problem: Aufgrund der typischen umask können von Benutzern erstellte Elemente nicht von anderen Mitgliedern der Gruppe bearbeitet werden. Hier kommen ACLs ins Spiel. Indem Sie Standardberechtigungen festlegen, stellen Sie sicher, dass trotz des umask-Werts alles in Ordnung ist:
Dieser Aufruf setzt:
rw(x)
für den Eigentümer.rw(x)
für die Gruppe.group_dir
ohnehin nicht möglich ist und es keine Rolle spielt, welche Berechtigungen darunter liegen.Wenn ich jetzt einen Artikel erstelle als
user2
:Mit dieser ACL können wir versuchen, unsere vorherige Struktur wiederherzustellen:
Auch hier wird jeder Artikel von seinem Besitzer erstellt.
Wenn Sie denjenigen, die das Verzeichnis verwenden, ein wenig mehr Leistung / Sicherheit geben möchten, sollten Sie außerdem ein "Sticky Bit" in Betracht ziehen. Dies würde zum Beispiel das
user1
Löschen verhindernuser2_submission
(da er die-w-
Erlaubnis dazu hatgroup_dir
):Wenn er
user1
versucht, seinuser2
Verzeichnis zu entfernen , bekommt er ein schönesOperation not permitted
. Beachten Sie jedoch, dass auf diese Weise zwar Änderungen an der Verzeichnisstruktur verhindert werdengroup_dir
, auf Dateien und Verzeichnisse darunter jedoch weiterhin zugegriffen werden kann:Zu berücksichtigen ist auch, dass die von uns verwendeten ACLs Standardberechtigungen festlegen . Der Eigentümer eines Elements kann daher die ihm zugeordneten Berechtigungen ändern. Zum Beispiel
user2
kann perfekt laufen ...... wodurch sein vollständiges Submission Directory für niemanden in der Gruppe verfügbar wird.
Da Sie jedoch ursprünglich bereit sind,
rws
allen Mitgliedern der Gruppe uneingeschränkten Zugriff zu gewähren , gehe ich davon aus, dass Sie diesen Benutzern vertrauen und nicht zu viele böswillige Vorgänge von ihnen erwarten.quelle
group_dir
erster Stelle einzutreten , egal ob er die Datei besitzt oder nicht. Das einzige wirkliche "Privileg", das der Besitzer hat, ist, dass er die Berechtigungen seiner Kreationen ändern kann (was ich in meiner Antwort ein wenig ausführlicher dargelegt habe).group_dir
Verzeichnis ist im Besitz vonroot:ourgroup
with-rwxr-x---
,ourgroup
dh nur root und Mitglieder von dürfen darauf zugreifen, dh mit den darunter liegenden Dateien etwas anfangen. Wenn Sie keine--x
Berechtigung für ein Verzeichnis haben, können Sie nicht auf eine Datei darin zugreifen, selbst wenn Sie über Berechtigungen für die Datei selbst verfügen.Es gibt eine intelligentere Möglichkeit, dies zu tun. Es wird eine Kombination aus set-gid und default acls verwendet. Natürlich benötigen Sie ein acl-fähiges Dateisystem. Angenommen, das Verzeichnis, in dem Sie sich befinden möchten, ist freigegeben,
/var/grpdir
und die Mitglieder der Gruppesharing
sollten darauf zugreifen können.Standard-ACLs werden von Unterverzeichnissen geerbt, die in einem Verzeichnis mit Standard-ACLs erstellt wurden. Das bedeutet, dass für jede Datei, die in erstellt
/var/grpdir
wird, die Gruppesharing
durch das setgid-Bit des Verzeichnisses festgelegt wird. Darüber hinaus erbt es die Standard-Acls, die die Standardvoraussetzungen im Linux-Stil überschreiben, da wir keine ACLs für bestimmte Benutzer oder Gruppen angegeben haben. Dies bedeutet, dass alle Dateien mit Eigentumsrechten<user>:sharing
und Berechtigungen erstellt werdenrw-rw----
. Die Verzeichnisse sind identisch, mit der Ausnahme, dass für sie auch die gleichen Standard-ACLs wie für ihr übergeordnetes Element (/var/grpdir
) festgelegt sind und natürlich die ausführbaren Bits für Benutzer und Gruppe festgelegt sind. Wenn Sie einen Benutzer aus dersharing
Gruppe entfernen, kann dieser Benutzer nicht auf das Verzeichnis zugreifen (und auch nicht auf Dateien darin, selbst wenn sie Eigentümer sind).Im Gegensatz zur regelmäßigen Korrektur von Berechtigungen mit einem Cronjob sind Berechtigungen immer synchron, da sie automatisch mit neu erstellten Dateien und Verzeichnissen aktualisiert werden. Diese Lösung ist leicht; Es sind keine Dämonen erforderlich, und es gibt keinen Anstieg für E / A, während die Berechtigungen auf einen Schlag korrigiert werden.
quelle
Mir ist kein guter Weg dafür bekannt. Der technisch sauberste Weg wäre ein FUSE-Dateisystem, das dies tut. Natürlich viel Arbeit, wenn das noch keiner gemacht hat.
Alternativen:
Benutze Samba. Samba hat den
force user
Parameter. Sie können ein Verzeichnis lokal exportieren und es lokal bereitstellen. Ermöglicht keine schnelleren Zugriffe, ist jedoch möglicherweise akzeptabel, da nur Loopback-Netzwerke beteiligt sind.Verwenden Sie ein Nicht-Linux-Dateisystem wie FAT32. Dies muss für einen bestimmten Benutzer konfiguriert werden, um es bereitzustellen. Die Zugriffsberechtigungen müssen vom übergeordneten Verzeichnis verwaltet werden.
quelle
Ich habe keine Möglichkeit gefunden, den Dateieigentümer automatisch so zu ändern, dass der Dateieigentümer geändert wird, wenn die Datei in ein bestimmtes Verzeichnis verschoben wird. Das Nächste ist das Sticky-Bit, aber Sie haben anscheinend angegeben, dass die Gruppenzugehörigkeit nicht ausreicht, sondern dass sich die tatsächliche Benutzerzugehörigkeit ändern muss.
In diesem Fall denke ich, dass Ihre beste Wette der Cron-Job mit der Chown-R-Flagge ist, wie Pandya erwähnte. Legen Sie es auf einen Cron, um jede Minute oder alle fünf Minuten zu laufen.
Wenn Sie erklären können, wie Ihre Benutzer dies verwenden, gibt es möglicherweise eine bessere Lösung.
ACL kann Ihnen dabei helfen, eine genauere Kontrolle darüber zu erhalten, wer was darf. Es ändert nicht automatisch den tatsächlichen Dateibesitz für Sie. Ich denke, Sie müssen sich einen besseren Überblick verschaffen und Ihre Lösung auf dieser Grundlage bewerten / neu gestalten.
quelle
Sie können inotify-tools verwenden und ein einfaches Bash-Skript wie unten schreiben. Inotify behält das Verzeichnis- Web im Auge und unternimmt immer dann etwas, wenn ein Ereignis wie die Erstellung eines Verzeichnisses im Web-Verzeichnis stattfindet. Es gibt viele Veranstaltungen. Sie können es googeln oder auf dieser Seite nachsehen
quelle