SELinux - confined users
Kolejny wpis z serii SELinux w tytule. Poprzedni wpis koncentrował się na ograniczaniu działania konkretnej aplikacji, tym razem na celownik trafiają użytkownicy.
Począwszy od Fedory 9 mamy do czynienia z pojęciem confined users, są to użytkownicy, którzy przypisani mają konkretne role, a one z kolei są ściśle kontrolowane przez SELinux. Wyróżniamy w systemie Fedora 13 następujących ..confined users'':
- guest_u
- xguest_u
- user_u
- staff_u
- sysadm_u
- git_shell_u
Użytkownik, który mam przypisaną rolę guest_r, może się zalogować do systemu, natomiast nie może wykonywać programów w swoim katalogu domowym, nie może wykonywać programów typu suid (nie przełączy się np. poprzez su), nie może nawiązywać połączeń sieciowych. Rozszerzeniem roli guest_r jest rola xguest_r, jak nie trudno zgadnąć może zalogować się do serwera X-ów oraz może łączyć się ze światem za pomocą tylko i wyłączenie przeglądarki firefox. Reszta ról omówiona jest pod adresem [1]. Zostaje tylko rola git_shell_u i ją też zapewne łatwo zaklasyfikować, jasności nabierze po wykonaniu polecenia:
sesearch --allow -s git_shell_t
zaprezentuje ono wszystkie reguły allow dla danego typu.
Przypisanie konkretnej roli do istniejącego konta wykonać można następująco:
usermod -Z guest_u nazwa_uzytkownika
sprawdzenie czy przypisanie się powiodło:
semanage login -l
Rola guest_r jest dobrym punktem wyjścia do tworzenia nowych ról np. poprzez dodawania kolejnych uprawnień. Załóżmy, że nasz nieszczęśnik z rolą guest_r ma mieć możliwość nawiązywania połączeń na portach http (m.in. 80, 443). Do tego celu podobnie jak w przykładzie aplikacji w poprzednim wpisie wykorzystamy tryb permissive oraz audit.log. Po próbie połączenie wygenerowany został wpis audytu na bazie którego stworzymy nowy moduł rozszerzający uprawnienia guest_r:
cat /var/log/audit/audit.log | audit2allow -m guestenh > guestenh.te
po skompilowaniu i dodaniu modułu, użytkownik z guest_r będzie mógł ustawiać połączenia do portów zdefiniowanych jako http_port_t. Należy pamiętać, że tym sposobem rozszerzyliśmy sobie niebezpiecznie std. rolę guest_r, korzystniej jest stworzyć nową rolę na bazie roli guest_r. Uczynić tą można najprościej graficzną nakładką na SELinux’a system-config-selinux.
Opisywana rola guest_u znacząco ogranicza poczynania nieuprawnionych użytkowników, można ją dowolnie rozbudowywać. Stanowi ona dobry punkt wyjściowy do stworzenia użytkownika typu kiosk ( patrz. komputery ogólnie dostępne dla wszystkich ) lub też służyć może do bezpiecznego surfowania po internecie (patrz. xguest_u) np. złośliwy kod pobrany z internetu nie będzie miał szansy się wykonać, podobnie jak kilka wydawać by się mogło std. poleceń:
:::bash
[guest@fedora13 ~]$ id -Z
guest_u:guest_r:guest_t:s0
[guest@fedora13 ~]$ w
Segmentation fault (core dumped)
[guest@fedora13 ~]$ top
Segmentation fault (core dumped)
[guest@fedora13 ~]$ dmesg
klogctl: Permission denied
[guest@fedora13 ~]$ less /var/log/messages
/var/log/messages: Permission denied
[guest@fedora13 ~]$ su -
Command not found.
powered by Hugo and Noteworthy theme