Rzecz w tym, że zawsze myślałem, że te uprawnienia się załamują, zaczynając od najbardziej ogólnego (inne -> grupa -> użytkownik).
Gdyby tak było, wówczas dla wszystkich obowiązywałyby „inne” uprawnienia.
Innymi słowy, jeśli o = rwx, kogo to obchodzi, jakie są oczekiwania dla grupy i użytkownika?
To różni się od twojego poprzedniego zdania. Tutaj sugerujesz, że uprawnienia są lub są połączone razem, np. Że użytkownik X ma uprawnienia do odczytu, jeśli użytkownik X jest właścicielem pliku i plik jest czytelny dla użytkownika, lub jeśli grupa, do której należy użytkownik X, jest właścicielem pliku, a plik jest grupą -czytelny lub jeśli plik można odczytać w inny sposób. Ale nie tak to działa. W rzeczywistości o=rwx
oznacza to, że rwx
uprawnienia dotyczą innych, ale nie mówi nic o podmiotach, które nie są innymi.
Po pierwsze, nie ma bezpośredniego znaczenia, do której grupy należy użytkownik. Jądro nie ma pojęcia użytkowników należących do grup. Jądro utrzymuje dla każdego procesu identyfikator użytkownika ( efektywny UID ) i listę identyfikatorów grup (efektywny GID i dodatkowe GID). Grupy są określane w czasie logowania przez proces logowania - to proces logowania odczytuje bazę danych grupy (np /etc/group
.). Identyfikatory użytkowników i grup są dziedziczone przez procesy potomne¹.
Gdy proces próbuje otworzyć plik z tradycyjnymi uprawnieniami w systemie Unix:
- Jeśli użytkownik będący właścicielem pliku jest efektywnym identyfikatorem UID procesu, używane są bity uprawnień użytkownika.
- W przeciwnym razie, jeśli grupa będąca właścicielem pliku jest efektywnym GID procesu lub jednym z dodatkowych identyfikatorów grupy procesu, wówczas używane są bity uprawnień grupy.
- W przeciwnym razie używane są inne bity uprawnień.
Zawsze używany jest tylko jeden zestaw bitów rwx. Użytkownik ma pierwszeństwo przed grupą, która ma pierwszeństwo przed innymi. Gdy istnieją listy kontroli dostępu , algorytm opisany powyżej jest uogólniony:
- Jeśli w pliku znajduje się lista ACL dla efektywnego identyfikatora UID procesu, służy ona do ustalenia, czy udzielono dostępu.
- W przeciwnym razie, jeśli w pliku znajduje się lista ACL dla efektywnego identyfikatora GID procesu lub jednego z dodatkowych identyfikatorów grupy procesu, używane są bity uprawnień grupy.
- W przeciwnym razie używane są inne bity uprawnień.
Zobacz także Pierwszeństwo ACLS, gdy użytkownik należy do wielu grup, aby uzyskać więcej informacji na temat korzystania z wpisów ACL, w tym efektu maski.
W ten sposób -rw----r-- alice interns
wskazuje plik, który Alice może odczytać i zapisać, i który może odczytać wszyscy inni użytkownicy oprócz stażystów. Plik z uprawnieniami i prawem własności ----rwx--- alice interns
jest dostępny tylko dla stażystów, z wyjątkiem Alicji (bez względu na to, czy jest stażystą, czy nie). Ponieważ Alicja może dzwonić w chmod
celu zmiany uprawnień, nie zapewnia to żadnych zabezpieczeń; to jest skrzynia krawędzi. W systemach z listami ACL uogólniony mechanizm pozwala na usunięcie uprawnień określonych użytkowników lub określonych grup, co czasem jest przydatne.
Użycie jednego zestawu bitów zamiast uporządkowania wszystkich bitów dla każdej akcji (odczyt, zapis, wykonanie) ma kilka zalet:
- Przydaje się to, umożliwiając usuwanie uprawnień z zestawu użytkowników lub grup w systemach z listami ACL. W systemach bez list ACL uprawnienia można usunąć z jednej grupy.
- Łatwiej jest go zaimplementować: sprawdź jeden zestaw bitów zamiast łączyć kilka zestawów bitów razem.
- Łatwiej jest analizować uprawnienia do pliku, ponieważ wymaga mniej operacji.
¹ Mogą się zmieniać, gdy wykonywany jest proces setuid lub setgid. Nie ma to związku z danym problemem.