Angenommen, Sie verwenden GNU chmod
, ist dies in der Manpage dokumentiert :
chmod
behält die Set-User-ID- und Set-Group-ID-Bits eines Verzeichnisses bei, sofern Sie nicht ausdrücklich etwas anderes angeben. Sie können die Bits mit symbolischen Modi wie u+s
und setzen oder löschen g-s
, und Sie können die Bits mit einem numerischen Modus setzen (aber nicht löschen).
Dies ist in POSIX zulässig :
Für jedes in der Oktalzahl gesetzte Bit ist das entsprechende Dateiberechtigungsbit in der folgenden Tabelle zu setzen; Alle anderen Dateiberechtigungsbits werden gelöscht. Für reguläre Dateien müssen für jedes Bit, das in der Oktalzahl gesetzt ist, die der eingestellten Benutzer-ID bei der Ausführung oder der eingestellten Gruppen-ID bei der Ausführung entspricht, die in der folgenden Tabelle angegebenen Bits gesetzt werden. Wenn diese Bits nicht in der Oktalzahl gesetzt sind, werden sie gelöscht. Für andere Dateitypen ist implementierungsdefiniert, ob Anforderungen zum Setzen oder Löschen der Bits "Benutzer-ID bei Ausführung festlegen" oder "Gruppen-ID bei Ausführung festlegen" berücksichtigt werden.
Die Gründe für das Verhalten in GNU chmod
sind in den Versionshinweisen für coreutils
6.0 angegeben :
chmod
, install
Und mkdir
jetzt ein Verzeichnis der Set-User-ID und set-group-ID - Bits erhalten , wenn Sie ausdrücklich etwas anderes verlangen. ZB chmod 755 DIR
und behalten Sie
chmod u=rwx,go=rx DIR
jetzt die DIR
Bits set-user-ID und set-group-ID bei, anstatt sie zu löschen, und ähnlich für mkdir -m 755 DIR
und mkdir -m u=rwx,go=rx DIR
. Um die Bits zu löschen, erwähnen Sie sie explizit in einem symbolischen Modus, z
mkdir -m u=rwx,go=rx,-s DIR
. Um sie einzustellen, erwähnen Sie sie explizit entweder in einem symbolischen oder einem numerischen Modus, z mkdir -m 2755 DIR
.
mkdir -m u=rwx,go=rx,g+s DIR
. Diese Änderung dient der Vereinfachung auf Systemen, auf denen diese Bits von den Eltern erben. Leider sind andere Betriebssysteme hier nicht konsistent, und tragbare Skripte können nicht davon ausgehen, dass die Bits gesetzt, gelöscht oder beibehalten werden, selbst wenn die Bits explizit erwähnt werden. Beispielsweise behält OpenBSD 3.9 mkdir -m 777 D
das D
Setgid-Bit bei, chmod 777 D
löscht es jedoch. Im Gegensatz dazu , Solaris 10 mkdir -m 777 D
, mkdir -m g-s D
und
chmod 0777 D
alle erhalten D
‚s setgid bit, und Sie müssen etwas verwenden , wie chmod g-s D
es zu deaktivieren.
In # 8391 gibt es mehr zu diesem Thema , einschließlich der weiteren Begründung, dass die führende 0 mehrdeutig ist (dies könnte für den Benutzer entweder gelöschte Bits oder einen Oktalwert anzeigen). Das coreutils
Handbuch enthält außerdem einen eigenen Abschnitt, Verzeichnisse sowie die Bits Set-User-ID und Set-Group-ID . Dies zeigt, dass es GNU-Erweiterungen gibt, mit denen die fraglichen Bits gelöscht werden können:
chmod =700 ~/testdir
chmod 00700 ~/testdir
beide löschen die Bits (sind aber nicht portierbar).