Bash Scripting - Wie wird die Gruppe festgelegt, mit der neue Dateien erstellt werden?


74

Ich mache ein Bash-Shell-Skript und möchte die Standardgruppe ändern, als die neue Dateien erstellt werden. Ich weiß, dass Sie umaskdie Berechtigungen ändern. Gibt es etwas für die Gruppe?

Antworten:


13

Der newgrpBefehl wird verwendet, um die aktuelle Gruppen-ID während einer Anmeldesitzung zu ändern.

Bei neuen Verzeichnissen, die in dieser Sitzung erstellt wurden, wird die Gruppen-ID durch den Befehl festgelegt.

newgrp(1)


Ich bin Mitglied der Gruppe. Warum werde ich dann nach einem Passwort gefragt? Mein Passwort gefällt mir nicht!
Michael

Wenn ich "newgrp <Gruppe>" als root ausführe (z. B. ein Skript mit newgrp darin mit sudo ausführen), wird es in eine Root-Shell verschoben.
Michael

Dafür sollte newgrp nicht verwendet werden. Was passiert, wenn Sie vergessen, newgrp außerhalb des Skripts zu verwenden? Wie wird das Skript mit der neuen Shell umgehen, die newgrp erstellt? Die Antwort von @ mark40 ist besser.
Noel

16
Wird das wirklich als Antwort angesehen? Es ist eine Verbindung.
mcont

Ich kann nicht anders, als zu stimmen, denn das sind interessante Informationen. Ich denke immer noch, dass die Antwort von @ mark4o die richtige sein sollte.
Teekin

183

Es gibt verschiedene Möglichkeiten, dies zu tun:

  1. Sie können die Standardgruppe für alle in einem bestimmten Verzeichnis erstellten Dateien ändern, indem Sie das setgid-Flag für das Verzeichnis ( chmod g+s _dir_) setzen. Neue Dateien im Verzeichnis werden dann mit der Gruppe des Verzeichnisses erstellt (festgelegt mit chgrp <group> <dir>). Dies gilt für alle Programme, die Dateien im Verzeichnis erstellen.

    Beachten Sie, dass dies für neue Unterverzeichnisse (ab Linux 3.10) automatisch vererbt wird. Wenn jedoch bereits Unterverzeichnisse vorhanden waren, wird diese Änderung nicht auf diese angewendet (verwenden Sie dazu das -RFlag).

  2. Wenn das Setgid-Flag nicht gesetzt ist, wird die Standardgruppe auf die aktuelle Gruppen-ID des Erstellungsprozesses gesetzt. Obwohl dies mit dem newgrp Befehl festgelegt werden kann, wird eine neue Shell erstellt, die in einem Shell-Skript nur schwer zu verwenden ist. Wenn Sie einen bestimmten Befehl (oder eine Reihe von Befehlen) mit der geänderten Gruppe ausführen möchten, verwenden Sie den Befehl sg <group> <command>.

    sg ist kein POSIX-Standardbefehl, aber unter Linux verfügbar.


10
Nur eine kleine Notiz. Wenn Sie versuchen, chmod g+s _dir_in einem Verzeichnis mit der Gruppe y ausgeführt zu werden, und Sie den Befehl unter Benutzer x ausführen und Benutzer x nicht Mitglied der Gruppe y ist, funktioniert dies nicht. Sie müssen es als root ausführen.
LEDfan
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.