Das Setzen eines Standardbesitzers "automatisch" würde ein Verzeichnis erfordern, das setuid
sich so verhält setgid
. Während dies unter FreeBSD konfiguriert werden kann, werden andere UNIX- und Linux-Systeme einfach ignoriert u+s
. In Ihrem Fall könnte es jedoch eine andere Lösung geben.
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.
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...
- Die Gruppe, die den Zugriff auf das
group_dir
Verzeichnis kontrolliert, lautet ourgroup
.
- Nur Personen in der
ourgroup
Gruppe können darauf zugreifen group_dir
.
user1
und user2
gehören zu ourgroup
.
- Die Standardeinstellung für umask ist 0022.
... betrachten Sie das folgende Setup:
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
Angenommen, jeder Artikel wurde von seinem Besitzer erstellt.
In diesem Setup:
- Alle Verzeichnisse können von allen in frei durchsucht werden
ourgroup
. Jeder aus der Gruppe kann Dateien überall in der Gruppe erstellen, verschieben und löschen group_dir
(aber nicht tiefer).
- Jeder, der nicht dabei ist,
ourgroup
wird blockiert group_dir
und kann daher nichts darunter manipulieren. Zum Beispiel kann user3
(wer kein Mitglied von ist ourgroup
) nicht lesen group_dir/user2_submission/README
(obwohl er die r--
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:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
Dieser Aufruf setzt:
- Standardberechtigungen
rw(x)
für den Eigentümer.
- Standardberechtigungen
rw(x)
für die Gruppe.
- Standardmäßig keine Berechtigungen für die anderen. Beachten Sie, dass der Zugriff der anderen Benutzer
group_dir
ohnehin nicht möglich ist und es keine Rolle spielt, welche Berechtigungen darunter liegen.
Wenn ich jetzt einen Artikel erstelle als user2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
Mit dieser ACL können wir versuchen, unsere vorherige Struktur wiederherzustellen:
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
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 verhindern user2_submission
(da er die -w-
Erlaubnis dazu hat group_dir
):
$ chmod +t group_dir/
Wenn er user1
versucht, sein user2
Verzeichnis zu entfernen , bekommt er ein schönes Operation not permitted
. Beachten Sie jedoch, dass auf diese Weise zwar Änderungen an der Verzeichnisstruktur verhindert werden group_dir
, auf Dateien und Verzeichnisse darunter jedoch weiterhin zugegriffen werden kann:
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
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 ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... 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.