chown usuwa bit setuid: błąd lub funkcja?


14

Kroki ku reprodukcji:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

Testowane z użyciem Debian squeeze i Ubuntu 12.04


Czy to dotyczy również Fedory 17.
BenjiWiebe,

Odpowiedzi:


17

Nie jest to błąd zgodnie z dokumentacją Chown:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.

Dzięki jlliagre. Nie wiedziałem info coreutilswcześniej Czytam tylko stronę podręcznika i przeszukuję sieć.
Germar

12

Jest to zgodne z projektem i jest to standardowe zachowanie. Cytując standard POSIX :

O ile proces wywoływania chown nie zostanie wywołany przez proces z odpowiednimi uprawnieniami, bity set-user-ID i set-group-ID zwykłego pliku zostaną wyczyszczone po pomyślnym zakończeniu; bity set-user-ID i set-group-ID innych typów plików mogą zostać wyczyszczone.

( snawiasem mówiąc, jest setuid (lub setgid w kolumnie grupy), nie jest lepki).

To zachowanie jest zgodne z podstawowym wywołaniem systemowym (z wyjątkiem tego, że w niektórych systemach bity setxid są czyszczone tylko dla plików wykonywalnych).

Powodem usunięcia bitu setuid jest to, że zmiana właściciela zmienia również, który użytkownik będzie efektywnym identyfikatorem użytkownika procesu. W szczególności w systemach, w których użytkownik może rozdawać pliki, cp /bin/sh foo; chmod u+s foo; chown joe footworzyłby plik wykonywalny setuid należący do Joe, gigantycznej luki bezpieczeństwa.


Upvoting dla nitpick! SUID / SGID nie są „lepkim” kawałkiem!
Jim Dennis

Świetna uwaga na temat bezpieczeństwa zachowania SUID / SGID. Zachowywało mnie to, dopóki nie przeczytałem tego zdania. Dodałbym jednak, że nigdy nie widziałem, żeby chown nie usuwał bitów, nawet gdy działał jako root. Jestem ciekawy, co oznaczałyby „odpowiednie przywileje”.
vastlysuperiorman

1
@vastlysuperiorman Na klasycznej platformie Unix „odpowiednie uprawnienia” oznaczają identyfikator użytkownika 0. Ale POSIX pozwala systemom definiować własne polityki bezpieczeństwa. Na przykład w przypadku wielu operacji w systemie Linux „odpowiednie uprawnienia” są implementowane jako funkcja (domyślnie tylko root). W tym konkretnym przypadku pomija bity setxid podczas zmiany, niezależnie od uprawnień, jak większość, jeśli nie wszystkie warianty Uniksa. Ale warstwa POSIX w systemie Windows może działać inaczej.
Gilles 'SO - przestań być zły'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.