Սկսնակների ուղեցույց SELinux-ի համար

Սկսնակների ուղեցույց SELinux-ի համար

Դասընթացի ուսանողների համար պատրաստված հոդվածի թարգմանությունը «Linux Security»

SELinux-ը կամ Security Enhanced Linux-ը մուտքի վերահսկման ուժեղացված մեխանիզմ է, որը մշակվել է ԱՄՆ Ազգային անվտանգության գործակալության (NSA) կողմից՝ կանխելու վնասակար ներխուժումները: Այն իրականացնում է հարկադիր (կամ պարտադիր) մուտքի վերահսկման մոդել (անգլերեն պարտադիր մուտքի վերահսկում, MAC) գոյություն ունեցող հայեցողական (կամ ընտրովի) մոդելի վրա (անգլերեն հայեցողական մուտքի վերահսկում, DAC), այսինքն՝ կարդալու, գրելու, գործարկելու թույլտվություններ:

SELinux-ն ունի երեք ռեժիմ.

  1. Իրականացնելը — մուտքի մերժում` հիմնված քաղաքականության կանոնների վրա:
  2. Թույլատրող — Քաղաքականությունը խախտող գործողությունների գրանցամատյանի պահպանում, որոնք արգելված կլինեն կիրառման ռեժիմում:
  3. Անաշխատունակ — 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

Добавить комментарий