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+sund 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 chmodsind in den Versionshinweisen für coreutils6.0 angegeben :
chmod, installUnd mkdirjetzt ein Verzeichnis der Set-User-ID und set-group-ID - Bits erhalten , wenn Sie ausdrücklich etwas anderes verlangen. ZB chmod 755 DIRund behalten Sie
chmod u=rwx,go=rx DIRjetzt die DIRBits set-user-ID und set-group-ID bei, anstatt sie zu löschen, und ähnlich für mkdir -m 755 DIRund 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 Ddas DSetgid-Bit bei, chmod 777 Dlöscht es jedoch. Im Gegensatz dazu , Solaris 10 mkdir -m 777 D, mkdir -m g-s Dund
chmod 0777 Dalle erhalten D‚s setgid bit, und Sie müssen etwas verwenden , wie chmod g-s Des 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 coreutilsHandbuch 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).