Befehl 'chmod g + s'

45

Hallo, ich möchte die Rolle des chmod g+sBefehls in Unix verstehen .

Ich würde auch gerne wissen, was es in diesem speziellen Kontext tut:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Ich verstehe die alle Befehle Rollen mit Ausnahme chmod g+sund ich möchte die Unterschiede zwischen den Dateien kennen unund die deuxsich aus dieser Reihe von Befehlen.

otus
quelle

Antworten:

61
chmod g+s .;

Dieser Befehl legt die Gruppen-ID (setgid) für das aktuelle Verzeichnis fest ..

Dies bedeutet, dass alle neuen Dateien und Unterverzeichnisse, die im aktuellen Verzeichnis erstellt wurden, die Gruppen-ID des Verzeichnisses und nicht die primäre Gruppen-ID des Benutzers erben, der die Datei erstellt hat. Dies wird auch an neue Unterverzeichnisse weitergeleitet, die im aktuellen Verzeichnis erstellt wurden.

g+s wirkt sich auf die Gruppen-ID der Datei aus, jedoch nicht auf die Eigentümer-ID.

Beachten Sie, dass dies nur für neu erstellte Dateien gilt. Dateien, die in das Verzeichnis verschoben ( mv) werden, sind von der Einstellung setgid nicht betroffen. Dateien, mit denen kopiert wird, cp -psind ebenfalls nicht betroffen.

Beispiel

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

In diesem Fall deuxwird zur Gruppe gehören, canardaber unwird zur Gruppe des Benutzers gehören, der es erstellt, was auch immer das ist.

Kleine Anmerkung zur Verwendung von Semikolons in Shell-Befehlen

Im Gegensatz zu coder perlmuss auf einen Shell-Befehl nur ein Semikolon folgen, wenn in derselben Befehlszeile ein anderer Shell-Befehl darauf folgt . Betrachten Sie daher die folgende Befehlszeile:

chgrp canard .; chmod g+s .;

Das letzte Semikolon ist überflüssig und kann entfernt werden:

chgrp canard .; chmod g+s .

Wenn wir die beiden Befehle in separaten Zeilen platzieren, wird das verbleibende Semikolon nicht benötigt:

chgrp canard .
chmod g+s .
John1024
quelle
1
Dateien, die kopiert werden (z. B. von cp), werden tatsächlich neu erstellt. Wenn sie die Gruppenberechtigung nicht erben, spielt das Kopierprogramm Spiele ab, z. B. das Kopieren in eine temporäre Datei und das anschließende Verschieben in das Zielverzeichnis.
Kaz
1
@ Kaz Guter Punkt. Ich habe die Antwort aktualisiert, um zu verdeutlichen, dass dies cp -pdie setgid-Einstellung überschreibt.
John1024,
Aber cp -püberschreibt die Setgid-Einstellung? Auf jeder existierenden Unix-Implementierung? POSIX gibt an, dass nicht angegeben ist, ob ein Fehler beim Kopieren der Benutzer- oder Gruppen-ID unter cp -p zu einer Diagnosemeldung führt! In diesem Fall müssen jedoch die Bits S_SUID und S_SGID gelöscht werden (dh, wenn eine Datei setuid bob ist, der Besitz von bob jedoch nicht kopiert werden kann, sodass die Datei janet gehört, darf sie nicht setuid sein Janet.)
Kaz
cp -pmsgstr " überschreibt die setgid Einstellung?" Nach der POSIX-Spezifikation soll dies geschehen. Dies geschieht auf allen von mir verwendeten Unix-Systemen. Sie haben den Teil der Spezifikation in Bezug auf Maßnahmen zum Schutz der Sicherheit für den Fall zitiert, dass die Gruppen-ID nicht dupliziert werden kann. Ich bin noch nie in eine solche Situation geraten, oder?
John1024
7

Sie können die Dateiberechtigungen mit dem Befehl chmod ändern. In Unix werden Dateiberechtigungen, die festlegen, wer möglicherweise über unterschiedliche Zugriffsarten auf eine Datei verfügt, sowohl von den Zugriffsklassen als auch von den Zugriffstypen angegeben. Zugriffsklassen sind Gruppen von Benutzern, denen jeweils bestimmte Zugriffstypen zugewiesen werden können

Unix / Linux verfügt über Benutzer und Benutzergruppen, die für den Dateizugriff zugewiesen werden können

Die Optionen g + s lauten wie folgt:

g - die Berechtigungen, die andere Benutzer in der Gruppe der Datei dafür haben

s - Benutzer- oder Gruppen-ID bei der Ausführung festlegen

Hier ist ein Anwendungsbeispiel:

chmod =rwx,g+s filename

(Jeder kann eine bestimmte Datei lesen, schreiben und ausführen und die eingestellte Gruppen-ID aktivieren.)

Um die Berechtigungen einer Datei festzulegen / zu ändern, müssen Sie das Programm chmod verwenden. Natürlich darf nur der Eigentümer einer Datei chmod verwenden, um die Berechtigungen einer Datei zu ändern. chmod hat die folgende Syntax: chmod [options] mode file (s) Der 'mode'-Teil gibt die neuen Berechtigungen für die Datei (en) an, die als Argumente folgen. Ein Modus gibt an, welche Berechtigungen des Benutzers geändert werden sollen und welche Zugriffstypen anschließend geändert werden sollen. Sagen wir zum Beispiel: chmod axe socktest.pl

Dies bedeutet, dass das Ausführungsbit für alle Benutzer gelöscht werden sollte (-). (Eigentümer, Gruppe und der Rest der Welt) Die Berechtigungen beginnen mit einem Buchstaben, der angibt, welche Benutzer von der Änderung betroffen sein sollen. Dies kann einer der folgenden sein:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Darauf folgt eine Änderungsanweisung, die aus einem + (gesetztes Bit) oder - (gelöschtes Bit) und dem Buchstaben besteht, der dem zu ändernden Bit entspricht. Sehen wir uns einige Beispiele an:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Merkwürdige Zahlen ... Möglicherweise sind Sie auf etwas wie chmod 755 gestoßen, und Sie werden sich natürlich fragen, was das ist. Die Sache ist, dass Sie das gesamte Berechtigungsmuster einer Datei auf einmal ändern können, indem Sie eine Nummer wie in diesem Beispiel verwenden. Jeder Modus hat eine entsprechende Codenummer, und wie wir sehen werden, gibt es eine sehr einfache Möglichkeit, herauszufinden, welche Nummer einem Modus entspricht. Jede der drei Ziffern der Modusnummer entspricht einem der drei Berechtigungstripel. (u, g und o) Jedes Berechtigungsbit in einem Triplet entspricht einem Wert: 4 für r, 2 für w, 1 für x. Bei dem Berechtigungsbit addieren Sie diesen Wert zur Nummer des Berechtigungs-Triplets. Wenn es gelöscht ist, fügen Sie nichts hinzu. (Einige von Ihnen könnten feststellen, dass in der Tat,

Triplett für dich: rwx => 4 + 2 + 1 = 7

Triplett für g: r-x => 4 + 0 + 1 = 5

Triplett für o: r-x => 4 + 0 + 1 = 5

Was macht : 755

755 ist also eine knappe Möglichkeit zu sagen: "Es macht mir nichts aus, wenn andere Leute diese Datei lesen oder ausführen, aber nur ich sollte sie ändern können." 777 bedeutet: "Jeder hat vollen Zugriff auf diese Datei."

Perfekte Referenz

Parallaxis
quelle
0

Das Ergebnis des Befehls ls hängt von umask ab.

g + s setzt sgid auf die Datei. Überprüfen Sie hier , um weitere Informationen zu tief SUID SGID

Wenn Ihre Umask zum Beispiel 022 ist, wird das Ergebnis ungefähr so ​​aussehen:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un
Romeo Ninov
quelle
0

In Linux eine der Standard-Mount-Optionen für ext? fs ist 'nogrpid | sysvgroups '. Beim ersten Berühren von un wird eine Datei mit der Gruppen-ID fsgid des Erstellungsprozesses erstellt, wobei fsgid = egid ist.

chmod g + s. bewirkt, dass die nachfolgende Datei- / Verzeichniserstellung die Gruppen-ID aus dem übergeordneten Ordner übernimmt. Wenn das erstellte Objekt ein Verzeichnis ist, wird g + s ebenfalls als übergeordnetes Element festgelegt.

Hier berühren Sie Deux, erstellt Deux mit Gruppen-Canard.

Die Semantik ändert sich, wenn die Mount-Option 'grpid | In diesem Fall würde die neue Datei- / Verzeichniserstellung die Gruppen-ID aus dem übergeordneten Ordner erben, auch ohne g + s für das übergeordnete Element selbst festzulegen.

Nizam Mohamed
quelle