SETUID, SETGID i lepki bit

SETUID, SETGID i lepki bit
Linux ma 3 rodzaje dostępu do plików i katalogów: uprawnienia do czytania, pisania i wykonywania.

Czytanie uprawnienia zapewnia użytkownikom dostęp do plików odczytu podczas pisania uprawnień umożliwia użytkownikom edytowanie lub usuwanie plików, uprawnienia do wykonania pozwalają im uruchamiać pliki.

Uprawnienia te można zastosować z różnicami dla właściciela pliku, użytkowników należących do grupy pliku oraz wszystkich użytkowników (nie właściciela ani użytkowników grupy).

Bit setuid, setgid i lepki pozwalają wdrożyć dodatkowe ograniczenia lub uprawnienia bez zmiany tabeli uprawnień.

Regularne uprawnienia Linuksa zostały głęboko wyjaśnione w wyjaśnieniu uprawnień Linux, zalecane czytanie przed kontynuowaniem tego samouczka. Obecny samouczek koncentruje się na flagach setuid, setgid i lepkich, aby „dziedziczyć” właściciela pliku lub uprawnienia do grupy użytkownikom z ograniczonym dostępem i zapobiegaj usunięciu użytkowników bez uprzedzeń, których nie posiadają.

Zrozumienie bitu setuid:

Poniższy zrzut ekranu pokazuje zawartość katalogu LinuxhintSetUid oraz uprawnienia do plików:

Jak widać, wszystkie pliki należą do użytkownika i grupy Linuxhint; plik instruktaż.tekst czytał i pisał uprawnienia dla właściciela, czytanie uprawnień dla użytkowników tej samej grupy i brak uprawnień dla innych użytkowników.

Jeśli użytkownik inny niż właściciel pliku, który nie należy do grupy, próbuje odczytać plik, zawiedzie z powodu braku uprawnień dla wszystkich użytkowników lub innych użytkowników.

Poniższy zrzut ekranu pokazuje użytkownikowi Torvalds bezskutecznie próbowałem uzyskać dostęp do instruktaż.tekst plik.

Załóżmy teraz, że użytkownik Linuxhint chce zachować samouczek.TXT ograniczony, jednocześnie umożliwiając użytkownikom odczytanie tylko za pośrednictwem określonej aplikacji. Można to osiągnąć za pomocą flagi setuid.

Innymi słowy, użytkownik Torvalds nie będzie mógł odczytać pliku instruktaż.tekst. Mimo to będzie prowadził czytelnik-należący do użytkownika Linuxhint, Dziedziczenie jego uprawnień podczas procesu wykonania. Jest to możliwe, jeśli właściciel doda setuid Ugrut tabelę uprawnień pliku, instruując plik do zawsze przetwarzany jako przez właściciela i z uprawnieniami właściciela, nawet jeśli jest wykonywany przez innego użytkownika Torvalds.

NOTATKA: Możesz użyć poniższego kodu C, aby odtworzyć następujące przykłady. Kompiluj bieganie Kod CC.C -O Reader

Kod aplikacji czytnika:

#włączać
#include // dla funkcji exit ()
int main ()
Char C [1000];
Plik *fptr;
if ((fptr = fopen (”samouczek.txt "," r ")) == null)
printf („Błąd! Plik nie można otworzyć.");
// Program kończy, jeśli wskaźnik pliku zwróci NULL.
wyjście (1);

sen (5);
// odczytuje tekst, aż do napotkania Newline
fscanf (fptr, „%[^\ n]”, c);
printf („Dane z pliku: \ n%s”, c);
fclose (FPTR);
powrót 0;

Przed kontynuowaniem zobaczmy, co się stanie, jeśli użytkownik Torvalds, który ma uprawnienia do uruchomienia aplikacji czytelnik, Wykonuje czytelnik Przed Linuxhint zastosuje flagę setuid.

Jak widać, Torvalds udało się uruchomić czytnik, program C zaprojektowany do czytania samouczka.txt z następującą tabelą uprawnień, ale czytelnik nie dał mu dostępu do instruktaż.tekst ponieważ Torvalds nie ma uprawnień do przeczytania.

Czytelnik Tabela uprawnień pokazano poniżej:

-RWXR-XR-X 1 Linuxhint Linuxhint Reader

Teraz zobaczmy, co się stanie, kiedy Linuxhint dodaje flagę setuid do czytelnik Tabela uprawnień przez uruchomienie:

czytnik chmod u+

Jeśli biegniesz ls -l , Zauważysz, że tabela uprawnień zmieniła się, a nazwa programu pojawia się na czerwono, ostrzegając o możliwym ryzyku. Nowy tabelę uprawnień wygląda tak:

-RWSR-XR-X

Nowa S Podświetliłem się na niebiesko pokazuje, że plik ma flagę setuid; Za każdym razem, gdy plik jest wykonywany, proces będzie należeć do właściciela pliku niezależnie od tego, kto wykonuje program. Ponieważ właściciel wykona plik przed systemem, wykonanie odziedziczy uprawnienia właściciela. Dlatego teraz, później Linuxhint Dodano flagę setuid, użytkownik Torvalds Musi być w stanie przeczytać samouczek.txt przez czytelnik.

NOTATKA: Torvalds może uruchomić czytelnik Ponieważ wszyscy użytkownicy mają prawa do wykonania; Jeśli Linuxhint Usuwa uprawnienia do wykonania dla wszystkich użytkowników, Torvalds nie będzie w stanie tego uruchomić.

setuid Flaga definiuje plik jako przez właściciela, a użytkownik, który go wykonuje, odziedziczy uprawnienia właściciela, ale SETUID nie określa, kto może wykonać plik.

Jak widać, Torvaldsowi udało się przeczytać „Dane z pliku:

Nie powinieneś tego czytać ”.

Jeśli podczas uruchamiania skryptu uruchamiam następujące polecenie PS, zobaczysz różnicę między prawdziwym użytkownikiem (RUSER) a efektywnym użytkownikiem (użytkownikiem) procesu 4332 (czytnik).

ps -ao pid, uid, ruser, użytkownik, rgroup, egroup, polecenie

Powyższy zrzut ekranu pokazuje pomimo uruchomienia prawdziwego użytkownika czytelnik to Torvalds lub inny użytkownik, plik jest zawsze przetwarzany jak przez Linuxhint, z jego uprawnieniami i dlatego Torvalds może zobaczyć plik tylko za pośrednictwem aplikacji.

Flaga setuid można usunąć, uruchamiając:

CHMOD U-S

Zrozumienie bitów setgid:

Setgid jest podobny do setuid, ale zamiast zmienić użytkownika, który przetwarza plik, zastępuje grupę efektywną dla grupy plików, zapewniając dostęp do uprawnień grupy.

Jeśli bit setgid zostanie zastosowany do katalogu, wszystkie pliki utworzone w katalogu będą należeć do grupy katalogu.

Poniższy zrzut ekranu pokazuje, że Torvalds nie ma pozwolenia na odczytanie samouczka.TXT, tylko właściciel i grupa mogą odczytać plik. Nawet z czytelnik, Torvalds nie może odczytać pliku, ponieważ nie ma on uprawnień i nie dodano bitu setuid.

Zobaczmy, co się stanie po dodaniu Setgid: Linuxhint:

czytnik chmod g+


-RWXR-SR-X: Jak widać w tabeli uprawnień, teraz S znajduje się w kolumnie grupy, co oznacza, że ​​po wykonaniu programu zawsze będzie działał z własnymi uprawnieniami grupy.

Zobaczmy więc, co się stanie, gdy Torvalds próbuje uzyskać dostęp do samouczka.TXT ponownie za pomocą czytnika:

Torvalds udało się przeczytać samouczek.tekst; Zobaczmy, co pokazuje polecenie PS w procesie czytelnika:

ps -ao pid, uid, ruser, użytkownik, rgroup, egroup, polecenie

Jak widać w procesie 6713, użytkownikiem uruchamiającym plik jest Torvalds, ale skuteczną grupą jest Linuxhint, grupa pliku; Dlatego Torvalds mógł uzyskać dostęp do samouczka.TXT z uprawnieniami grupy czytelnika.

Bit setgid można usunąć, uruchamiając:

CHMOD G-S

Zrozumienie lepkiego bitu:

Kolejnym bitem uprawnień jest lepki bit, który, jeśli zostanie zdefiniowany, uniemożliwia użytkownikom niepewnym usunięciu treści. Jeśli zastosowano lepki bit, tylko właściciel lub root może usunąć pliki, ale nie wszystkich użytkowników, nawet jeśli mają uprawnienia do pisania.

Poniższy przykład pokazuje, że użytkownik Linuxhint dodaje lepki bit do bieżącego katalogu:

chmod +t .

drwxr-xr-t: Jak widać teraz, jest T na końcu tabeli uprawnień LinuxhintSetUid informator. Oznacza to, że użytkownicy nie mogą usuwać plików, których nie posiadają w katalogu, nawet jeśli mają uprawnienia do pisania.

Poniższy zrzut ekranu pokazuje uprawnienia do pliku o nazwie „coś„W ramach katalogu LinuxhintSetUid ze specjalnym bitem lepki:

Jak widać, pomimo pisania uprawnień zarówno w katalogu, jak i na pliku, Torvalds nie może usunąć pliku coś:

Mam nadzieję, że znalazłeś ten samouczek na setuid, setgid i lepki bit przydatny. Kontynuuj podążaj Linuxhint, aby uzyskać więcej wskazówek i samouczków Linux.