Gvidilo por komencantoj pri SELinux

Gvidilo por komencantoj pri SELinux

Traduko de la artikolo preparita por kursanoj "Linuksa Sekureco"

SELinux aŭ Security Enhanced Linux estas plibonigita alirkontrolmekanismo evoluigita de la Usona Nacia Sekurec-Agentejo (NSA) por malhelpi malicajn entrudiĝojn. Ĝi efektivigas malvolan (aŭ devigan) alirkontrolmodelon (angla Mandatory Access Control, MAC) aldone al la ekzistanta libervola (aŭ elektema) modelo (angla Discretionary Access Control, DAC), tio estas, permesoj legi, skribi, ekzekuti.

SELinux havas tri reĝimojn:

  1. Deviganta — alirneo surbaze de politikaj reguloj.
  2. Permesema — konservante protokolon de agoj kiuj malobservas la politikon, kio estus malpermesita en la deviga reĝimo.
  3. Disabled — kompleta malfunkciigo de SELinux.

Defaŭlte la agordoj estas en /etc/selinux/config

Ŝanĝante SELinux-reĝimojn

Por ekscii la nunan reĝimon, kuru

$ getenforce

Por ŝanĝi la reĝimon al permesa, rulu la jenan komandon

$ setenforce 0

aŭ, ŝanĝi reĝimon de permisiva sur devigante, ekzekuti

$ setenforce 1

Se vi bezonas tute malŝalti SELinux, tiam tio povas esti farita nur per la agorda dosiero

$ vi /etc/selinux/config

Por malŝalti, ŝanĝu la parametron SELINUX jene:

SELINUX=disabled

Agordi SELinux

Ĉiu dosiero kaj procezo estas markita per SELinux kunteksto, kiu enhavas pliajn informojn kiel uzanto, rolo, tipo, ktp. Se ĉi tio estas via unua fojo ebligas SELinux, vi unue devos agordi la kuntekston kaj etikedojn. La procezo de asignado de etikedoj kaj kunteksto estas konata kiel etikedado. Por komenci marki, en la agorda dosiero ni ŝanĝas la reĝimon al permisiva.

$ vi /etc/selinux/config
SELINUX=permissive

Post agordo de la reĝimo permisiva, kreu malplenan kaŝitan dosieron en la radiko kun la nomo autorelabel

$ touch /.autorelabel

kaj rekomencu la komputilon

$ init 6

Noto: Ni uzas la reĝimon permisiva por markado, ekde la uzo de la reĝimo devigante povas kaŭzi la sistemon kraŝi dum rekomenco.

Ne maltrankviliĝu se la elŝuto blokiĝas en iu dosiero, markado daŭras iom da tempo. Post kiam markado estas kompleta kaj via sistemo estas startita, vi povas iri al la agorda dosiero kaj agordi la reĝimon devigantekaj ankaŭ kuru:

$ setenforce 1

Vi nun sukcese ebligis SELinux sur via komputilo.

Monitorante la protokolojn

Vi eble renkontis kelkajn erarojn dum markado aŭ dum la sistemo funkcias. Por kontroli ĉu via SELinux funkcias ĝuste kaj ĉu ĝi ne blokas aliron al iu ajn haveno, aplikaĵo ktp., vi devas rigardi la protokolojn. La protokolo de SELinux troviĝas en /var/log/audit/audit.log, sed vi ne bezonas legi la tutan aferon por trovi erarojn. Vi povas uzi la audit2why ilo por trovi erarojn. Rulu la sekvan komandon:

$ audit2why < /var/log/audit/audit.log

Kiel rezulto, vi ricevos liston de eraroj. Se ne estis eraroj en la protokolo, tiam neniuj mesaĝoj estos montrataj.

Agordante SELinux-Politiko

SELinux-politiko estas aro de reguloj, kiuj regas la sekurecan mekanismon de SELinux. Politiko difinas aron de reguloj por specifa medio. Nun ni lernos kiel agordi politikojn por permesi aliron al malpermesitaj servoj.

1. Logikaj valoroj (ŝaltiloj)

Ŝaltiloj (buoleanoj) permesas ŝanĝi partojn de politiko ĉe rultempo, sen devi krei novajn politikojn. Ili permesas al vi fari ŝanĝojn sen rekomenci aŭ rekompili SELinux-politikojn.

Ekzemplo:
Ni diru, ke ni volas dividi la hejman dosierujon de uzanto per FTP-legado/skribo, kaj ni jam dividis ĝin, sed kiam ni provas aliri ĝin, ni vidas nenion. Ĉi tio estas ĉar SELinux-politiko malhelpas la FTP-servilon legi kaj skribi al la hejma dosierujo de la uzanto. Ni devas ŝanĝi la politikon por ke la FTP-servilo povu aliri hejmajn dosierujojn. Ni vidu ĉu ekzistas iuj ŝaltiloj por ĉi tio farante

$ semanage boolean -l

Ĉi tiu komando listigos la disponeblajn ŝaltilojn kun ilia nuna stato (ŝaltita aŭ malŝaltita) kaj priskribo. Vi povas rafini vian serĉon aldonante grep por trovi nur ftp-rezultojn:

$ semanage boolean -l | grep ftp

kaj vi trovos la jenon

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Ĉi tiu ŝaltilo estas malŝaltita, do ni ebligos ĝin per setsebool $ setsebool ftp_home_dir on

Nun nia ftp-demono povos aliri la hejman dosierujon de la uzanto.
Noto: Vi ankaŭ povas ricevi liston de disponeblaj ŝaltiloj sen priskribo farante getsebool -a

2. Etikedoj kaj kunteksto

Ĉi tio estas la plej ofta maniero efektivigi SELinux-politikon. Ĉiu dosiero, dosierujo, procezo kaj haveno estas markita per la kunteksto SELinux:

  • Por dosieroj kaj dosierujoj, etikedoj estas konservitaj kiel etenditaj atributoj en la dosiersistemo kaj povas esti rigardataj per la sekva komando:
    $ ls -Z /etc/httpd
  • Por procezoj kaj havenoj, la etikedado estas administrita de la kerno, kaj vi povas vidi ĉi tiujn etikedojn jene:

procezo

$ ps –auxZ | grep httpd

haveno

$ netstat -anpZ | grep httpd

Ekzemplo:
Nun ni rigardu ekzemplon por pli bone kompreni etikedojn kaj kuntekston. Ni diru, ke ni havas retservilon kiu, anstataŭ dosierujo /var/www/html/ использует /home/dan/html/. SELinux konsideros tion malobservo de politiko kaj vi ne povos vidi viajn retpaĝojn. Ĉi tio estas ĉar ni ne agordis la sekurecan kuntekston asociitan kun la HTML-dosieroj. Por vidi la defaŭltan sekurecan kuntekston, uzu la jenan komandon:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Jen ni alvenis httpd_sys_content_t kiel kunteksto por html-dosieroj. Ni devas agordi ĉi tiun sekurecan kuntekston por nia nuna dosierujo, kiu nuntempe havas la sekvan kuntekston:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Alternativa komando por kontroli la sekurecan kuntekston de dosiero aŭ dosierujo:

$ semanage fcontext -l | grep '/var/www'

Ni ankaŭ uzos semanage por ŝanĝi la kuntekston post kiam ni trovis la ĝustan sekurecan kuntekston. Por ŝanĝi la kuntekston de /home/dan/html, rulu la jenajn komandojn:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Post kiam la kunteksto estas ŝanĝita per semanage, la komando restorecon ŝarĝos la defaŭltan kuntekston por dosieroj kaj dosierujoj. Nia retservilo nun povos legi dosierojn el la dosierujo /home/dan/htmlĉar la sekureca kunteksto por ĉi tiu dosierujo estis ŝanĝita al httpd_sys_content_t.

3. Krei lokajn politikojn

Povas ekzisti situacioj, kie la supraj metodoj ne utilas al vi kaj vi ricevas erarojn (avc/denial) en audit.log. Kiam tio okazas, vi devas krei lokan politikon. Vi povas trovi ĉiujn erarojn uzante audit2why, kiel priskribite supre.

Vi povas krei lokan politikon por solvi erarojn. Ekzemple, ni ricevas eraron rilatan al httpd (apache) aŭ smbd (sambo), ni grep la erarojn kaj kreas politikon por ili:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

estas http_policy и smb_policy estas la nomoj de la lokaj politikoj kiujn ni kreis. Nun ni devas ŝargi ĉi tiujn kreitajn lokajn politikojn en la nunan politikon de SELinux. Ĉi tio povas esti farita jene:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Niaj lokaj politikoj estis elŝutitaj kaj ni ne plu ricevu avc aŭ denail en audit.log.

Ĉi tio estis mia provo helpi vin kompreni SELinux. Mi esperas, ke post legado de ĉi tiu artikolo vi sentos vin pli komforta kun SELinux.

fonto: www.habr.com

Aldoni komenton