Szybkie poskromienie SELinuksa
SELinux to nakładka na linuksowe jądro, kontrolująca przydzielanie zasobów dla różnych aplikacji. Początkujący administratorzy systemów redhatopodobnych, jak CentOS czy Fedora niejednokrotnie stają przed poważnym problemem: jak uporać się z restrykcyjną polityką SELinuksa, który niczym Hubert Urbański w „Milionerach” będzie się dwieście razy pytał, czy „ostatecznie i definitywnie” pozwolić Apache’owi na dostęp do takiego czy innego katalogu?
Sam jestem amatorem, który nieraz miał ochotę wpisać set enforce 0, by przełączyć SELinuksa w tryb pobłażliwy, albo w ogóle się tego wynalazku pozbyć. Wychodzę jednak z założenia, że SELinux służy jednak czemuś pożytecznemu i lepiej spróbować z nim po dobroci. Na szczęście na ogół wystarczy odnaleźć w /var/log/messages komunikat z kodem dla programu sealert, który podaje gotowe rozwiązania, np. jaką opcję należy przełączyć za pomocą setsebool.
Są jednak przypadki, gdy porady sealert są zbyt enigmatyczne. W takich wypadkach FAQ Fedory radzi skorzystać z programu audit2allow. Zasada jest bardzo prosta. Najpierw generujemy zestaw regułek, które pozwalają obejść ostatnio napotkane błędy:
# audit2allow -m local -l -i /var/log/messages > local.te
Jeżeli nasz system korzysta z pliku /var/log/audit/audit.log to w nim program znajdzie potrzebne mu informacje:
# audit2allow -m local -l -i /var/log/audit/audit.log > local.te
Teraz możemy przejrzeć local.te i usunąć regułki, które nas nie interesują, by nie odblokować w systemie zbyt wielu zabezpieczeń.
Następnie upewniamy się, że mamy zainstalowany pakiet checkpolicy i kompilujemy moduł z naszymi regułkami, po czym generujemy paczkę:
# checkmodule -M -m -o local.mod local.te
# semodule_package -o local.pp -m local.mod
Na koniec dodajemy ją do obowiązującej w systemie polityki bezpieczeństwa (może to chwilę potrwać):
# semodule -i local.pp
Należy przy tym pamiętać, że jeżeli w pamięci jest już moduł o nazwie local, to zostanie nadpisany przez swoją nową wersję!
