Warum ist das Setuid-Berechtigungsbit in modernen Unix-Systemen nicht für mkdir gesetzt?

745
Anirudh Ramanathan

Bach sagt folgendes:

mkdir ist ein typisches setuidProgramm. Nur ein Prozess mit einem effektiven UID-Stammverzeichnis kann einen Ordner erstellen. (Abschnitt 7.6, Seite 229)


Ich habe die Berechtigungen für Ubuntu 12.04 geprüft, das Setuid-Bit ist nicht gesetzt.

-rwxr-xr-x 1 root root 42624 Oct 2 08:55 mkdir ^?? 

Dann habe ich andere Programme überprüft, die dieses Set haben sollen, wie pingund suund und sie haben es eingestellt.

-rwsr-xr-x 1 root root 34740 Nov 8 2011 ping ^---there it is  

Wie funktioniert das mkdir? Haben sich die Dinge geändert, seit Bach das geschrieben hat?

3
Das mag der Fall sein, aber es ist auch keine Programmierfrage. Hasturkun vor 11 Jahren 0
IIRC, zu der Zeit, als Bach schrieb, dass es keine separaten Systemaufrufe für Verzeichnisse gab, funktionierten open () und read () und write () auch für Verzeichnis-Inodes. Mit möglichen schädlichen Wirkungen. vor 11 Jahren 1

3 Antworten auf die Frage

5
jim mcnamara

Der Aufruf von mkdir () gibt es seit BSD 4.2. Es wurde später zu SYSV 3.0 hinzugefügt. Siehe: http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html

BSD 4.2 erschien 1984: http://www.unix.org/what_is_unix/history_timeline.html

Wenn der Zugriff auf einen Kernelmodus-Einstiegspunkt in UNIX über einen Syscall vom Benutzermodus aus uneingeschränkt zulässig ist, was duskwuff angibt, ist setuid nicht erforderlich.

Wow, danke für die Links und die Timeline. Die ältere Version von mkdir.c, die Sie verlinkt haben, scheint den Systemaufruf `setuid ()` nicht durchzuführen. Ist es definitiv das Richtige? Anirudh Ramanathan vor 11 Jahren 0
Diese Version von mkdir war relativ modern - sie verwendet `mkdir ()`. duskwuff vor 11 Jahren 1
3
duskwuff

Sie müssen nicht mehr über Root-Berechtigungen verfügen, um einen Ordner zu erstellen. Stattdessen gibt es jetzt einen mkdir()Systemaufruf, mit dem jeder Prozess ein Verzeichnis erstellen kann.

1
Jens

Haben sich die Dinge geändert, seit Bach das geschrieben hat?

Genau. Die Berechtigung zum Erstellen eines Verzeichnisses basiert heutzutage auf der Schreibberechtigung für das übergeordnete Verzeichnis oder dem tBit (für / tmp-ähnliche Verzeichnisse, in denen jeder ein Verzeichnis erstellen kann, aber Sie können nur Dateien löschen, die Ihnen gehören).

Ich stimme zu, aber dies betrifft Berechtigungen für die ausführbare Datei mkdir, nicht den Zielordner. Anirudh Ramanathan vor 11 Jahren 0
Nun, genau das hat sich geändert. Der Berechtigungsprüfungshash wurde von der Überprüfung des Setuid-Bits der ausführbaren Datei der ausführbaren Datei für den effektiven Benutzer verschoben. Jens vor 11 Jahren 0