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?
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:
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).
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.
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.
Es gibt verschiedene Möglichkeiten, dies zu tun:
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 mitchgrp <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
-R
Flag).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 Befehlsg <group> <command>
.sg
ist kein POSIX-Standardbefehl, aber unter Linux verfügbar.quelle
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.