Privalomos prieigos kontrolės įdiegimas naudojant SELinux arba AppArmor sistemoje Linux


Siekdama įveikti standartinių ugo/rwx leidimų ir prieigos kontrolės sąrašų teikiamus apribojimus ir padidinti jų saugumo mechanizmus, Jungtinių Valstijų nacionalinio saugumo agentūra (NSA) sukūrė lanksčią Privalomas prieigos kontrolės (MAC) metodas, žinomas kaip SELinux (sutrumpinimas iš Patobulinto Linux), siekiant, be kita ko, apriboti procesų galimybę pasiekti arba atlikti kitas operacijas su sistemos objektais (pvz., failais, katalogais, tinklo prievadais ir t. t.) turėdami mažiausią įmanomą leidimą, tuo pačiu leisdami vėliau modifikuoti šį modelį.

Kitas populiarus ir plačiai naudojamas MAC yra AppArmor, kuriame, be SELinux teikiamų funkcijų, yra mokymosi režimas, leidžiantis sistemai „mokytis“. ” kaip veikia konkreti programa, ir nustatyti apribojimus konfigūruodami profilius, kad būtų galima saugiai naudoti programą.

Sistemoje CentOS 7 SELinux yra įtraukta į patį branduolį ir pagal numatytuosius nustatymus įgalinta Įgyvendinimo režimu (daugiau apie tai kitame skyriuje). o ne openSUSE ir Ubuntu, kurie naudoja AppArmor.

Šiame straipsnyje paaiškinsime pagrindinius SELinux ir AppArmor dalykus ir kaip naudoti vieną iš šių įrankių savo naudai, atsižvelgiant į pasirinktą platinimą.

Įvadas į SELinux ir kaip jį naudoti CentOS 7

Patobulintas saugumas Linux gali veikti dviem skirtingais būdais:

  1. Įgyvendinimas: SELinux neleidžia pasiekti, remdamasi SELinux politikos taisyklėmis – saugos variklį valdančių gairių rinkiniu.
  2. Leidžiama: SELinux nedraudžia prieigos, tačiau užregistruojami atmetimai dėl veiksmų, kurie būtų buvę uždrausti, jei būtų vykdomi priverstinio režimo.

SELinux taip pat galima išjungti. Nors tai nėra pats veikimo režimas, tai vis tiek yra galimybė. Tačiau išmokti naudotis šiuo įrankiu yra geriau nei tiesiog jo ignoruoti. Turėkite tai omenyje!

Norėdami parodyti dabartinį SELinux režimą, naudokite getenforce. Jei norite perjungti veikimo režimą, naudokite setenforce 0 (kad nustatytumėte jį į Leidžiamas) arba setenforce 1 (Įgyvendinimas).

Kadangi šis pakeitimas neišliks paleidus iš naujo, turėsite redaguoti /etc/selinux/config failą ir kintamąjį SELINUX nustatyti į bet kurį įgaliojantis, leidžiamas arba išjungtas, kad būtų užtikrintas nuolatinis paleidimas iš naujo:

Pastaba: jei getenforce grąžina Disabled, turėsite redaguoti /etc/selinux/config norimu veikimo režimu ir paleisti iš naujo. Priešingu atveju negalėsite nustatyti (arba perjungti) veikimo režimo naudodami setenforce.

Vienas iš įprastų setenforce naudojimo būdų – tai perjungimas tarp SELinux režimų (nuo įgaliojimo iki leidžiamojo arba atvirkščiai), siekiant pašalinti programos, kuri elgiasi netinkamai arba neveikia taip, kaip tikėtasi. Jei tai veikia po to, kai SELinux nustatėte Leidžiamo režimą, galite būti tikri, kad sprendžiate SELinux leidimų problemą.

Du klasikiniai atvejai, kai greičiausiai turėsime susidurti su SELinux:

  1. Keičiamas numatytasis prievadas, kuriame demonas klausosi.
  2. DocumentRoot direktyvos nustatymas virtualiam pagrindiniam kompiuteriui už /var/www/html.

Pažvelkime į šiuos du atvejus naudodami šiuos pavyzdžius.

1 PAVYZDYS: numatytojo sshd demono prievado keitimas

Vienas iš pirmųjų dalykų, kurį dauguma sistemos administratorių daro, kad apsaugotų savo serverius, yra pakeisti prievadą, kuriame SSH demonas klausosi, dažniausiai siekiant atgrasyti prievadų skaitytuvus ir išorinius užpuolikus. Norėdami tai padaryti, naudojame prievado direktyvą /etc/ssh/sshd_config, po kurios nurodomas naujas prievado numeris (šiuo atveju naudosime prievadą 9999):


Port 9999

Pabandę iš naujo paleisti paslaugą ir patikrinę jos būseną pamatysime, kad jos paleisti nepavyko:


systemctl restart sshd
systemctl status sshd

Jei pažvelgsime į /var/log/audit/audit.log, pamatysime, kad sshd nepavyko paleisti naudojant prievadą 9999 SELinux, nes tai yra rezervuotas prievadas JBoss Management paslaugai (SELinux žurnalo pranešimuose yra žodis AVC, kad juos būtų galima lengvai rasti atpažinti iš kitų pranešimų):


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

Šiuo metu dauguma žmonių tikriausiai išjungs SELinux, bet mes to neleisime. Pamatysime, kad yra būdas SELinux ir sshd klausymui skirtingame prievade gyventi darniai. Įsitikinkite, kad įdiegėte policycoreutils-python paketą ir paleiskite:


yum install policycoreutils-python

Norėdami peržiūrėti prievadų, kuriuose SELinux leidžia klausytis sshd, sąrašą. Toliau pateiktame paveikslėlyje taip pat matome, kad prievadas 9999 buvo rezervuotas kitai paslaugai, todėl šiuo metu negalime jo naudoti kitai paslaugai vykdyti:


semanage port -l | grep ssh

Žinoma, galime pasirinkti kitą prievadą SSH, bet jei esame tikri, kad šio konkretaus įrenginio nereikės naudoti jokioms su JBoss susijusioms paslaugoms, galime modifikuoti esamą SELinux taisyklę ir vietoj to priskirti tą prievadą SSH:


semanage port -m -t ssh_port_t -p tcp 9999

Po to galime naudoti pirmąją komandą semanage, kad patikrintume, ar prievadas priskirtas teisingai, arba parinktis -lC (sąrašo custom santrumpa):


semanage port -lC
semanage port -l | grep ssh

Dabar galime iš naujo paleisti SSH ir prisijungti prie paslaugos naudodami prievadą 9999. Atminkite, kad šis pakeitimas išliks paleidus iš naujo.

2 PAVYZDYS: Virtualaus pagrindinio kompiuterio DocumentRoot pasirinkimas už /var/www/html ribų

Jei reikia nustatyti „Apache“ virtualųjį pagrindinį kompiuterį naudodami kitą katalogą nei /var/www/html kaip DocumentRoot (pvz., /websrv/sites /gabriel/public_html):


DocumentRoot “/websrv/sites/gabriel/public_html”

„Apache“ atsisakys teikti turinį, nes index.html buvo pažymėtas default_t SELinux tipu, kurio „Apache“ negali pasiekti:


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

Kaip ir ankstesniame pavyzdyje, galite naudoti šią komandą, kad patikrintumėte, ar tai tikrai su SELinux susijusi problema:


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

Jei norite rekursyviai pakeisti /websrv/sites/gabriel/public_html etiketę į httpd_sys_content_t, atlikite:


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

Aukščiau pateikta komanda suteiks „Apache“ tik skaitymo prieigą prie to katalogo ir jo turinio.

Galiausiai, norėdami pritaikyti politiką (ir nedelsiant pakeisti etiketę), atlikite toliau nurodytus veiksmus.


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

Dabar turėtumėte turėti prieigą prie katalogo:


wget http://localhost/index.html

Daugiau informacijos apie SELinux rasite Fedora 22 SELinux ir administratoriaus vadove.