Was ist der Zweck von setgid Verzeichnis?


11

Ich weiß, wie setgid funktioniert, aber ich weiß nicht, warum es entworfen wurde. Gibt es ein Beispiel, um zu veranschaulichen, welche Probleme es löst?

Antworten:


18

Obwohl eine setgid-Datei / Binärdatei möglicherweise nicht offensichtlich nützlich ist, finde ich das setgid-Bit auf jeden Fall sehr nützlich, wenn es auf Verzeichnisse angewendet wird. Angenommen, Sie sind Teil verschiedener Arbeitsgruppen, von denen jede ihre eigenen Unix-Gruppen (Berechtigungsgruppen) hat. Sicherlich möchten Sie dann das setgid-Bit in Projektordner einfügen, um sicherzustellen, dass beim Erstellen neuer Dateien der richtige Gruppenbesitz angewendet wird, und damit Ihren Kollegen in dieser Projektgruppe Zugriff auf diese Dateien gewähren?


2
Wenn Sie CVS verwenden, sind Sie wahrscheinlich aus diesem Grund sehr vertraut damit (wenn die Verzeichnisse im Repository nicht setgid sind, werden viele Berechtigungsfehler angezeigt, wenn verschiedene Benutzer versuchen, die Dateien auszuchecken und festzuschreiben).
Suppressingfire

Ja, Sie haben Recht, andere Benutzer können die von Ihnen in setgid-Verzeichnissen erstellten Dateien freigeben (lesen), aber die gruppenbeschreibbare Berechtigung (g + w) wird nicht im setgid-Verzeichnis vererbt, und daher kann ein anderer Benutzer nicht an ein Unterprogramm anhängen. Verzeichnis, das Sie im setgid-Verzeichnis erstellt haben, hat seine Verwendung eingeschränkt. Und so habe ich diese Frage, sie löst das CVS-Share-Read-Problem, aber nicht das Share-Write in die neu erstellten Verzeichnisse. ??
Xiè Jìléi

1
Deshalb möchten Sie auch geeignete Umask-Einstellungen verwenden. Zum Beispiel würde umask 007 volle Berechtigungen für Benutzer und Gruppe hinterlassen, aber keine für andere.
Andol

13

Die Hauptverwendung besteht darin, den Gruppenbesitzer eines Dateibaums beizubehalten:

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

Dies ist in der Regel in Umgebungen nützlich, in denen verschiedene Benutzer Dateien / Verzeichnisse in einem Verzeichnis erstellen / bearbeiten: Wenn alle Dateien / Verzeichnisse dieselbe Gruppe verwenden, können alle Benutzer die Dateien / Verzeichnisse bearbeiten / ändern (sofern die Berechtigungen dies zulassen): Dadurch werden Situationen vermieden wie "xyz besitzt die Datei abc, daher kann ich sie nicht bearbeiten".

Eine Alternative zur Verwendung von setgid auf diese Weise ist die Mount-Option für das grpid- Dateisystem.

Vom Menschenberg:

grpid oder bsdgroups / nogrpid oder sysvgroups

Diese Optionen definieren, welche Gruppen-ID eine neu erstellte Datei erhält. Wenn grpid festgelegt ist, wird die Gruppen-ID des Verzeichnisses verwendet, in dem es erstellt wurde. Andernfalls (Standardeinstellung) wird die fsgid des aktuellen Prozesses verwendet, es sei denn, für das Verzeichnis ist das setgid-Bit gesetzt. In diesem Fall wird die gid aus dem übergeordneten Verzeichnis übernommen und das setgid-Bit wird auch gesetzt, wenn es sich um ein Verzeichnis selbst handelt.

Wenn diese Option aktiviert ist, erben Dateien / Verzeichnisse, die auf einem von grpid bereitgestellten Dateisystem erstellt wurden, auch die Gruppe des übergeordneten Verzeichnisses:

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

Ich habe festgestellt, dass die Verwendung der Option grpid die Wahrscheinlichkeit menschlicher Fehler angemessen verringert (da das Dateisystem die Arbeit unabhängig von den Verzeichnisberechtigungen ausführt ).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.