Obligatoresch Zougangskontrolle mat SELinux oder AppArmor an Linux ëmsetzen


Fir d'Aschränkungen ze iwwerwannen an d'Sécherheetsmechanismen ze erhéijen, déi duerch Standard ugo/rwx Permissiounen an Zougangskontrolllëschte geliwwert ginn, huet d'US National Security Agency (NSA) eng flexibel Mandatory Access Control (MAC) Method entwéckelt, bekannt als SELinux (kuerz fir Security Enhanced Linux) fir ënner anerem d'Fäegkeet vu Prozesser ze beschränken fir Zougang oder aner Operatiounen op Systemobjekter (wéi Dateien, Verzeichnisser, Netzwierkporten, etc) op déi mannst Erlaabnes méiglech ze limitéieren, wärend nach ëmmer erlaabt fir spéider Ännerungen un dësem Modell.

En anere populäre a wäit benotzte MAC ass AppArmor, deen nieft de Funktiounen, déi vum SELinux geliwwert ginn, e Léiermodus enthält, deen de System erlaabt léiere wéi eng spezifesch Applikatioun sech behält, a Limiten ze setzen andeems Profiler fir sécher Uwendungsnotzung konfiguréiert sinn. .

Am CentOS 7 ass SELinux an de Kernel selwer agebaut an ass am Standardmodus am Enforcement Modus aktivéiert (méi iwwer dëst an der nächster Sektioun), am Géigesaz zu openSUSE an Ubuntu déi AppArmor benotzen.

An dësem Artikel wäerte mir d'Essenzë vu SELinux an AppArmor erklären a wéi ee vun dësen Tools fir Äre Benefice benotzt ofhängeg vun Ärer gewielter Verdeelung.

Aféierung zu SELinux a Wéi benotzt Dir et op CentOS 7

Sécherheet Enhanced Linux kann op zwou verschidde Weeër funktionnéieren:

  1. Enforcer: SELinux refuséiert Zougang baséiert op SELinux Politikregelen, eng Rei vu Richtlinnen déi de Sécherheetsmotor kontrolléieren.
  2. Permissiv: SELinux refuséiert den Zougang net, awer Verweigerunge gi protokolléiert fir Aktiounen déi refuséiert gi wieren wann se am Duerchféierungsmodus lafen.

SELinux kann och behënnert ginn. Och wann et keen Operatiounsmodus selwer ass, ass et nach ëmmer eng Optioun. Wéi och ëmmer, léiere wéi een dëst Tool benotzt ass besser wéi et einfach ze ignoréieren. Halt et am Kapp!

Fir den aktuelle Modus vun SELinux ze weisen, benotzt getenforce. Wann Dir den Operatiounsmodus wiessele wëllt, benotzt setenforce 0 (fir se op Permissive ze setzen) oder setenforce 1 (Enforcéieren).

Well dës Ännerung net e Reboot iwwerlieft, musst Dir d' /etc/selinux/config Datei änneren an d'SELINUX Variabel op entweder enforcer, permissive oder behënnert fir Persistenz iwwer Neistarten z'erreechen:

Op enger Säit Notiz, wann getenforce Disabled zréckkënnt, musst Dir /etc/selinux/config mam gewënschten Operatiounsmodus änneren an nei starten. Soss kënnt Dir den Operatiounsmodus net mat setenforce setzen (oder wiesselen).

Ee vun den typesche Benotzunge vu setenforce besteet aus dem Wiessel tëscht SELinux Modi (vun Duerchféierung op Permissiv oder ëmgedréint) fir eng Applikatioun ze léisen déi sech falsch behält oder net funktionnéiert wéi erwaart. Wann et funktionnéiert nodeems Dir SELinux op Permissive Modus gesat hutt, kënnt Dir zouversiichtlech sinn datt Dir e SELinux Permissiounen Thema kuckt.

Zwee klassesch Fäll wou mir héchstwahrscheinlech mat SELinux këmmeren mussen sinn:

  1. De Standardport änneren, wou en Daemon nolauschtert.
  2. D'DocumentRoot Direktiv fir e virtuelle Host ausserhalb vun /var/www/html setzen.

Loosst eis dës zwee Fäll kucken mat de folgende Beispiller.

Eng vun den éischten Saachen déi meescht Systemadministratoren maachen fir hir Server ze sécheren ass den Hafen z'änneren wou den SSH Daemon nolauschtert, meeschtens fir Port Scanner an extern Ugräifer ze decouragéieren. Fir dëst ze maachen, benotze mir d'Port Direktiv an /etc/ssh/sshd_config gefollegt vun der neier Portnummer wéi follegt (mir benotze Port 9999 an dësem Fall):

Port 9999

Nodeems Dir probéiert de Service nei ze starten a säi Status iwwerpréift, gesi mir datt et net gestart gouf:

# systemctl restart sshd
# systemctl status sshd

Wa mir e Bléck op /var/log/audit/audit.log kucken, wäerte mir gesinn datt sshd verhënnert gouf um Port 9999 vum SELinux unzefänken well dat e reservéierten Hafen fir de JBoss Management Service ass (SELinux Log Messagen enthalen d'Wuert AVC sou datt se einfach aus anere Messagen identifizéiert kënne ginn):

# cat /var/log/audit/audit.log | grep AVC | tail -1

Zu dësem Zäitpunkt wäerten déi meescht Leit wahrscheinlech SELinux deaktivéieren awer mir wäerten net. Mir wäerte gesinn datt et e Wee gëtt fir SELinux, an sshd op engem aneren Hafen ze lauschteren, an Harmonie zesummen ze liewen. Vergewëssert Iech datt Dir de policycoreutils-python Package installéiert hutt a lafen:

# yum install policycoreutils-python

Fir eng Lëscht vun den Ports ze gesinn wou SELinux sshd erlaabt ze lauschteren. Am folgende Bild kënne mir och gesinn datt den Hafen 9999 fir en anere Service reservéiert war an dofir kënne mir et net benotze fir en anere Service fir de Moment ze lafen:

# semanage port -l | grep ssh

Natierlech kënne mir en aneren Hafen fir SSH wielen, awer wa mir sécher sinn datt mir dës spezifesch Maschinn net brauchen fir all JBoss-relatéierte Servicer ze benotzen, kënne mir dann déi existent SELinux Regel änneren an dee Port un SSH zouginn amplaz:

# semanage port -m -t ssh_port_t -p tcp 9999

Duerno kënne mir den éischte Semanage Kommando benotzen fir ze kontrolléieren ob den Hafen richteg zougewisen ass, oder d'-lC Optiounen (kuerz fir Lëscht Custom):

# semanage port -lC
# semanage port -l | grep ssh

Mir kënnen elo SSH nei starten an un de Service verbannen mat Port 9999. Notéiert datt dës Ännerung e Restart iwwerlieft.

Wann Dir en Apache virtuelle Host opbaue musst mat engem Verzeichnis anescht wéi /var/www/html als DocumentRoot (zum Beispill /websrv/sites/gabriel/public_html):

DocumentRoot “/websrv/sites/gabriel/public_html”

Apache wäert refuséieren den Inhalt ze déngen well den index.html mam default_t SELinux Typ markéiert gouf, op deem Apache net zougräifen:

# wget http://localhost/index.html
# ls -lZ /websrv/sites/gabriel/public_html/index.html

Wéi mat dem virege Beispill, kënnt Dir de folgende Kommando benotzen fir z'iwwerpréiwen datt dëst wierklech e SELinux-relatéierten Thema ass:

# cat /var/log/audit/audit.log | grep AVC | tail -1

Fir de Label vun /websrv/sites/gabriel/public_html rekursiv op httpd_sys_content_t z'änneren, maacht:

# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?"

Deen uewe genannte Kommando gëtt Apache liesennëmmen Zougang zu deem Verzeechnes a säin Inhalt.

Schlussendlech, fir d'Politik z'applizéieren (an d'Etikett änneren direkt effektiv ze maachen), maacht:

# restorecon -R -v /websrv/sites/gabriel/public_html

Elo sollt Dir Zougang zum Verzeechnes kréien:

# wget http://localhost/index.html

Fir méi Informatioun iwwer SELinux, kuckt op de Fedora 22 SELinux an Administrator Guide.