Kako bi se prevladala ograničenja i povećali sigurnosni mehanizmi predviđeni standardom ugo/rwx
dopuštenja i popisima za kontrolu pristupa, Agencija za nacionalnu sigurnost Sjedinjenih Država (NSA) osmislila je fleksibilnu Obvezna kontrola pristupa (MAC) metoda poznata kao SELinux (skraćeno od Sigurnost poboljšani Linux) kako bi se između ostalog ograničila mogućnost procesa da pristupaju ili izvode druge operacije na objektima sustava (kao što je npr datoteke, direktorije, mrežne portove itd.) uz najmanje moguće dopuštenje, a ipak dopuštaju kasnije izmjene ovog modela.
Još jedan popularan i široko korišten MAC je AppArmor, koji osim značajki koje pruža SELinux, uključuje način učenja koji sustavu omogućuje „naučiti”Kako se određena aplikacija ponaša, te postaviti ograničenja konfiguriranjem profila za sigurnu upotrebu aplikacije.
U CentOS 7, SELinux je ugrađen u samu jezgru i omogućen je u Provođenje način rada prema zadanim postavkama (više o tome u sljedećem odjeljku), za razliku od openSUSE i Ubuntu koje koriste AppArmor.
U ovom ćemo članku objasniti osnove SELinux -a i AppArmora te kako koristiti jedan od ovih alata u svoju korist, ovisno o odabranoj distribuciji.
Sigurnosno poboljšani Linux može djelovati na dva različita načina:
SELinux se također može onemogućiti. Iako to nije sam način rada, ipak je opcija. Međutim, naučiti kako koristiti ovaj alat bolje je nego ga jednostavno zanemariti. Imajte to na umu!
Za prikaz trenutnog načina rada SELinux, koristiti getenforce
. Ako želite prebaciti način rada, upotrijebite setenforce 0
(da biste ga postavili na Dopušteno) ili setenforce 1
(Provođenje).
Budući da ova promjena neće preživjeti a ponovno podizanje sustava, morat ćete urediti /etc/selinux/config datoteku i postavite datoteku SELINUX promjenjivo na bilo koje provođenje
, popustljiv
, ili onemogućeno
kako biste postigli postojanost tijekom ponovnog pokretanja:
Napominjemo, ako getenforce
vraća Disabled, morat ćete urediti /etc/selinux/config sa željenim načinom rada i ponovno podizanje sustava. U suprotnom nećete moći postaviti (ili prebaciti) način rada pomoću setenforce
.
Jedna od tipičnih upotreba setenforce
sastoji se od prebacivanja između SELinux načina (od provođenje do popustljiv ili obrnuto) za rješavanje problema s aplikacijom koja se loše ponaša ili ne radi prema očekivanjima. Ako radi nakon što postavite SELinux na Dopušteno načinu rada, možete biti sigurni da gledate problem s dozvolama za SELinux.
Dva klasična slučaja u kojima ćemo se najvjerojatnije morati baviti SELinuxom su:
Pogledajmo ova dva slučaja koristeći sljedeće primjere.
Jedna od prvih stvari koje većina administratora sustava čini kako bi osigurali svoje poslužitelje je promjena porta na kojem sluša SSH demon, uglavnom kako bi se obeshrabrili skeneri portova i vanjski napadači. Da bismo to učinili, koristimo Port direktivu u /etc/ssh/sshd_config slijedi novi broj porta na sljedeći način (koristit ćemo port 9999 u ovom slučaju):
Luka 9999.
Nakon pokušaja ponovnog pokretanja usluge i provjere njenog statusa vidjet ćemo da se nije uspjela pokrenuti:
# systemctl ponovno pokrenite sshd. # systemctl status sshd.
Ako pogledamo /var/log/audit/audit.log, to ćemo vidjeti sshd spriječeno je pokretanje u luci 9999 po SELinux jer je to rezervirani port za Upravljanje JBossom uslugu (poruke dnevnika SELinux uključuju riječ "AVC" kako bi se mogli lako prepoznati iz drugih poruka):
# cat /var/log/audit/audit.log | grep AVC | rep -1.
U ovom trenutku većina bi ljudi vjerojatno onemogućila SELinux ali nećemo. Vidjet ćemo da postoji način da SELinux i sshd slušaju na drugom portu da zajedno žive u harmoniji. Provjerite imate li policycoreutils-python paket instaliran i pokrenut:
# yum install policycoreutils-python.
Za pregled popisa portova na kojima SELinux dopušta sshd -u da sluša. Na sljedećoj slici možemo vidjeti i taj port 9999 bila rezervirana za drugu uslugu pa je zasad ne možemo koristiti za pokretanje druge usluge:
# semanage port -l | grep ssh.
Naravno da bismo mogli odabrati drugi port za SSH, ali ako smo sigurni da nećemo morati koristiti ovaj specifični port računala za bilo koje usluge povezane s JBossom, tada možemo izmijeniti postojeće pravilo SELinux i dodijeliti taj port SSH-u umjesto toga:
# semanage port -m -t ssh_port_t -p tcp 9999.
Nakon toga možemo koristiti prvu semanage naredba za provjeru je li port ispravno dodijeljen ili -lC
opcije (skraćeno od prilagođenog popisa):
# semanage port -lC. # semanage port -l | grep ssh.
Sada možemo ponovno pokrenuti SSH i povezati se s uslugom pomoću porta 9999. Imajte na umu da će ova promjena preživjeti ponovno pokretanje.
Ako trebate postaviti virtualni host Apache koristeći direktorij osim /var/www/html kao DocumentRoot (recimo, na primjer, /websrv/sites/gabriel/public_html):
DocumentRoot “/websrv/sites/gabriel/public_html”
Apache će odbiti posluživanje sadržaja jer index.html je označeno sa default_t SELinux tip kojem Apache ne može pristupiti:
# wget http://localhost/index.html. # ls -lZ /websrv/sites/gabriel/public_html/index.html.
Kao i u prethodnom primjeru, možete koristiti sljedeću naredbu da provjerite je li to doista problem vezan uz SELinux:
# cat /var/log/audit/audit.log | grep AVC | rep -1.
Za promjenu oznake /websrv/sites/gabriel/public_html rekurzivno do httpd_sys_content_t
, čini:
# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?"
Gornja naredba dodijelit će Apache-u samo za čitanje pristup tom direktoriju i njegovom sadržaju.
Konačno, da biste primijenili pravila (i odmah učinili promjenu oznake na snazi), učinite sljedeće:
# restorecon -R -v/websrv/sites/gabriel/public_html.
Sada biste trebali moći pristupiti direktoriju:
# wget http://localhost/index.html.
Za više informacija o SELinux -u pogledajte Fedoru 22 Vodič za SELinux i administratore.