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

Այստեղ դուք կստանաք պատասխաններ կարևոր հարցերին կյանքի, вселенной-ի և Linux-ում անվտանգության բարելավմանը վերաբերող հարցերին:
«Կարևոր ճշմարտություն, որ բաները միշտ չեն, որ նրանք թվում են, հանրահայտ է…»
―Դուգլաս Ադամս, Գալակտիկայում ավտոստոպով
Անվտանգություն։ Համակարգերի հուսահատության բարձրացում։ Համապատասխանություն։ Գիծ։ Ադմինիստրատորի չորս riders-ը: Մեր ամենօրյա խնդիրներին՝ մոնիտորինգին, պահուստավորմանը, ներդրմանը, կարգաբերմանը, թարմացմանը և այլն, մենք նույնպես պատասխանատու ենք մեր համակարգերի անվտանգության համար: Նույնիսկ այն համակարգերի համար, որտեղ երրորդ կողմի մատնանշում է մեզ, խիստ անվտանգությունն անջատելու։ Դա նման է մասին «Անձնական նոր գործեր» ֆիլմում։
Այս dilema-յի դիմելով, որոշ համակարգային ադմինիստրատորներ վճռում են վերցնել , քանի որ նրանք կարծում են, որ երբեք չեն իմանա կյանքի, вселенной-ի և ամեն ինչի մեծ հարցի պատասխանն։ Եվ, ինչպես բոլորս գիտենք, այս պատասխանն է 42:
Գալակտիկայում ավտոստոպով ոգով, այստեղ աջակցվում են 42 պատասխաններ կարևոր հարցերին կառավարման և օգտագործման մասին ձեր համակարգերում:
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 -Zid -Zps -Znetstat -Zcp -Zmkdir -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.html26. 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-ը:
Հղումներ:
- by
- by Dan Walsh
- by
- by
Ընտանիք: habr.com
