Czy mogę pozwolić użytkownikom na chmod plik, który nie jest ich własnością?

17

Chciałbym umożliwić użytkownikom chmod plik, który jest własnością roota lub innego użytkownika, który nie jest sobą. Plik chmod'ed do 777 i dostaję komunikat „operacja niedozwolona”. Dodałem użytkownika do grupy pliku i otrzymałem to samo. Dlaczego użytkownik nie może chmod pliku, do którego ma dostęp do zapisu?

ashleysmithgpu
źródło
1
Zgodnie z tą logiką, dlaczego nie uruchomić wszystkiego jako root? Jeśli jakikolwiek użytkownik może zmienić dowolny tryb, po prostu niszczysz cały model uprawnień Unix ...
Chris Down
1
Co chcesz robić? może powinieneś rzucić okiem na sudo: linux.die.net/man/8/sudo & linux.die.net/man/5/sudoers
xx4h
Plik ma uprawnienia 777, użytkownik może przejść do „mv file file.old; cat file.old> file”, a teraz będzie właścicielem pliku i może go chmod. Dlaczego nie mogą „plik chmod 777”?
ashleysmithgpu
5
Nie, mogą to zrobić tylko wtedy, gdy mają uprawnienia do zapisu w katalogu. Jeśli użytkownik miałby prawo zmieniać uprawnienia do plików, których nie jest właścicielem, ustawiając tryb 04777 i kopiując do niego / usr / bin / env, mógłby uruchomić dowolne polecenie jako ten użytkownik.
Stéphane Chazelas
@StephaneChazelas To dziwny argument, ponieważ jądro może z łatwością zdecydować (i robi to!), Aby zezwolić nie-właścicielom na takie zmiany, nie będąc związanym tą decyzją, aby zezwolić na wszelkiego rodzaju zmiany. W końcu cały SUID jest resetowany nawet wtedy, gdy nie-właściciel zapisuje plik.
Hauke ​​Laging

Odpowiedzi:

8

Dlaczego użytkownik nie może chmod pliku, do którego ma dostęp do zapisu?

W przypadku normalnych praw dostępu jest to decyzja projektowa. Potrzebujesz richaclów : WRITE_ACLa może WRITE_OWNER.

Hauke ​​Laging
źródło
1
I powinieneś ostrzec, że richacls nie jest ogólnie dostępny.
sendmoreinfo
@sendmoreinfo Artykuł w Wikipedii mówi o tym i oczywiście należy go przeczytać, ponieważ moja odpowiedź nie wyjaśnia, czym są richacls i jak są używane. Z tego powodu uważanie poprawnej odpowiedzi za „nieprzydatną” jest śmieszne. Zwłaszcza, że ​​nie ma równoważnej alternatywy. Następnym razem dokonaj edycji, jeśli uważasz, że takie informacje są konieczne.
Hauke ​​Laging
Rozumiem, to decyzja projektowa, dziękuję
ashleysmithgpu
2
Oczywiście użyłeś tej funkcji, więc wytłumacz ją sam, własnymi słowami.
sendmoreinfo
10

Uprawnienia Unix zostały zaprojektowane tak, aby były proste. Potrzebne jest uprawnienie do odczytu do odczytu z pliku, uprawnienie do zapisu do pliku oraz uprawnienie do wykonania pliku. Musisz mieć plik, aby zmodyfikować jego metadane¹.

Zezwolenie użytkownikowi, który może odczytać plik, aby udzielić innym uprawnień do odczytu, lub zezwolenie użytkownikowi, który może napisać plik, aby udzielić innym uprawnień do zapisu, nie zmieniłoby znacząco modelu bezpieczeństwa. Wynika to z faktu, że uprawnienia unix są uznaniowe: użytkownik, który może odczytać plik, może udostępnić jego zawartość innym użytkownikom, nawet jeśli ci inni użytkownicy nie byliby w stanie odczytać pliku (i podobnie do zapisu, użytkownik może działać jako serwer proxy i pisz w imieniu innych).

Z drugiej strony, zezwolenie użytkownikowi na udzielenie pozwolenia, którego nie ma, całkowicie zepsułoby system uprawnień: użytkownik mógłby udzielić sobie wszystkich uprawnień.

Bardzo rzadko trzeba zmieniać uprawnienia do pliku, którego nie jesteś właścicielem. Zwykle plik powinien mieć odpowiednie uprawnienia natychmiast po jego utworzeniu. Jeśli naprawdę tego potrzebujesz, możesz przyznać sudo chmodprawa użytkownika do określonego trybu i określonego pliku (np joe: ALL = (ALL) chmod g+r /path/to/file.).

¹ Z wyjątkiem czasów dostępu i modyfikacji, które są szczególne, ponieważ ustawia je także odczyt lub zapis do pliku.

Gilles „SO- przestań być zły”
źródło
W moim przypadku użycia jest zarówno proces sieciowy (przez www-data), jak i proces cli (przeze mnie), które chcą ustawić uprawnienia do pliku. Dodałem się do grupy danych www, ale to nie wystarczy.
donquixote
Nawet zmiana właściciela / grupy na siebie: www-data nie pomaga. (Nie zaprojektowałem mechanizmu, który próbuje ustawić uprawnienia, nie mam nad nim kontroli)
donquixote