Pagpatuman sa Mandatory Access Control sa SELinux o AppArmor sa Linux


Aron mabuntog ang mga limitasyon ug aron madugangan ang mga mekanismo sa seguridad nga gihatag sa standard ugo/rwx permiso ug mga listahan sa pagkontrol sa pag-access, ang United States National Security Agency (NSA) naghimo ug usa ka flexible nga pamaagi sa Mandatory Access Control (MAC) nga nailhan. ingon nga SELinux (mubo sa Security Enhanced Linux) aron mapugngan taliwala sa ubang mga butang, ang katakus sa mga proseso sa pag-access o paghimo sa ubang mga operasyon sa mga butang sa sistema (sama sa mga file, direktoryo, mga pantalan sa network, ug uban pa) sa labing gamay nga pagtugot nga mahimo, samtang sa gihapon nagtugot alang sa ulahi nga mga pagbag-o sa kini nga modelo.

Laing popular ug kaylap nga gigamit nga MAC mao ang AppArmor, nga dugang sa mga bahin nga gihatag sa SELinux, naglakip sa usa ka paagi sa pagkat-on nga nagtugot sa sistema sa pagkat-on kung giunsa ang paggawi sa usa ka piho nga aplikasyon, ug pagtakda og mga limitasyon pinaagi sa pag-configure sa mga profile alang sa luwas nga paggamit sa aplikasyon. .

Sa CentOS 7, ang SELinux gilakip sa kernel mismo ug gi-enable sa Enforcing mode nga default (labaw pa niini sa sunod nga seksyon), sukwahi sa openSUSE ug Ubuntu nga naggamit sa AppArmor.

Sa kini nga artikulo among ipasabut ang mga kinahanglanon sa SELinux ug AppArmor ug kung giunsa ang paggamit sa usa niini nga mga himan alang sa imong kaayohan depende sa imong gipili nga pag-apod-apod.

Pasiuna sa SELinux ug Giunsa Kini Paggamit sa CentOS 7

Ang Security Enhanced Linux mahimong molihok sa duha ka lainlaing paagi:

  1. Pagpatuman: Ang SELinux nagdumili sa pag-access base sa mga lagda sa palisiya sa SELinux, usa ka hugpong sa mga giya nga nagkontrol sa makina sa seguridad.
  2. Permissive: Ang SELinux wala magdumili sa pag-access, apan ang mga pagdumili gi-log alang sa mga aksyon nga dili unta ibalibaran kung nagdagan sa pagpatuman nga mode.

Ang SELinux mahimo usab nga ma-disable. Bisan kung dili kini usa ka mode sa operasyon mismo, kini usa gihapon ka kapilian. Bisan pa, ang pagkat-on kung giunsa paggamit kini nga himan mas maayo kaysa sa pagbaliwala lang niini. Hinumdomi kini!

Para ipakita ang kasamtangang mode sa SELinux, gamita ang getenforce. Kung gusto nimong i-toggle ang operation mode, gamita ang setenforce 0 (aron i-set kini sa Permissive) o setenforce 1 (Pagpatuman).

Tungod kay kini nga pagbag-o dili mabuhi sa usa ka reboot, kinahanglan nimo nga i-edit ang /etc/selinux/config nga file ug itakda ang SELINUX variable sa bisan hain pagpatuman, permissive, o gi-disable aron makab-ot ang pagpadayon sa mga pag-reboot:

Sa usa ka side note, kung ang getenforce mobalik nga Disabled, kinahanglan nimo nga i-edit ang /etc/selinux/config gamit ang gusto nga mode sa operasyon ug reboot. Kay kon dili, dili nimo ma-set (o i-toggle) ang operation mode gamit ang setenforce.

Usa sa kasagarang gamit sa setenforce naglangkob sa pag-toggling tali sa SELinux modes (gikan sa pagpatuman ngadto sa permissive o sa laing paagi) aron ma-troubleshoot ang usa ka aplikasyon nga naglihok o wala molihok sama sa gipaabot. Kung kini molihok pagkahuman nimo ibutang ang SELinux sa Permissive mode, makasalig ka nga nagtan-aw ka sa usa ka isyu sa pagtugot sa SELinux.

Duha ka klasiko nga mga kaso diin lagmit kinahanglan naton atubangon ang SELinux mao ang:

  1. Pag-ilis sa default port diin ang usa ka daemon maminaw.
  2. Pagbutang sa DocumentRoot direktiba para sa usa ka virtual host gawas sa /var/www/html.

Atong tan-awon kining duha ka mga kaso gamit ang mosunod nga mga pananglitan.

Usa sa unang butang nga gibuhat sa kadaghanan sa mga administrador sa sistema aron masiguro ang ilang mga server mao ang pag-usab sa pantalan diin ang SSH daemon naminaw, kasagaran aron mawad-an sa kadasig ang mga port scanner ug mga external attacker. Aron mahimo kini, among gigamit ang Port direktiba sa/etc/ssh/sshd_config nga gisundan sa bag-ong numero sa port sama sa mosunod (gamiton namon ang port 9999 sa kini nga kaso):

Port 9999

Human sa pagsulay sa pagsugod pag-usab sa serbisyo ug pagsusi sa kahimtang niini atong makita nga kini napakyas sa pagsugod:

# systemctl restart sshd
# systemctl status sshd

Kung atong tan-awon ang /var/log/audit/audit.log, atong makita nga ang sshd gipugngan sa pagsugod sa port 9999 ni SELinux tungod kay kana usa ka reserba nga pantalan alang sa serbisyo sa JBoss Management (SELinux log messages naglakip sa pulong AVC aron dali silang mailhan gikan sa ubang mga mensahe):

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

Niini nga punto ang kadaghanan sa mga tawo lagmit nga mag-disable sa SELinux apan dili kami. Atong makita nga adunay usa ka paagi alang sa SELinux, ug sshd nga pagpamati sa usa ka lahi nga pantalan, aron magpuyo nga magkauyon. Siguruha nga naa nimo ang package nga policycoreutils-python nga gi-install ug gipadagan:

# yum install policycoreutils-python

Aron matan-aw ang usa ka lista sa mga pantalan diin gitugotan sa SELinux ang sshd nga maminaw. Sa mosunod nga hulagway makita usab nato nga ang port 9999 gitagana alang sa laing serbisyo ug sa ingon dili nato kini magamit sa pagpadagan sa laing serbisyo sa pagkakaron:

# semanage port -l | grep ssh

Siyempre makapili kami og laing pantalan alang sa SSH, apan kung sigurado kami nga dili na namo kinahanglan nga gamiton kining espesipikong makina alang sa bisan unsang serbisyo nga may kalabotan sa JBoss, mahimo namong usbon ang kasamtangan nga lagda sa SELinux ug i-assign kana nga port sa SSH:

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

Human niana, mahimo namong gamiton ang unang semanage nga sugo aron masusi kon husto ba ang pagka-assign sa pantalan, o ang -lC nga mga opsyon (mubo sa list custom):

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

Mahimo na naton i-restart ang SSH ug makonektar sa serbisyo gamit ang port 9999. Timan-i nga kini nga pagbag-o MAHIMO mabuhi sa usa ka reboot.

Kung kinahanglan nimo nga i-set up ang usa ka Apache virtual host gamit ang usa ka direktoryo gawas sa /var/www/html ingon DocumentRoot (iingon, pananglitan, /websrv/sites/gabriel/public_html):

DocumentRoot “/websrv/sites/gabriel/public_html”

Ang Apache modumili sa pag-alagad sa sulod tungod kay ang index.html gimarkahan sa default_t SELinux type, nga dili ma-access sa Apache:

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

Sama sa miaging pananglitan, mahimo nimong gamiton ang mosunud nga mando aron mapamatud-an nga kini usa ka isyu nga may kalabotan sa SELinux:

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

Aron usbon ang label sa /websrv/sites/gabriel/public_html balikbalik nga httpd_sys_content_t, buhata:

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

Ang sugo sa ibabaw maghatag sa Apache read-only nga access sa kana nga direktoryo ug sa mga sulod niini.

Sa katapusan, aron magamit ang polisiya (ug himoong epektibo dayon ang pagbag-o sa label), buhata:

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

Karon kinahanglan nimo nga ma-access ang direktoryo:

# wget http://localhost/index.html

Alang sa dugang nga impormasyon sa SELinux, tan-awa ang Fedora 22 SELinux ug giya sa Administrator.