Autorem wpisu jest Marek P., ten wpis bierze udział w konkursie – pozostałe prace konkursowe.
SELinux (Security-Enhanced Linux) to potężne narzędzie dostępne m.in. w dystrybucji RHEL6. Polityka SElinuxa zabezpiecza przed niepożądanym działaniem poszczególne elementy systemu operacyjnego.
Po instalacji serwera Apache, domyślnie nasz serwer WWW jest chroniony przed dostępem z zewnątrz. Domyślnie mamy również zablokowaną możliwość łączenia się z bazą danych.
Za pomocą komendy getsebool -a wyświetlamy wszystkie polityki SELinux. Aby zmienić którąś z nich używamy komendy setsebool.
I tak, aby wyświetlić politykę SELinux dla Apache należy użyć komendy:
getsebool -a | grep http
Aby nasz serwer był w pełni użyteczny musimy:
– pozwolić Apache’owi na łączenie z sieci:
setsebool -P httpd_can_network_connect on
– pozwolić na łączenie z bazą danych:
setsebool -P httpd_can_network_connect_db on
– pozwolić na wysyłanie maili z serwera:
setsebool -P httpd_can_sendmail on
Przełącznik -P oznacza, że zmiany są permanentne.
Ponowne wywołanie:
getsebool -a | grep httpd
pokazuje, że wprowadzone komendy przyniosły pożądany skutek, który możemy również zaobserwować przez przeglądarkę internetową, łącząc się z naszym serwerem.
Kolejną rzeczą, którą możemy wykonać po instalacji serwera WWW, jest zmiana domyślnego portu, na którym nasłuchuje nasz serwer. Jak się okazuje, tutaj również SELinux zabezpiecza przed niepożądaną zmianą portu.
Aby dodać do polityki SELinux możliwość używania innego niż domyślny port dla Apache wykonujemy:
- semanage port -a -t http_port_t -p tcp 888
gdzie:
– semanage służy do konfiguracji elementów SELinux
-a – dodanie polityki
-t http_port_t – typ obiektu SELinux (tutaj http_port_t – port usługi Apache)
-p tcp 888 – protokół dla przykładowego nr portu.
Oczywiście wcześniej należy ustawić w pliku httpd.conf:
Listen 888
oraz odblokować ten port w iptables
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 888 -j ACCEPT
Podobnie możemy odblokować możliwość łączenia się przez ssh na innym porcie:
- semanage port -a -t ssh_port_t -p tcp 777
W RHEL6 nie miałem zainstalowanej binarki semanage. Znajduje się ona w pakiecie policycoreutils-python. A więc jeśli nie mamy semanage w systemie, wystarczy zainstalować ten pakiet.
- yum install policycoreutils-python
Więcej o SELinux: docs.redhat.com
24 maja, 2011 at 12:58
http://snejkczif.wordpress.com/2011/04/29/serwer-…
24 maja, 2011 at 13:15
Hm?