Stellen Sie sicher, dass neue Dateien in einem Verzeichnis zur Gruppe gehören

66

Ich möchte ein freigegebenes Verzeichnis erstellen, wenn mehrere Benutzer (alle gehören zu "Meine Gruppe") Dateien erstellen und bearbeiten können. Ich möchte, dass alle Dateien in diesem Verzeichnis und Unterverzeichnis zu meiner Gruppe gehören

Ich habe vorhandene Dateien so geändert, dass die Gruppe " Meine Gruppe " verwendet chgrpwird. Es werden jedoch weiterhin neue Dateien erstellt, die zur primären Gruppe des Benutzers gehören. Gibt es eine Möglichkeit, sicherzustellen, dass neue Dateien zur Gruppe gehören, ohne chgrp wiederholt auszuführen?

gerade rechtzeitig
quelle

Antworten:

106

Sie möchten das SetGID-Bit setzen.

chmod g+s dir

Für alle neuen Dateien, die im Verzeichnis erstellt werden, wird die Gruppe auf die Gruppe des Verzeichnisses festgelegt.

In einem Superuser-Blogbeitrag wurden die Sticky-Bits und andere Linux-Berechtigungsbits erläutert:

SetGID ist jedoch ein ganz anderes Ballspiel. Wenn für ein Verzeichnis das SetGID-Bit festgelegt ist und eine Datei in diesem Verzeichnis erstellt wird, wird der Gruppeneigentum der Datei automatisch in die Gruppe des Verzeichnisses geändert.

lesmana
quelle
1
Vielen Dank. Die Referenz ist nützlich. beschreibt den Befehl umask, der Teil des Bildes ist
justintime
3
Was ist mit dem Erstellen eines Unterverzeichnisses im Ausgangsverzeichnis, das ebenfalls zur Gruppe des übergeordneten Verzeichnisses gehört? Ist das möglich?
Daaxix
@ LukePHs Antwort unten ist entscheidend, um nicht verwechselt zu werden, wenn dies stillschweigend fehlschlägt: Verwenden Sie sudo
Rhabarber
10

Dies kann dazu führen, dass ein paar Leute mit setgid nicht weiterkommen. Wenn sich die Gruppe des Ordners von Ihrer eigenen unterscheidet, müssen Sie möglicherweise chmod als root ausführen, aber es wird kein Fehler angezeigt, der darauf hinweist, dass Sie dies tun müssen.

ohne sudo

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                     # no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir   # but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo        # and the group is set wrong

mit sudo

$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir   # the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo # and the group is set right
LukePH
quelle