Uznaniowa kontrola dostępu (Discretionary Access Control - DAC), która jest powszechnie stosowana w systemach komputerowych nie jest pozbawiona wad, z których chyba najpoważniejszą jest pozostawienie decyzji o rodzaju dostępu do obiektu przez jego właściciela, którym w typowych konfiguracjach jest ten, kto plik stworzył. Przekazanie kontroli nad prawami dostępu do tworzonych obiektów (plików) do decyzji użytkownika systemu było uzasadnione w czasach, w których wielodostępne systemy operacyjne były tworzone „przez kolegów dla kolegów” i wykorzystywane przez świadomych swych działań specjalistów.
Kolejnym ważnym problemem przy wykorzystywaniu DAC (nawet łącznie z dodatkową listą dostępu - ACL) jest reguła dziedziczenia uprawnień. Oznacza ona, że program z zasady dysponuje takimi prawami, jakie posiadał użytkownik, który go uruchomił. Ponieważ w systemach rodziny Linux istnieje super-użytkownik (root user) posiadający wszelkie uprawnienia wystarczy więc uzyskać w dowolny sposób uprawnienia tego użytkownika i wszystkie uruchamiane programy będą dysponowały nieograniczonymi uprawnieniami w systemie. Warto pamiętać, że konto root jest wykorzystywane do uruchamiania ważnych funkcji systemu, a także dość często do uruchamiania niektórych aplikacji.
Uzyskanie dostępu do konta root (lub innego o zwiększonych uprawnieniach) wykorzystuje wiele programów hakerskich (exploits). Celem działania tego typu programów jest eskalacja uprawnień atakującego w systemie w celu uzyskania dostępu do interesujących dla atakującego danych, a nawet spowodowanie rozmyślnego uszkodzenia systemu. Wiele wrogich programów wymaga wykonania określonej akcji przez użytkownika, np. otwarcia załącznika otrzymanego pocztą elektroniczną, uzyskanie dostępu do specjalnej strony WWW opracowanej przez atakującego, pobranie pliku z zainfekowanego serwera itp. Od pewnego czasu szczególnie groźne stały się ataki zwane „zero-click”, które nie wymagają żadnej interakcji (użycia klawiatury lub urządzenia wskazującego). Taki atak umożliwił opracowanie oprogramowania szpiegującego o nazwie Pegasus.
Informacje na temat metod atakowania systemów oraz zabezpieczania się przed takimi atakami można dość łatwo znaleźć w Internecie, dostępne są wyspecjalizowane serwery oraz informacje publikowane przez producentów oprogramowania systemowego i zabezpieczającego. Jednak korzystając z tych informacji należy zachować szczególną ostrożność – dość niedawno doniesiono o umieszczeniu na serwerach oferujących aplikacje dla systemu Android programów „antywirusowych”, które instalowały na smartfonach trojana umożliwiającego odczytywanie informacji umożliwiających dostęp do kont bankowych. W sieci krąży wiele ostrzeżeń dla użytkowników, które powinny ich mobilizować do ostrożności w wykorzystywaniu dostępnych i coraz powszechniejszych usług sieciowych. Niestety, jak wykazuje praktyka nawet stosowanie się do wszystkich zaleceń nie gwarantuje użytkownikowi komputera, smartfonu lub innych podobnych urządzeń korzystających z sieci oczekiwanego systemu bezpieczeństwa.
Publikowane przez różnych doradców bezpieczeństwa ostrzeżenia i informacje o pojawiających się coraz to nowych atakach jedynie potwierdzają powszechnie dostępne statystyki.
Realna poprawa bezpieczeństwa systemów komputerowych jest możliwa jedynie przez wprowadzenie obligatoryjnej kontroli dostępu (MAC – Mandatory Access Control). W takim rozwiązaniu kontrola dostępu użytkownika lub programu do zasobów jest uzależniona od obowiązującej polityki bezpieczeństwa.
Koncepcja jest dość prosta i najkrócej wyraził ją Dan Walsh, Senior Distinguished Engineer w firmie Red Hat: „Everything have a label”. SELinux wprowadza dodatkowe etykiety zarówno do usług systemowych i programów. SELinux sprawdza, czy te etykiety są prawidłowe i zezwalają na wykorzystywanie usług oraz na dostęp do danych.
Etykiety plików SELinuksa są przechowywane w systemie plikowym jako dodatkowe meta dane Extended Attributes – np. dla przykładowej usługi myservice:
attr -l /usr/local/bin/myservice
Atrybut "selinux" dla /usr/local/bin/myservice ma wartość 38-bajtową
Atrybut "comment" dla /usr/local/bin/myservice ma wartość 13-bajtową
Atrybut "SGI_ACL_FILE" dla /usr/local/bin/myservice ma wartość 64-bajtową
getfattr -n security.selinux /usr/local/bin/myservice
getfattr: Usunięcie wiodącego '/' ze ścieżek bezwzględnych
# file: usr/local/bin/myservice
security.selinux="system_u:object_r:myservice_exec_t:s0"