SUID i SGID w Linux Explained With Examples
On 1 października, 2021 by adminWyobraź sobie sytuację, w której masz skrypt lub plik wykonywalny, który zawsze musi być uruchomiony przez konkretnego użytkownika, po prostu dlatego, że ten użytkownik ma odpowiednie prawa dostępu do działań podjętych przez skrypt. Również chcesz, aby inni użytkownicy mogli wykonać ten skrypt, ale ostatecznie musi on być uruchomiony jako oryginalny użytkownik skryptu (ponieważ ten użytkownik ma tylko wymagane zestawy uprawnień dla podejmowanych działań).
Domyślnie aplikacje i programy Linuksa działają z tymi samymi uprawnieniami użytkownika, który je wykonuje. Z tego powodu, potrzebujemy dobrego rozwiązania dla wyżej wymienionej sytuacji (tj.: Wszyscy użytkownicy powinni być w stanie wykonać program należący do konkretnego użytkownika, tak jakby właściciel sam go wykonał).
To jest miejsce gdzie SUID wchodzi w grę. SUID jest niczym innym jak specjalnym bitem uprawnień dostępnym w Linuksie, który osiąga to z dużą łatwością.
Jeśli jesteś właścicielem pliku wykonywalnego, z pomocą zestawu uprawnień SUID, inni użytkownicy będą uruchamiać plik wykonywalny z twoimi uprawnieniami, a nie ich.
SUID jest zwykle używany w Linuksie, do zapewnienia podwyższonych przywilejów tymczasowo podczas wykonywania. To podniesienie przywilejów nie jest wcale trwałe. Jest to tymczasowe podniesienie uprawnień tylko wtedy, gdy program/skrypt jest wykonywany.
Przykłady plików wykonywalnych w Linuksie z ustawionym bitem uprawnień SUID
Zrozummy to na przykładzie. Z powyższej listy plików wykonywalnych,/usr/bin/passwd jest czymś co powinno być wykonywalne przez wszystkich użytkowników w systemie (to dlatego, że wszyscy użytkownicy powinni być w stanie zmienić swoje hasło). Jeśli nie wiesz jak działają hasła w linuxie, polecam przeczytanie poniższego artykułu.
Przeczytaj: Jak działają hasła w Linuxie
Aktualizacja hasła użytkownika wymaga od niego edycji pliku /etc/passwd, /etc/shadow w linuxie. Jednakże, jest to dozwolone tylko dla użytkownika root. Jest to powód dla którego bit SUID jest zastosowany na pliku /usr/bin/passwd. Ponieważ root jest właścicielem tego pliku, a SUID jest ustawiony na tym pliku, każdy użytkownik wykonujący polecenie /usr/bin/passwd wykona je jako użytkownik root. Zobaczmy to w praktyce.
Poniżej pokazana jest komenda passwd wydana przez użytkownika o imieniu sarath. Zobaczmy czy ta komenda passwd jest wykonywana jako użytkownik root.
$ passwdChanging password for user sarath.Changing password for sarath.(current) UNIX password:
Otwórzmy inny terminal, i odpalmy ps aux commad i zobaczmy czy komenda passwd jest wykonywana jako użytkownik root. Można to zrobić w sposób pokazany poniżej.
$ ps aux | grep passwdroot 24531 0.0 0.0 156928 1664 pts/0 S+ 07:24 0:00 passwd
Widać wyraźnie, że proces polecenia passwd jest uruchomiony z użytkownikiem root (widoczne z pierwszego pola powyższego wyjścia). Podobnie do polecenia passwd, każde polecenie z poprzednio pokazanej listy plików z zastosowaniem SUID, będzie zawsze uruchamiane z uprawnieniami właściciela pliku, niezależnie od tego, który użytkownik je wykonuje.
Zauważ również fakt, że nawet polecenie ping jest SUID (Zobacz początkową listę podaną powyżej), to dlatego, że wykonanie PING wymaga kilku operacji sieciowych, które mogą być wykonane tylko przez roota.
Jak skonfigurować SUID w Linuksie?
Konfiguracja SUID na twoich wymaganych plikach/skryptach jest pojedynczą komendą CHMOD.
$ chmod u+s /path/to/file/or/executable
Zastąp „/path/to/file/or/executable”, w powyższej komendzie, bezwzględną ścieżką do skryptu, na którym potrzebujesz bitu SUID. Można to osiągnąć za pomocą numerycznej metody chmod, jak również.
$ chmod 4755 /path/to/file/or/executable
Pierwsze „4” w „4755” oznacza SUID. Inny przykład metody numerycznej jest pokazany poniżej.
$ chmod 4750 /path/to/file/or/executable
Podstawowo, w metodzie numerycznej, po prostu dodaj 4 do innych zestawów uprawnień, które są potrzebne na tym pliku.
Jak sprawdzić, czy SUID jest zastosowany na pliku, czy nie?
Możesz sprawdzić, czy bit SUID jest zastosowany na pliku, czy nie, używając polecenia ls, jak pokazano poniżej.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Polecenie ls -l powinno pokazać, czy SUID jest zastosowany, czy nie. Po prostu spójrz na pierwsze pole wyjścia ls -l. Litera s w -rwsr-xr-x oznacza bit SUID. W niektórych przypadkach zobaczysz duże S zamiast małego s, które widzieliśmy powyżej. Duże S wskazuje, że nie ma uprawnień do wykonywania tego pliku/skryptu.
root@ip-10-12-2-217:/usr/bin# chmod -x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwSr--r-- 1 root root 47032 Jul 15 2015 passwd
Z powyższego wyjścia widać wyraźnie, że usunięcie uprawnień wykonywalnych z pliku /usr/bin/passwd zmieniło wyjście ls -l w duże S. Dodanie uprawnień wykonywalnych z powrotem do tego pliku sprawi, że będzie to małe s, jak pokazano poniżej.
root@ip-10-12-2-217:/usr/bin# chmod +x passwdroot@ip-10-12-2-217:/usr/bin# ls -l passwd-rwsr-xr-x 1 root root 47032 Jul 15 2015 passwd
Jak znaleźć wszystkie pliki, które mają włączony bit SUID w linuxie?
Możesz użyć poniższego polecenia find, aby wyszukać wszystkie pliki w systemie, które mają włączony bit SUID. Jeśli jesteś nowy w poleceniu find, polecam przeczytanie poniższego artykułu.
Przeczytaj: Polecenie find w Linuksie z przykładami
root@ip-10-12-2-217:~# find / -perm -4000 -exec ls -l {} \;
Zastąp pierwszy / w powyższym poleceniu wymaganą lokalizacją, aby znaleźć wszystkie pliki SUID w tej lokalizacji. Na przykład, aby znaleźć wszystkie pliki z SUID wewnątrz /usr/bin, uruchom poniższe polecenie.
Pamiętaj, że bit SUID jest ignorowany w katalogach w Linuksie.
SGID jest bardzo podobny do SUID. Jedyna różnica polega na tym, że skrypt/plik, który ma skonfigurowany SGID, będzie uruchamiany z takimi samymi uprawnieniami właściciela grupy.
Jeśli skonfigurujesz SGID na katalogach, wszystkie pliki lub katalogi utworzone wewnątrz tego katalogu będą posiadały te same wspólne uprawnienia grupy (właściciela grupy katalogu, w którym skonfigurowano SGID).
Przykłady plików SGID w linuxie
Jak skonfigurować SGID w Linuxie?
Podobnie jak SUID, SGID może być skonfigurowany za pomocą polecenia chmod, jak pokazano poniżej.
root@localhost:~# chmod g+s /path/to/file
Zamień „/path/to/file”, w powyższym poleceniu, z bezwzględną ścieżką skryptu, na którym potrzebujesz bitu SGID. Można to osiągnąć również za pomocą numerycznej metody chmod (pokazanej poniżej).
root@localhost:~# chmod 2755 /path/to/file
Jak sprawdzić, czy SGID jest zastosowane na pliku lub skrypcie?
Podobnie do SUID, możesz łatwo wykonać polecenie ls -l na pliku/katalogu, aby sprawdzić, czy SGID jest włączone, czy nie. Poniższy przykład pokazuje to samo.
root@ip-10-12-2-217:# cd /usr/binroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Mała część s pierwszego pola w about output (-rwxr-sr-x) wskazuje na bit SGID. Podobnie do SUID, jeśli nie masz zastosowanego uprawnienia wykonywalnego na grupie, będzie to duże S zamiast małego, jak pokazano poniżej.
root@ip-10-12-2-217:/usr/bin# chmod g-x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-Sr-x 1 root shadow 54968 Jul 15 2015 chage
A włączenie uprawnienia wykonywalnego na grupie, uczyni to małe s (pokazane poniżej.)
root@ip-10-12-2-217:/usr/bin# chmod g+x chageroot@ip-10-12-2-217:/usr/bin# ls -l chage-rwxr-sr-x 1 root shadow 54968 Jul 15 2015 chage
Dodaj komentarz