Uprzywilejowany dostęp do plików i katalogów zależy w rzeczywistości od możliwości, a nie tylko od bycia root
lub nie. W praktyce root
zazwyczaj ma wszystkie możliwe możliwości, ale zdarzają się sytuacje, w których wszystkie / wiele z nich można usunąć lub przekazać innym użytkownikom (ich procesom).
W skrócie opisałeś już, jak działają kontrole kontroli dostępu dla procesu uprzywilejowanego. Oto, w jaki sposób wpływają na to różne możliwości:
Główną funkcją jest tutajCAP_DAC_OVERRIDE
proces, który może „pomijać odczyt, zapis i wykonywanie pliku i sprawdzanie uprawnień”. Obejmuje to odczytywanie i zapisywanie dowolnych plików, a także czytanie, zapisywanie i uzyskiwanie dostępu do katalogów.
W rzeczywistości nie dotyczy wykonywania plików, które nie są oznaczone jako pliki wykonywalne. Komentarz wgeneric_permission
( fs/namei.c
), zanim kontroli dostępu do plików, mówi, że
Przetworniki DAC do odczytu / zapisu są zawsze nadpisywane. Wykonywalne przetworniki cyfrowo-analogowe są nadpisywane, gdy istnieje co najmniej jeden zestaw bitów exec.
A kod sprawdza, czy jest x
ustawiony przynajmniej jeden bit, jeśli próbujesz wykonać plik. Podejrzewam, że to tylko funkcja wygody, aby zapobiec przypadkowemu uruchomieniu losowych plików danych i otrzymaniu błędów lub dziwnych wyników.
W każdym razie, jeśli możesz zastąpić uprawnienia, możesz po prostu wykonać plik wykonywalny i uruchomić go. (Choć teoretycznie może to mieć znaczenie dla plików setuid procesu, można było nadpisywać uprawnienia do plików ( CAP_DAC_OVERRIDE
), ale nie ma innych powiązanych funkcji ( CAP_FSETID
/ CAP_FOWNER
/ CAP_SETUID
). Ale CAP_DAC_OVERRIDE
pozwala na edycję /etc/shadow
i tym podobne, więc jest w przybliżeniu równa i tak po prostu mieć pełny dostęp do roota).
Istnieje również CAP_DAC_READ_SEARCH
możliwość, która pozwala czytać dowolne pliki i uzyskiwać dostęp do dowolnych katalogów, ale nie można ich uruchamiać ani zapisywać; i CAP_FOWNER
to pozwala procesowi robić rzeczy, które zwykle są zarezerwowane tylko dla właściciela pliku, takie jak zmiana bitów uprawnień i grupy plików.
Przesłanianie lepkiego bitu w katalogach jest wymienione tylko poniżej CAP_FOWNER
, więc wydaje się, CAP_DAC_OVERRIDE
że nie wystarczy to zignorować. (To dałoby ci pozwolenie na pisanie, ale zwykle w lepkich katalogach i tak masz, i +t
to ogranicza.)
(Myślę, że specjalne urządzenia liczą się tutaj jako „pliki”. Przynajmniej generic_permission()
ma tylko kontrolę typu dla katalogów, ale nie sprawdziłem poza tym.)
Oczywiście nadal istnieją sytuacje, w których nawet możliwości nie pomogą w modyfikacji plików:
- niektóre pliki w
/proc
i /sys
, ponieważ tak naprawdę nie są to pliki rzeczywiste
- SELinux i inne moduły bezpieczeństwa, które mogą ograniczać rootowanie
chattr
niezmienne +i
i dołączają tylko +a
flagi na ext2 / ext3 / ext4, które zatrzymują nawet rootowanie i zapobiegają również zmianie nazw plików itp.
- sieciowe systemy plików, w których serwer może wykonywać własną kontrolę dostępu, np.
root_squash
w NFS mapuje root na nikogo
- BEZPIECZNIK, który, jak zakładam, mógłby zrobić wszystko
- wierzchowce tylko do odczytu
- urządzenia tylko do odczytu
capabilities(7)
stronie podręcznika - rozważ zgłoszenie błędu!