Դասընթացի ուսանողների համար պատրաստված հոդվածի թարգմանությունը
SELinux-ը կամ Security Enhanced Linux-ը մուտքի վերահսկման ուժեղացված մեխանիզմ է, որը մշակվել է ԱՄՆ Ազգային անվտանգության գործակալության (NSA) կողմից՝ կանխելու վնասակար ներխուժումները: Այն իրականացնում է հարկադիր (կամ պարտադիր) մուտքի վերահսկման մոդել (անգլերեն պարտադիր մուտքի վերահսկում, MAC) գոյություն ունեցող հայեցողական (կամ ընտրովի) մոդելի վրա (անգլերեն հայեցողական մուտքի վերահսկում, DAC), այսինքն՝ կարդալու, գրելու, գործարկելու թույլտվություններ:
SELinux-ն ունի երեք ռեժիմ.
- Իրականացնելը — մուտքի մերժում` հիմնված քաղաքականության կանոնների վրա:
- Թույլատրող — Քաղաքականությունը խախտող գործողությունների գրանցամատյանի պահպանում, որոնք արգելված կլինեն կիրառման ռեժիմում:
- Անաշխատունակ — SELinux-ի ամբողջական անջատում:
Լռելյայն կարգավորումները տեղադրված են /etc/selinux/config
SELinux ռեժիմների փոփոխություն
Ընթացիկ ռեժիմը պարզելու համար գործարկեք
$ getenforce
Ռեժիմը թույլատրելիի փոխելու համար գործարկեք հետևյալ հրամանը
$ setenforce 0
կամ՝ ռեժիմը փոխելու համար թույլատրելի մասին պարտադրող, կատարել
$ setenforce 1
Եթե Ձեզ անհրաժեշտ է ամբողջությամբ անջատել SELinux-ը, ապա դա կարելի է անել միայն կազմաձևման ֆայլի միջոցով
$ vi /etc/selinux/config
Անջատելու համար փոխեք SELINUX պարամետրը հետևյալ կերպ.
SELINUX=disabled
SELinux-ի կարգավորում
Յուրաքանչյուր ֆայլ և գործընթաց նշվում է SELinux համատեքստով, որը պարունակում է լրացուցիչ տեղեկություններ, ինչպիսիք են օգտվողը, դերը, տեսակը և այլն: Եթե առաջին անգամ եք միացնում SELinux-ը, ապա նախ պետք է կարգավորեք համատեքստը և պիտակները: Պիտակների և համատեքստի նշանակման գործընթացը հայտնի է որպես հատկորոշում: Նշումը սկսելու համար կազմաձևման ֆայլում մենք փոխում ենք ռեժիմը թույլատրելի.
$ vi /etc/selinux/config
SELINUX=permissive
Ռեժիմը դնելուց հետո թույլատրելի, ստեղծել դատարկ թաքնված ֆայլ արմատում անունով autorelabel
$ touch /.autorelabel
և վերագործարկեք համակարգիչը
$ init 6
Նշում. Մենք օգտագործում ենք ռեժիմը թույլատրելի մակնշման համար, քանի որ ռեժիմի օգտագործումը պարտադրող կարող է առաջացնել համակարգի խափանում վերագործարկման ժամանակ:
Մի անհանգստացեք, եթե ներբեռնումը խրված է ինչ-որ ֆայլի վրա, նշումը որոշ ժամանակ է պահանջում: Երբ նշումն ավարտված է, և ձեր համակարգը բեռնվում է, կարող եք գնալ կազմաձևման ֆայլ և սահմանել ռեժիմը պարտադրողև նաև վազել.
$ setenforce 1
Այժմ դուք հաջողությամբ միացրել եք SELinux-ը ձեր համակարգչում:
Տեղեկամատյանների մոնիտորինգ
Հնարավոր է, որ դուք բախվել եք որոշ սխալների նշման ժամանակ կամ երբ համակարգը աշխատում է: Ստուգելու համար, թե արդյոք ձեր SELinux-ը ճիշտ է աշխատում և արդյոք այն չի արգելափակում մուտքը որևէ պորտ, հավելված և այլն, դուք պետք է նայեք տեղեկամատյաններին: SELinux գրանցամատյանը գտնվում է այնտեղ /var/log/audit/audit.log
, բայց պետք չէ ամբողջությամբ կարդալ՝ սխալներ գտնելու համար։ Սխալները գտնելու համար կարող եք օգտագործել audit2why կոմունալ ծրագիրը: Գործարկեք հետևյալ հրամանը.
$ audit2why < /var/log/audit/audit.log
Արդյունքում, դուք կստանաք սխալների ցանկ: Եթե գրանցամատյանում սխալներ չեն եղել, ապա ոչ մի հաղորդագրություն չի ցուցադրվի:
SELinux քաղաքականության կարգավորում
SELinux քաղաքականությունը կանոնների մի շարք է, որոնք կարգավորում են SELinux անվտանգության մեխանիզմը: Քաղաքականությունը սահմանում է որոշակի միջավայրի կանոնների մի շարք: Այժմ մենք կսովորենք, թե ինչպես կարգավորել կանոնները, որպեսզի թույլ տան մուտք գործել արգելված ծառայություններ:
1. Տրամաբանական արժեքներ (անջատիչներ)
Անջատիչները (բուլյանները) թույլ են տալիս փոփոխել քաղաքականության մասերը գործարկման ժամանակ՝ առանց նոր քաղաքականություն ստեղծելու: Դրանք թույլ են տալիս փոփոխություններ կատարել՝ առանց SELinux-ի քաղաքականությունը վերագործարկելու կամ վերակոմպիլյացիայի։
Օրինակ
Ենթադրենք, մենք ուզում ենք կիսել օգտվողի գլխավոր գրացուցակը FTP read/write-ի միջոցով, և մենք արդեն կիսվել ենք այն, բայց երբ փորձում ենք մուտք գործել այն, ոչինչ չենք տեսնում: Դա պայմանավորված է նրանով, որ SELinux քաղաքականությունը թույլ չի տալիս FTP սերվերին կարդալ և գրել օգտվողի հիմնական գրացուցակը: Մենք պետք է փոխենք քաղաքականությունը, որպեսզի FTP սերվերը կարողանա մուտք գործել տնային դիրեկտորիաներ: Եկեք տեսնենք, արդյոք կան անջատիչներ դրա համար՝ անելով
$ semanage boolean -l
Այս հրամանը կցուցադրի առկա անջատիչները իրենց ընթացիկ վիճակով (միացված կամ անջատված) և նկարագրությամբ: Դուք կարող եք կատարելագործել ձեր որոնումը` ավելացնելով grep` միայն ftp-ի արդյունքները գտնելու համար.
$ semanage boolean -l | grep ftp
և դուք կգտնեք հետևյալը
ftp_home_dir -> off Allow ftp to read & write file in user home directory
Այս անջատիչը անջատված է, ուստի մենք այն միացնելու ենք setsebool $ setsebool ftp_home_dir on
Այժմ մեր ftp daemon-ը կկարողանա մուտք գործել օգտվողի հիմնական գրացուցակ:
Նշում. Դուք կարող եք նաև ստանալ հասանելի անջատիչների ցանկ՝ առանց նկարագրության՝ անելով getsebool -a
2. Պիտակներ և համատեքստ
Սա SELinux քաղաքականության իրականացման ամենատարածված միջոցն է: Յուրաքանչյուր ֆայլ, թղթապանակ, գործընթաց և նավահանգիստ նշվում է SELinux համատեքստով.
- Ֆայլերի և թղթապանակների համար պիտակները պահվում են որպես ընդլայնված ատրիբուտներ ֆայլային համակարգում և կարող են դիտվել հետևյալ հրամանով.
$ ls -Z /etc/httpd
- Գործընթացների և պորտերի համար պիտակավորումը կառավարվում է միջուկի կողմից, և դուք կարող եք դիտել այս պիտակները հետևյալ կերպ.
պրոցես
$ ps –auxZ | grep httpd
նավահանգիստը
$ netstat -anpZ | grep httpd
Օրինակ
Հիմա եկեք նայենք մի օրինակի՝ պիտակները և համատեքստն ավելի լավ հասկանալու համար: Ենթադրենք, մենք ունենք վեբ սերվեր, որը գրացուցակի փոխարեն /var/www/html/ использует /home/dan/html/
. SELinux-ը սա կհամարի քաղաքականության խախտում, և դուք չեք կարողանա դիտել ձեր վեբ էջերը: Դա պայմանավորված է նրանով, որ մենք չենք սահմանել HTML ֆայլերի հետ կապված անվտանգության համատեքստը: Անվտանգության կանխադրված համատեքստը դիտելու համար օգտագործեք հետևյալ հրամանը.
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Ահա մենք ստացանք httpd_sys_content_t
որպես html ֆայլերի համատեքստ: Մենք պետք է սահմանենք այս անվտանգության համատեքստը մեր ընթացիկ գրացուցակի համար, որն այժմ ունի հետևյալ համատեքստը.
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
Այլընտրանքային հրաման՝ ֆայլի կամ գրացուցակի անվտանգության համատեքստը ստուգելու համար.
$ semanage fcontext -l | grep '/var/www'
Մենք նաև կօգտագործենք semanage կոնտեքստը փոխելու համար, երբ գտնենք ճիշտ անվտանգության համատեքստը: /home/dan/html-ի համատեքստը փոխելու համար գործարկեք հետևյալ հրամանները.
$ 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
Համատեքստը փոխվելուց հետո, օգտագործելով semanage, restorecon հրամանը կբեռնի ֆայլերի և դիրեկտորիաների լռելյայն համատեքստը: Մեր վեբ սերվերն այժմ կկարողանա կարդալ ֆայլերը թղթապանակից /home/dan/html
քանի որ այս թղթապանակի անվտանգության համատեքստը փոխվել է httpd_sys_content_t
.
3. Ստեղծել տեղական քաղաքականություն
Կարող են լինել իրավիճակներ, երբ վերը նշված մեթոդները ձեզ համար ոչ մի օգուտ չեն տալիս, և դուք ստանաք սխալներ (avc/denial) audit.log-ում: Երբ դա տեղի ունենա, դուք պետք է ստեղծեք տեղական քաղաքականություն: Դուք կարող եք գտնել բոլոր սխալները՝ օգտագործելով audit2why, ինչպես նկարագրված է վերևում:
Սխալները լուծելու համար կարող եք ստեղծել տեղական քաղաքականություն: Օրինակ, մենք սխալ ենք ստանում httpd-ի (apache) կամ smbd-ի (samba) հետ կապված, մենք grep ենք սխալները և ստեղծում ենք քաղաքականություն դրանց համար.
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
Այստեղ http_policy
и smb_policy
մեր ստեղծած տեղական քաղաքականությունների անուններն են: Այժմ մենք պետք է բեռնենք այս ստեղծված տեղական քաղաքականությունները ներկայիս SELinux քաղաքականության մեջ: Դա կարելի է անել հետևյալ կերպ.
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
Մեր տեղական կանոնները ներբեռնվել են, և մենք այլևս չպետք է ստանանք avc կամ denail audit.log-ում:
Սա իմ փորձն էր՝ օգնելու ձեզ հասկանալ SELinux-ը: Հուսով եմ, որ այս հոդվածը կարդալուց հետո դուք ավելի հարմարավետ կզգաք SELinux-ի հետ:
Source: www.habr.com