Obligātās piekļuves kontroles ieviešana ar SELinux vai AppArmor Linux


Lai pārvarētu ierobežojumus un palielinātu drošības mehānismus, ko nodrošina standarta ugo/rwx atļaujas un piekļuves kontroles saraksti, Amerikas Savienoto Valstu Nacionālā drošības aģentūra (NSA) izstrādāja elastīgu zināmu obligātās piekļuves kontroles (MAC) metodi. kā SELinux (saīsinājums no drošības uzlabotās Linux), lai cita starpā, pēc iespējas mazāk ierobežotu procesu spēju piekļūt vai veikt citas darbības ar sistēmas objektiem (piemēram, failiem, direktorijiem, tīkla portiem utt.) ļaujot vēlāk modificēt šo modeli.

Vēl viena populāra un plaši izmantota MAC ir AppArmor, kas papildus SELinux piedāvātajām funkcijām ietver mācību režīmu, kas ļauj sistēmai “uzzināt”, kā darbojas konkrēta lietojumprogramma, un noteikt ierobežojumus, konfigurējot profilus drošai lietojumprogrammu lietošanai.

CentOS 7 SELinux ir iestrādāts pašā kodolā un pēc noklusējuma ir iespējots izpildes režīmā (vairāk par to nākamajā sadaļā), atšķirībā no openSUSE un Ubuntu, kas izmanto AppArmor.

Šajā rakstā mēs izskaidrosim SELinux un AppArmor būtību un to, kā izmantot vienu no šiem rīkiem savā labā atkarībā no izvēlētā izplatīšanas.

Ievads SELinux un kā to izmantot CentOS 7

Drošības uzlabotā Linux var darboties divējādi:

  1. Izpilde: SELinux liedz piekļuvi, pamatojoties uz SELinux politikas noteikumiem, vadlīniju kopumu, kas kontrolē drošības motoru.
  2. Atļauts: SELinux nenoliedz piekļuvi, taču tiek reģistrēti atteikumi darbībām, kuras būtu liegtas, ja darbotos izpildes režīmā.

SELinux var arī atspējot. Lai gan tas nav pats darbības režīms, tas joprojām ir opcija. Tomēr iemācīties izmantot šo rīku ir labāk nekā vienkārši to ignorēt. Paturiet to prātā!

Lai parādītu pašreizējo SELinux režīmu, izmantojiet getenforce . Ja vēlaties pārslēgt darbības režīmu, izmantojiet setenforce 0 (lai to iestatītu kā Permissive) vai setenforce 1 (izpilde).

Tā kā šīs izmaiņas neizdzīvos pēc atsāknēšanas, jums būs jārediģē/etc/selinux/config fails un SELINUX mainīgajam jābūt iestatītam uz enforcing , atļauts vai atspējots , lai atkārtoti sāktu pastāvīgi:

Sānu piezīmē, ja getenforce atgriež atspējotu, jums būs jārediģē/etc/selinux/config ar vēlamo darbības režīmu un jāpārstartē. Pretējā gadījumā jūs nevarēsit iestatīt (vai pārslēgt) darbības režīmu ar setenforce .

Viens no tipiskiem setenforce izmantošanas veidiem ir pārslēgšanās starp SELinux režīmiem (sākot no ieviešanas līdz visatļautībai vai otrādi), lai novērstu lietojumprogrammas, kas darbojas nepareizi vai nedarbojas, kā paredzēts. Ja tas darbojas pēc tam, kad esat iestatījis SELinux režīmā Permissive, varat būt drošs, ka apskatāt SELinux atļauju problēmu.

Divi klasiski gadījumi, kad mums, visticamāk, būs jārisina SELinux, ir:

  1. Noklusējuma porta maiņa, kur klausās dēmons.
  2. DocumentRoot direktīvas iestatīšana virtuālajam resursdatoram ārpus/var/www/html.

Apskatīsim šos divus gadījumus, izmantojot šādus piemērus.

Viena no pirmajām lietām, ko lielākā daļa sistēmas administratoru dara, lai aizsargātu savus serverus, ir mainīt portu, kurā klausās SSH dēmons, galvenokārt, lai atturētu ostu skenerus un ārējos uzbrucējus. Lai to izdarītu, mēs izmantojam ostas direktīvu mapē/etc/ssh/sshd_config, kam seko jaunais porta numurs šādi (šajā gadījumā mēs izmantosim 9999 portu):

Port 9999

Pēc mēģinājuma restartēt pakalpojumu un pārbaudīt tā statusu, mēs redzēsim, ka to neizdevās palaist:

# systemctl restart sshd
# systemctl status sshd

Apskatot /var/log/audit/audit.log, mēs redzēsim, ka sshd neļāva startēt 9999 portā SELinux, jo tā ir rezervēta JBoss Management pakalpojuma osta (SELinux žurnāla ziņojumos ir vārds “ AVC ”, lai tos varētu viegli identificēt no citiem ziņojumiem):

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

Šajā brīdī lielākā daļa cilvēku, iespējams, atspējos SELinux, bet mēs to nedarīsim. Mēs redzēsim, ka SELinux un sshd klausīšanās citā ostā ir veids, kā dzīvot harmonijā kopā. Pārliecinieties, vai esat instalējis un palaidis paketi policycoreutils-python:

# yum install policycoreutils-python

Lai skatītu to portu sarakstu, kuros SELinux ļauj sshd klausīties. Nākamajā attēlā mēs varam arī redzēt, ka ports 9999 bija rezervēts citam pakalpojumam, un tāpēc to pagaidām nevar izmantot, lai palaistu citu pakalpojumu:

# semanage port -l | grep ssh

Protams, mēs varētu izvēlēties citu SSH portu, taču, ja esam pārliecināti, ka mums nebūs jāizmanto šī konkrētā mašīna ar JBoss saistītiem pakalpojumiem, tad mēs varam modificēt esošo SELinux kārtulu un tā vietā piešķirt šo portu SSH:

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

Pēc tam mēs varam izmantot pirmo semanage komandu, lai pārbaudītu, vai ports ir pareizi piešķirts, vai opcijas -lC (saīsinājums no saraksta pasūtījuma):

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

Tagad mēs varam restartēt SSH un izveidot savienojumu ar pakalpojumu, izmantojot 9999. portu. Ņemiet vērā, ka šīs izmaiņas izdzīvos pēc atsāknēšanas.

Ja jums jāiestata Apache virtuālais resursdators, izmantojot DocumentRoot direktoriju, kas nav/var/www/html (teiksim, piemēram,/websrv/sites/gabriel/public_html):

DocumentRoot “/websrv/sites/gabriel/public_html”

Apache atteiksies apkalpot saturu, jo index.html ir apzīmēts ar default_t SELinux tipu, kuram Apache nevar piekļūt:

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

Tāpat kā iepriekšējā piemērā, varat izmantot šo komandu, lai pārbaudītu, vai tā patiešām ir ar SELinux saistīta problēma:

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

Lai rekursīvi mainītu etiķeti/websrv/sites/gabriel/public_html uz httpd_sys_content_t , rīkojieties šādi:

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

Iepriekš minētā komanda piešķirs Apache tikai lasīšanas piekļuvi šim direktorijam un tā saturam.

Visbeidzot, lai piemērotu politiku (un lai etiķetes nomaiņa tiktu ieviesta nekavējoties), rīkojieties šādi:

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

Tagad jums vajadzētu būt iespējai piekļūt direktorijai:

# wget http://localhost/index.html

Lai iegūtu papildinformāciju par SELinux, skatiet Fedora 22 SELinux un administratora rokasgrāmatu.