Dlaczego bit uprawnień setuid nie jest ustawiony dla mkdir we współczesnych systemach uniksowych?

3

Bach stwierdza, co następuje:

mkdir to typowy setuidprogram. Tylko proces z efektywnym identyfikatorem UID może utworzyć folder. (Sekcja 7.6, strona 229)


Sprawdziłem uprawnienia na nim w Ubuntu 12.04, bit setuid nie jest ustawiony.

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

Potem sprawdziłem inne programy, które powinny mieć ten zestaw, jak pingi sui mają to ustawione.

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

Jak więc mkdirdziała? Czy coś się zmieniło, odkąd Bach to napisał?

Anirudh Ramanathan
źródło
Może tak być, ale nie jest to również kwestia programistyczna.
Hasturkun
1
IIRC, kiedy Bach napisał, że nie było osobnych wywołań systemowych dla katalogów, open () i read () i write () działały również dla i-węzłów katalogu. Z możliwymi efektami drastycznymi.

Odpowiedzi:

5

Wywołanie mkdir () istnieje od wersji BSD 4.2. Później został dodany do SYSV 3.0. Zobacz: http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html

BSD 4.2 pojawiło się w 1984 r .: http://www.unix.org/what_is_unix/history_timeline.html

Jeśli dostęp do punktu wejścia trybu jądra w systemie UNIX za pośrednictwem syscall jest dozwolony z trybu użytkownika bez ograniczeń, co wskazuje duskwuff, to setuid nie jest wymagany.

Jim Mcnamara
źródło
Wow, dzięki za linki i oś czasu. Starsza wersja pliku mkdir.c, który podlinkowałeś, nie wydaje się wywoływać setuid()systemu. Czy to zdecydowanie ta właściwa?
Anirudh Ramanathan
1
Ta wersja mkdir była stosunkowo nowoczesna - używa mkdir().
duskwuff
3

Nie trzeba już mieć uprawnień roota, aby utworzyć folder. Zamiast tego istnieje teraz mkdir()wywołanie systemowe, którego dowolny proces może użyć do utworzenia katalogu.

duskwuff
źródło
1

Czy coś się zmieniło, odkąd Bach to napisał?

Dokładnie. Zezwolenie na utworzenie katalogu jest obecnie oparte na uprawnieniu do zapisu do katalogu nadrzędnego lub tbitu (dla katalogów podobnych do / tmp, w których każdy może utworzyć katalog, ale można usuwać tylko pliki należące do ciebie).

Jens
źródło
Zgadzam się, ale dotyczy to uprawnień do pliku wykonywalnego mkdir, a nie folderu docelowego.
Anirudh Ramanathan
Właśnie to się zmieniło. Skrót sprawdzania uprawnień przeniesiono z sprawdzania setuid bitu pliku wykonywalnego mkdir do nadrzędnego bitu zapisu katalogów dla efektywnego użytkownika.
Jens