SELinux sysadmin խաբեության թերթիկ. 42 պատասխաններ կարևոր հարցերի

Հոդվածի թարգմանությունը պատրաստվել է հատուկ դասընթացի ուսանողների համար «Linux Administrator».

SELinux sysadmin խաբեության թերթիկ. 42 պատասխաններ կարևոր հարցերի

Այստեղ դուք կստանաք կյանքի, տիեզերքի և Linux-ի ամեն ինչի վերաբերյալ կարևոր հարցերի պատասխաններ՝ բարելավված անվտանգությամբ:

«Կարևոր ճշմարտությունն այն մասին, որ ամեն ինչ միշտ չէ, ինչ թվում է, հայտնի է…»

-Դուգլաս Ադամս, Ավտոստոպի ուղեցույց դեպի Գալակտիկա

Անվտանգություն. Հուսալիության բարձրացում: Նամակագրություն. Քաղաքականություն. Ապոկալիպսիսի չորս ձիավորներ սիսադմին. Ի լրումն մեր ամենօրյա առաջադրանքների՝ մոնիտորինգ, կրկնօրինակում, ներդրում, կազմաձևում, թարմացում և այլն, մենք պատասխանատու ենք նաև մեր համակարգերի անվտանգության համար: Նույնիսկ այն համակարգերը, որտեղ երրորդ կողմի մատակարարը մեզ խորհուրդ է տալիս անջատել ուժեղացված անվտանգությունը: Կարծես աշխատանք է Իթան Հանթ Mission Impossible-ից:

Կանգնած այս երկընտրանքի առաջ՝ որոշ համակարգի ադմինիստրատորներ որոշում են ընդունել կապույտ հաբքանի որ նրանք կարծում են, որ երբեք չեն իմանա կյանքի և տիեզերքի և այդ ամենի մեծ հարցի պատասխանը: Եվ ինչպես բոլորս գիտենք, այդ պատասխանը 42 է։

Գալակտիկայի ավտոստոպի ուղեցույցի ոգով, ահա 42 պատասխաններ կարևոր հարցերի կառավարման և օգտագործման վերաբերյալ: SELinux- ը ձեր համակարգերում:

1. SELinux-ը հարկադիր մուտքի վերահսկման համակարգ է, ինչը նշանակում է, որ յուրաքանչյուր գործընթաց ունի պիտակ: Յուրաքանչյուր ֆայլ, գրացուցակ և համակարգի օբյեկտ ունի նաև պիտակներ: Քաղաքականության կանոնները կարգավորում են մուտքը պիտակավորված գործընթացների և օբյեկտների միջև: Միջուկը պարտադրում է այս կանոնները:

2. Երկու ամենակարևոր հասկացություններն են. Պիտակավորում - նշում (ֆայլեր, գործընթացներ, նավահանգիստներ և այլն) և Տիպի կիրարկում (որը մեկուսացնում է գործընթացները միմյանցից՝ ելնելով տեսակներից):

3. Պիտակի ճիշտ ձևաչափ user:role:type:level (ըստ ցանկության):

4. Բազմաստիճան անվտանգության ապահովման նպատակը (Բազմաստիճան անվտանգություն - MLS) է կառավարել գործընթացները (տիրույթները)՝ հիմնվելով նրանց կողմից օգտագործվող տվյալների անվտանգության մակարդակի վրա: Օրինակ, գաղտնի գործընթացը չի կարող կարդալ գերգաղտնի տվյալները:

5. Բազմաստիճան անվտանգության ապահովում (Multi-Category Security - MCS) պաշտպանում է նմանատիպ գործընթացները միմյանցից (օրինակ՝ վիրտուալ մեքենաներ, OpenShift շարժիչներ, SELinux ավազատուփեր, կոնտեյներներ և այլն)։

6. Միջուկի ընտրանքներ SELinux ռեժիմները բեռնման ժամանակ փոխելու համար.

  • autorelabel=1 → ստիպում է համակարգը սկսել նորից նշել
  • selinux=0 → միջուկը չի բեռնում SELinux ենթակառուցվածքը
  • enforcing=0 → ներբեռնել թույլատրելի ռեժիմով

7. Եթե ​​Ձեզ անհրաժեշտ է վերապիտակավորել ամբողջ համակարգը.

# touch /.autorelabel
#reboot

Եթե ​​համակարգի պիտակավորումը պարունակում է բազմաթիվ սխալներ, հնարավոր է, որ ձեզ անհրաժեշտ լինի բեռնել թույլատրելի ռեժիմով, որպեսզի վերապիտակավորումը հաջողվի:

8. Ստուգելու համար, թե արդյոք SELinux-ը միացված է. # getenforce

9. SELinux-ը ժամանակավորապես միացնելու/անջատելու համար՝ # setenforce [1|0]

10: SELinux-ի կարգավիճակի ստուգում. # sestatus

11: Կազմաձևման ֆայլ. /etc/selinux/config

12: Ինչպե՞ս է աշխատում SELinux-ը: Ահա Apache վեբ սերվերի նշագրման օրինակ.

  • Երկուական ներկայացում. /usr/sbin/httpd→httpd_exec_t
  • Կազմաձևման գրացուցակ. /etc/httpd→httpd_config_t
  • Մատյան ֆայլերի գրացուցակ. /var/log/httpd → httpd_log_t
  • Բովանդակության գրացուցակ. /var/www/html → httpd_sys_content_t
  • Գործարկման սցենար. /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Գործընթացը ` /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Նավահանգիստներ: 80/tcp, 443/tcp → httpd_t, http_port_t

Գործընթացը գործում է համատեքստում httpd_t, կարող է փոխազդել պիտակով օբյեկտի հետ httpd_something_t.

13: Շատ հրամաններ արգումենտ են ընդունում -Z համատեքստ դիտելու, ստեղծելու և փոփոխելու համար.

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Համատեքստերը սահմանվում են, երբ ֆայլերը ստեղծվում են իրենց մայր գրացուցակի համատեքստի հիման վրա (որոշ բացառություններով): RPM-ները կարող են ստեղծել համատեքստեր, ինչպես տեղադրման ժամանակ:

14: SELinux-ի սխալների չորս հիմնական պատճառ կա, որոնք ավելի մանրամասն նկարագրված են ստորև՝ 15-21 պարագրաֆներում.

  • Պիտակավորման խնդիրներ
  • Այն պատճառով, որ SELinux-ը պետք է իմանա
  • Սխալ SELinux քաղաքականության/հավելվածում
  • Ձեր տեղեկատվությունը կարող է վտանգված լինել

15: Պիտակավորման խնդիր: եթե ձեր ֆայլերը գտնվում են /srv/myweb սխալ պիտակավորված, մուտքը կարող է մերժվել: Ահա մի քանի եղանակներ այն շտկելու համար.

  • Եթե ​​գիտեք պիտակը.
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Եթե ​​գիտեք համարժեք նշումով ֆայլ՝
    # semanage fcontext -a -e /srv/myweb /var/www
  • Համատեքստի վերականգնում (երկու դեպքում էլ).
    # restorecon -vR /srv/myweb

16: Նշման խնդիր. եթե ֆայլը պատճենելու փոխարեն տեղափոխեք, ֆայլը կպահպանի իր սկզբնական համատեքստը: Այս խնդիրը շտկելու համար.

  • Փոխեք համատեքստի հրամանը պիտակով.
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Փոխեք համատեքստի հրամանը հղման պիտակով.
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Վերականգնել համատեքստը (երկու դեպքում էլ). # restorecon -vR /var/www/html/

17: Եթե SELinux դուք պետք է իմանաքոր HTTPD-ը լսում է 8585 նավահանգստում, ասեք SELinux-ին.

# semanage port -a -t http_port_t -p tcp 8585

18: SELinux դուք պետք է իմանաք բուլյաններ, որոնք թույլ են տալիս SELinux քաղաքականության մասերը փոփոխել գործարկման ժամանակ՝ առանց SELinux քաղաքականության վերաշարադրման իմացության: Օրինակ, եթե ցանկանում եք, որ httpd-ն էլփոստ ուղարկի, մուտքագրեք. # setsebool -P httpd_can_sendmail 1

19: SELinux դուք պետք է իմանաք Բուլյան արժեքներ SELinux-ի կարգավորումները միացնելու/անջատելու համար.

  • Բոլոր բուլյանները տեսնելու համար՝ # getsebool -a
  • Յուրաքանչյուրի նկարագրությունը տեսնելու համար՝ # semanage boolean -l
  • Բուլյան արժեք սահմանելու համար՝ # setsebool [_boolean_] [1|0]
  • Մշտական ​​տեղադրման համար ավելացրեք -P. Օրինակ ` # setsebool httpd_enable_ftp_server 1 -P

20: SELinux-ի քաղաքականությունը/հավելվածները կարող են պարունակել սխալներ, այդ թվում՝

  • Կոդի անսովոր ուղիներ
  • Կազմաձևերը
  • Վերահղում stdout
  • Ֆայլի նկարագրիչի արտահոսք
  • Գործարկվող հիշողություն
  • Վատ կառուցված գրադարաններ

Բաց տոմսեր (զեկույց մի ներկայացրեք Bugzilla-ին, Bugzilla-ում SLA չկա):

21: Ձեր տեղեկատվությունը կարող է վտանգված լինելեթե ունեք սահմանափակ տիրույթներ, որոնք փորձում են՝

  • Բեռնել միջուկի մոդուլները
  • Անջատել SELinux պարտադրված ռեժիմը
  • գրել etc_t/shadow_t
  • Փոխեք iptables-ի կանոնները

22: SELinux գործիքներ քաղաքականության մոդուլներ մշակելու համար.

# yum -y install setroubleshoot setroubleshoot-server

Վերագործարկեք կամ վերագործարկեք auditd տեղադրումից հետո:

23: Օգտագործեք

journalctl

հետ կապված բոլոր տեղեկամատյանները ցուցակագրելու համար setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24: Օգտագործեք journalctl ցուցակագրելու բոլոր տեղեկամատյանները, որոնք կապված են հատուկ SELinux պիտակի հետ: Օրինակ:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25: Երբ SELinux-ի սխալ է տեղի ունենում, օգտագործեք գրանցամատյանը setroubleshoot առաջարկելով մի քանի հնարավոր լուծումներ.
Օրինակ, սկսած journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26: Մուտքագրում. SELinux-ը գրանցում է տեղեկությունները շատ տեղերում.

  • / var / log / հաղորդագրությունները
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27: Մուտքագրում. որոնում է SELinux-ի սխալները աուդիտի մատյանում.

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28: Հատուկ ծառայության համար SELinux Access Vector Cache (AVC) հաղորդագրությունները գտնելու համար.

# ausearch -m avc -c httpd

29: Օգտակար audit2allow հավաքում է տեղեկատվություն արգելված գործողությունների տեղեկամատյաններից, այնուհետև ստեղծում է SELinux-ի թույլտվության քաղաքականության կանոնները: Օրինակ:

  • Մարդկանց համար ընթեռնելի նկարագրություն ստեղծելու համար, թե ինչու է մուտքն արգելվել. # audit2allow -w -a
  • Տեսակի կիրառման կանոնը դիտելու համար, որը թույլ է տալիս մուտքի արգելված լինել. # audit2allow -a
  • Հատուկ մոդուլ ստեղծելու համար. # audit2allow -a -M mypolicy
  • Տարբերակ -M ստեղծում է տիպի հարկադիր ֆայլ (.te) նշված անունով և կանոնը կազմում է քաղաքականության փաթեթի մեջ (.pp): mypolicy.pp mypolicy.te
  • Հատուկ մոդուլ տեղադրելու համար. # semodule -i mypolicy.pp

30: Մեկ գործընթաց (տիրույթ) թույլատրելի ռեժիմով գործարկելու համար կարգավորելու համար. # semanage permissive -a httpd_t

31: Եթե ​​այլևս չեք ցանկանում, որ տիրույթը թույլատրելի լինի. # semanage permissive -d httpd_t

32: Բոլոր թույլատրելի տիրույթներն անջատելու համար՝ # semodule -d permissivedomains

33: MLS SELinux քաղաքականության ակտիվացում. # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Համոզվեք, որ SELinux-ը աշխատում է թույլատրելի ռեժիմով. # setenforce 0
Օգտագործեք սցենար fixfilesհամոզվելու համար, որ ֆայլերը վերանշանակված են հաջորդ վերագործարկման ժամանակ.

# fixfiles -F onboot # reboot

34: Ստեղծեք օգտատեր՝ հատուկ MLS տիրույթով. # useradd -Z staff_u john

Օգտագործելով հրամանը useradd, քարտեզագրեք նոր օգտվողին գոյություն ունեցող SELinux օգտագործողի վրա (այս դեպքում, staff_u).

35: SELinux-ի և Linux-ի օգտատերերի նամակագրությունը դիտելու համար՝ # semanage login -l

36: Օգտագործողի համար սահմանեք որոշակի տիրույթ. # semanage login --modify --range s2:c100 john

37: Օգտագործողի հիմնական գրացուցակում պիտակը շտկելու համար (անհրաժեշտության դեպքում). # chcon -R -l s2:c100 /home/john

38: Ընթացիկ կատեգորիաները դիտելու համար. # chcat -L

39: Կատեգորիաները փոխելու կամ ձեր սեփականը ստեղծելու համար փոխեք ֆայլը հետևյալ կերպ.

/etc/selinux/_<selinuxtype>_/setrans.conf

40: Հատուկ ֆայլի, դերի և օգտագործողի համատեքստում հրաման կամ սցենար գործարկելու համար.

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t ֆայլի համատեքստ
  • -r դերի համատեքստ
  • -u օգտագործողի համատեքստ

41: SELinux-ով աշխատող բեռնարկղերն անջատված են.

  • Պոդման. # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42: Եթե ​​Ձեզ անհրաժեշտ է բեռնարկղին լիարժեք մուտք տրամադրել համակարգ.

  • Պոդման. # podman run --privileged …
  • Docker: # docker run --privileged …

Եվ հիմա դուք արդեն գիտեք պատասխանը. Այսպիսով, խնդրում ենք խուճապի մի մատնվեք և միացրեք SELinux-ը:

Հղումներ.

Source: www.habr.com

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