Traduko de la artikolo preparita por kursanoj
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:
- Deviganta — alirneo surbaze de politikaj reguloj.
- Permesema — konservante protokolon de agoj kiuj malobservas la politikon, kio estus malpermesita en la deviga reĝimo.
- 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