Kto może zmienić uprawnienia do pliku / katalogu?

14

Uważam (nie jestem pewien), że właściciel pliku / katalogu i użytkownik root są jedynymi użytkownikami, którzy mogą zmieniać uprawnienia do pliku / katalogu. Czy mam rację, czy są też inni użytkownicy, którzy mogą zmieniać uprawnienia?

użytkownik226341
źródło

Odpowiedzi:

19

Tylko właściciel i root(superużytkownik) mogą zmieniać uprawnienia do pliku lub katalogu. Oznacza to, że właściciel i superużytkownik mogą ustawić uprawnienia do odczytu ( r), zapisu ( w) i wykonania ( x). Ale zmiana własności (użytkownika / grupy) plików i katalogów za pomocą poleceń chown/ chgrpjest dozwolona tylko root.

Rakib
źródło
19
Właściciel pliku może zmienić własność grupy dla tego pliku, jeśli użytkownik jest członkiem nowej grupy.
Kusalananda
7

Do celów normalnej pracy tylko root i właściciel mogą chmod. Ponadto główny można chowna chgrp, a ponadto właściciel może chgrpile właściciel jest członkiem grupy docelowej.

Ze względów bezpieczeństwa istnieje jednak inny przypadek: każdy użytkownik z uprawnieniami do zapisu w katalogu zawierającym plik może zastąpić plik kopią, a tym samym stać się właścicielem, uzyskując możliwość modyfikowania uprawnień i zawartości.

Tak jak:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

Stworzyliśmy katalog i napisaliśmy plik jako root. Ponieważ root jest właścicielem pliku, nie możemy do niego zapisywać, ani nie możemy chmod:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

Mamy jednak uprawnienia do zapisu do katalogu, więc możemy zastąpić plik, aby uzyskać własność:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

A teraz, kiedy jesteśmy właścicielem, możemy oczywiście robić, co chcemy z tym plikiem:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

Podobnie każdy użytkownik z uprawnieniami do zapisu do dowolnego katalogu w pełnej ścieżce prowadzącej do pliku może od tego momentu zastąpić strukturę katalogu, uzyskując w ten sposób własność pliku o podanej nazwie. Oczywiście własność lub uprawnienia rzeczywistego oryginalnego pliku (którego nazwę zmieniliśmy na „twój_plik2”) nie ulega zmianie.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2
Bas
źródło
Czy wiesz, czy jakakolwiek dystrybucja Linuksa obsługuje dodatkowe funkcje bezpieczeństwa, takie jak Windows? Jeśli korzystam z systemu Windows, mogę ustawić odmowę usunięcia pliku, aby zapobiec usunięciu, nawet jeśli katalog jest dozwolony.
Kevin Li
Wiele (najbardziej?) Obecnych odmian Linuksa obsługuje listy kontroli dostępu na poziomie plików ( getfacl / setfacl), które zapewniają większą elastyczność niż uprawnienia do plików w „klasycznym” stylu. Usuwanie pliku w * nix polega na usunięciu łącza do pliku z katalogu, więc usunięcie pliku jest zawsze kontrolowane przez uprawnienia do katalogu; same uprawnienia do plików nie odgrywają tam żadnej roli.
Bas
Bardzo wierny uniksowej filozofii „wszystko jest plikiem”. Więc mówisz, że czegoś takiego nie można zrobić w systemie Linux?
Kevin Li
3
@KevinLi Ta odpowiedź nie jest naprawdę kompletna. Możesz ustawić bit lepki w katalogu, aby ograniczyć możliwość nie-właścicieli usuwania lub zmiany nazw plików. Zobacz to pytanie i odpowiedzi: unix.stackexchange.com/questions/79395/... Nie ma potrzeby używania list ACL ani innych schematów.
Andrew Henle,
Systemy plików @KevinLi * nix są bardzo różne od systemów Windows. Pliki istnieją niezależnie od hierarchii katalogów i mogą mieć kilka „twardych łączy” wskazujących na nie w katalogach. Usunięcie pliku w rzeczywistości oznacza usunięcie twardego łącza, które odbywa się w katalogu. Plik śledzi, ile twardych linków wskazuje na niego, a rzeczywisty plik pozostanie na dysku, dopóki będzie wskazywał co najmniej jeden twardy link. Zatem, delecja jest kontrolowana przez uprawnienia katalogu, co zrobić mają specjalną opcję, aby zezwolić tylko Usuwa przez właściciela pliku i korzenia, jak mówi Andrew.
Bas
1

chmodPolecenie dość bezpośrednio wywołuje funkcję systemową o tej samej nazwie; strona podręcznika chmod(2)systemowego wywołania (w Linuksie 4.10) mówi:

Efektywny identyfikator UID procesu wywołującego musi być zgodny z właścicielem pliku lub proces musi być uprzywilejowany (Linux: musi mieć taką CAP_FOWNERmożliwość).

Jeśli proces wywoływania nie jest uprzywilejowany (Linux: nie ma takiej CAP_FSETIDmożliwości), a grupa pliku nie pasuje do efektywnego identyfikatora grupy procesu lub jednego z jego dodatkowych identyfikatorów grupy, S_ISGIDbit zostanie wyłączony, ale to nie spowoduje zwrócenia błędu.

Tak, proces działający jako root może zmienić uprawnienia dowolnego pliku, jeśli nie porzucił CAP_FOWNERmożliwości.


Interesujące jest również chown; strona podręcznika man chown(2)mówi:

Tylko proces uprzywilejowany (Linux: jeden z CAP_CHOWNmożliwością) może zmienić właściciela pliku. Właściciel pliku może zmienić grupę pliku na dowolną grupę, której członek jest członkiem. Proces uprzywilejowany (Linux: z CAP_CHOWN) może dowolnie zmienić grupę.

Toby Speight
źródło