[ Pobierz całość w formacie PDF ]
.To dodatkowe obostrzenie łatwo jest dodać bez konieczności programowania:auth required pam_listfile.so onerr=fail item=tty sense=allow \file=/etc/authcat-ttysauth required pam_unix.soaccount required pam_unix.soW podobny sposób, bez potrzeby dokonywania jakichkolwiek zmian w naszym programie, mogą być dodane do programu inne obostrzenia, czy inne metody uwierzytelnienia.Binarna wersja programu jest skompilowana w następujący sposób:$ gcc authcat authcat.c -lpam -ldl -lpam_miscTeraz można uruchomić program na dowolnym pliku i wprowadzić hasło po pojawieniu się zachęty, jak pokazano poniżej:$ authcat temp.ascPassword:Na tym etapie plik będzie zapisany na stdout i może być skierowany w potoku na wejście less lub do jakiegoś odpowiednika.Jeśli pojawi się problem, to użytkownik go dostrzeże:$ authcat temp.ascPassword:authpam: auth errorAdministrator może odnaleźć błąd, który wystąpił, przeglądając zapis systemowych rejestrów zdarzeń, gdzie przechowywana jest informacja uwierzytelniająca o rzeczywistym błędzie (typowo /var/log/secure lub /var/log/auth.log).Zarządzanie przywilejamiPrzywileje superużytkownika są szerokie.Superużytkownik powinien móc zrobić w systemie dosłownie wszystko: odczytać i zapisać dowolny plik, przeformatować dysk twardy, nadużyć warstwy sprzętowej, zamknąć system i wiele innych rzeczy.Z tego powodu, jedynie zaufani administratorzy powinni mieć możliwość pracy jako superużytkownicy.Jednak przywileje superużytkownika są także wymagane do wykonywania innych usług systemowych jak: przyłączenie do uprzywilejowanego portu, bezpośredni dostęp do warstwy sprzętowej, czy nawet rejestracja w systemie.Dla złagodzenia możliwości wystąpienia błędu w zabezpieczeniu w programie, który musi działać jako użytkownik root (ang.root), system umożliwia procesom wydanie przywilejów użytkownika wtedy, kiedy jest to niezbędne.Można nawet tymczasowo wydać przywileje superużytkownika i potem je odebrać.W ten sposób, demon mógłby zebrać razem wszystkie operacje z przywilejami superużytkownika (ang.root-privileged) w jeden, odrębny od głównego demona, proces pomocniczy.Inna możliwość, to wykonanie wszystkich uprzywilejowanych operacji przy uruchamianiu, a natychmiast potem porzucenie specjalnych przywilejów.Porzucanie i odzyskiwanie przywilejówJest osiem różnych identyfikatorów ID związanych z każdym procesem Linuksa: po dwa (dla użytkownika i grupy) dla każdego spośród czterech różnych typów.Sześć z nich ma właściwość łatwego przenoszenia do większości współczesnych systemów UNIX-a, podczas gdy pozostałe dwa nie mają tej właściwości.Identyfikatorami są:lRzeczywisty ID (Real ID).Rzeczywisty ID to tak zwany „autorytatywny” (ang.authoritative) ID.Jest to identyfikator, wskazujący faktycznego użytkownika lub grupę.llEfektywny ID (Effective ID).Efektywny ID steruje przywilejami aktualnie posiadanymi.To właśnie ten ID ulega zmianie, gdy, na przykład, uruchamia się program z atrybutami setuid lub setgid.llZapisany ID (Saved ID).W pewnych okolicznościach, kiedy proces zmienia jeden ze swoich identyfikatorów ID, stary ID jest zachowany w zapisanym ID.Może to być wykorzystane do odzyskania przez proces przywileju, kiedyś już posiadanego.llID systemu plików (Filesystem ID).To jest ID, który jest konsultowany dla określenia czy ma się uprawnienia dostępu do obiektu z systemu plików.Jest to ID specyficzny dla Linuksa, i implementowany przede wszystkim do pomocy w zabezpieczeniu NFS (ang.Network File System).Zasadniczo nie powinien być używany, ponieważ ID systemu plików zostaje automatycznie ustawiony na wartość efektywnego ID, jeśli ten ulega zmianie.lPrzy zmianie identyfikatorów, należy przestrzegać podstawowej zasady: jeśli żaden z identyfikatorów rzeczywisty, efektywny lub zapisany nie równa się 0, to rzeczywisty ID może być tylko zmieniony na bieżącą wartość efektywnego ID, a efektywny ID może być tylko zmieniony na bieżącą wartość rzeczywistego ID lub zapisanego ID.Superużytkownik może zmienić dowolny identyfikator na dowolną poprawną wartość.System będzie zmieniał zapisany ID okresowo, w miarę zmian innych identyfikatorów.Jest on ustawiony na efektywny ID, ilekroć rzeczywisty ID się zmienia oraz ilekroć efektywny ID jest zmieniony na inną wartość niż rzeczywisty ID.Dodatkowo, może być odręcznie zmieniony za pomocą wywołań setresuid(2) i setresgid(2), opisanych poniżej.Funkcje get*id i set*idJest dostępnych wiele funkcji do odzyskiwania i ustawiania identyfikatorów.Zasadniczo mogą być one podzielone na kilka rodzin, każda z odmianami dla uzyskiwania i ustawiania identyfikatorów i oddzielnymi zestawami funkcji dla ustawiania identyfikatorów użytkownika lub grupy.Wszystkie one są dostarczone przez POSIX, chyba że zaznaczono inaczej i powinny być obecne w każdym nowoczesnym UNIX-ie.Rodziny są następujące:l{g,s}et[e]{u,g}id
[ Pobierz całość w formacie PDF ]