SELinux-ի համար համակարգային ադմինիստրատորների համար ուղեցույց: 42 պատասխան կարևոր հարցերի

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

SELinux-ի համար համակարգային ադմինիստրատորների համար ուղեցույց: 42 պատասխան կարևոր հարցերի

Այստեղ դուք կստանաք պատասխաններ կարևոր հարցերին կյանքի, вселенной-ի և Linux-ում անվտանգության բարելավմանը վերաբերող հարցերին:

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

―Դուգլաս Ադամս, Գալակտիկայում ավտոստոպով

Անվտանգություն։ Համակարգերի հուսահատության բարձրացում։ Համապատասխանություն։ Գիծ։ Ադմինիստրատորի չորս riders-ը: Մեր ամենօրյա խնդիրներին՝ մոնիտորինգին, պահուստավորմանը, ներդրմանը, կարգաբերմանը, թարմացմանը և այլն, մենք նույնպես պատասխանատու ենք մեր համակարգերի անվտանգության համար: Նույնիսկ այն համակարգերի համար, որտեղ երրորդ կողմի մատնանշում է մեզ, խիստ անվտանգությունն անջատելու։ Դա նման է Էթան Հանտի մասին «Անձնական նոր գործեր» ֆիլմում։

Այս dilema-յի դիմելով, որոշ համակարգային ադմինիստրատորներ վճռում են վերցնել ապրիլային դեղահատը, քանի որ նրանք կարծում են, որ երբեք չեն իմանա կյանքի, вселенной-ի և ամեն ինչի մեծ հարցի պատասխանն։ Եվ, ինչպես բոլորս գիտենք, այս պատասխանն է 42:

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

1. SELinux-ը հարկադիր հասանելիության կառավարման համակարգ է, ինչը նշանակում է, որ յուրաքանչյուր գործընթաց ունի պիտակ (label): Յուրաքանչյուր ֆայլ, կատալոգ և համակարգային առարկա նույնպես ունեն պիտակներ: Գործողությունների քաղաքականությունը կառավարվում է պիտակավորված գործընթացների և առարկաների միջև հասանելիության միջոցով: Անդրն է ապահովում այս կանոնների հետևումը:

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

3. Պիտակի ճիշտ ձևը user:role:type:level (պահանջվող է):

4. Մարդկային անվտանգության բազմաշերտությունը (Multilevel Security — MLS) նպատակն է կառավարել գործընթացները (դոմենները) տվյալների անվտանգության մակարդակի հիման վրա, որոնք նրանք կօգտագործեն։ Օրինակ, գաղտնի գործընթացը չի կարող կարդալ վերագրված տվյալները:

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

6. SELinux-ի ռեժիմները փոխելու համար kernel-ի պարամետրերը բեռնման ժամանակ:

  • autorelabel=1 → համակարգը նախաձեռնող կետակմանը նորից կանի
  • selinux=0 → kernel-ը չի բեռնում 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-ը կանխում է httpd-ին getattr մուտք ունենալու սպանված մասին /var/www/html/index.html: ամբողջական հաղորդագրությունը ստանալու համար կատարեք. sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux-ը կանխում է httpd-ին getattr մուտք ունենալու սպանված մասին /var/www/html/index.html:

***** Plugin restorecon (99.5 վստահություն) առաջարկում է ************************

Եթե ցանկանում եք շտկել նշանը,
/var/www/html/index.html նախնական նշանը պետք է լինի httpd_syscontent_t:
Այն ժամանակ կարող եք կատարել restorecon:
Կատարեք
# /sbin/restorecon -v /var/www/html/index.html

26. Logging: SELinux-ը տեղեկություններ է գրանցում բազմաթիվ վայրերում:

  • /var/log/messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Logging: որոնել 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. Մեկուսացված գործընթաց (դոմեն) ստեղծելու համար, կատարեք permissive ռեժիմում: # semanage permissive -a httpd_t

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

32. Որպեսզի անջատեք բոլոր permissive դոմենները: # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Համոզվեք, որ SELinux-ը աշխատում է permissive ռեժիմում: # 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: # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42. Եթե անհրաժեշտ է տալ контейներին ամբողջական մուտք համակարգին:

  • Podman: # podman run --privileged …
  • Docker: # docker run --privileged …

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

Հղումներ:

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster