Шпаргалка для сісадміна па SELinux: 42 адказы на важныя пытанні

Пераклад артыкула падрыхтаваны спецыяльна для студэнтаў курса "Адміністратар Linux".

Шпаргалка для сісадміна па SELinux: 42 адказы на важныя пытанні

Тут вы атрымаеце адказы на важныя пытанні аб жыцці, сусвеце і ўсім такім у Linux з палепшанай бяспекай.

"Важная ісціна, што рэчы не заўсёды з'яўляюцца тым, чым здаюцца, агульнавядомая…"

-Дуглас Адамс, Аўтастопам па Галактыцы

Бяспека. Павышэнне надзейнасці. Адпаведнасць. Палітыка. Чатыры Вершніка Апакаліпсісу сісадміна. У дадатак да нашых штодзённых задач - маніторынгу, рэзервоваму капіяванню, укараненню, наладзе, абнаўленню і г. д. - мы таксама адказваем за бяспеку нашых сістэм. Нават тых сістэм, дзе іншы правайдэр рэкамендуе нам адключыць узмоцненую бяспеку. Гэта падобна на працу Этана Ханта з "Місія невыканальная".

Сутыкнуўшыся з гэтай дылемай, некаторыя сістэмныя адміністратары вырашаюць узяць блакітную таблетку, таму што яны думаюць, што ніколі не даведаюцца адказ на вялікае пытанне жыцця, сусвету і ўсім такім. І, як мы ўсе ведаем, гэты адказ 42.

У духу "Аўтастопам па галактыцы", тут прыведзены 42 адказы на важныя пытанні аб кіраванні і выкарыстанні SELinux у вашых сістэмах.

1. SELinux - гэта сістэма прымусовага кіравання доступам, што азначае, што кожны працэс мае пазнаку (lable). Кожны файл, каталог і сістэмны аб'ект гэтак жа маюць пазнакі. Правілы палітыкі кіруюць доступам паміж прамаркіраванымі працэсамі і аб'ектамі. Ядро забяспечвае выкананне гэтых правіл.

2. Двума найболей важнымі канцэпцыямі з'яўляюцца: Маркіроўка - маркіроўка (файлы, працэсы, парты і т. д.) і Type enforcement (які ізалюе працэсы сябар ад сябра на аснове тыпаў).

3. Правільны фармат пазнакі user:role:type:level (апцыянальна).

4. Мэтай забеспячэння шматузроўневай бяспекі (Multi-Level Security - MLS) з'яўляецца кіраванне працэсамі (даменамі) на аснове ўзроўню бяспекі дадзеных, якія яны будуць выкарыстоўваць. Напрыклад, сакрэтны працэс не можа прачытаць звышсакрэтныя дадзеныя.

5. Забеспячэнне мультыкатэгорыйнай бяспекі (Multi-Category Security - MCS) абараняе падобныя працэсы адзін ад аднаго (напрыклад, віртуальныя машыны, механізмы OpenShift, пясочніцы SELinux, кантэйнеры і т. д.).

6. Параметры ядра для змены рэжымаў SELinux пры загрузцы:

  • autorelabel=1 → прымушае сістэму запускаць перамаркіроўку
  • selinux=0 → ядро ​​не загружае інфраструктуру SELinux
  • enforcing=0 → загрузка ў permissive рэжыме

7. Калі вам трэба перамаркіраваць усю сістэму:

# touch /.autorelabel
#reboot

Калі сістэмная маркіроўка ўтрымоўвае вялікую колькасць памылак, вам можа запатрабавацца загрузка ў permissive рэжыме, каб перамаркіроўка мінула паспяхова.

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. Ваша інфармацыя можа быць скампраметаваная, калі ў вас ёсць абмежаваныя дамены, якія спрабуюць:

  • Загрузіць модулі ядра
  • Адключыць enforced рэжым 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/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. Каб наладзіць асобны працэс (дамен) для працы ў 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 run --security-opt label=disable …

42. Калі вам трэба даць кантэйнеру поўны доступ да сістэмы:

  • Podman: # podman run --privileged …
  • докер: # docker run --privileged …

І зараз вы ўжо ведаеце адказ. Таму, калі ласка: не панікуйце і ўключыце SELinux.

спасылкі:

Крыніца: habr.com

Дадаць каментар