Шпаргалка за системни администратори относно SELinux: 42 отговора на важни въпроси

Преводът на статията е подготвен специално за студентите в курса "Администратор Linux".

Шпаргалка за системни администратори относно SELinux: 42 отговора на важни въпроси

Тук ще намерите отговори на важни въпроси за живота, вселената и всичко останало в Linux с подобрена безопасност.

"Важно е да разберем, че нещата не винаги са това, което изглеждат, е общеизвестно..."

―Дъглас Адамс, Автостопом из галактиката

Сигурност. Повишаване на надеждността. Съответствие. Политика. Четирима ездачи на Апокалипсиса на системния администратор. В допълнение към нашите ежедневни задачи — наблюдение, резервно копиране, внедряване, конфигуриране, обновяване и т.н. — ние също отговаряме за сигурността на нашите системи. Дори на тези системи, при които външен доставчик ни препоръчва да изключим повишената сигурност. Това е като работата на Етан Хънт от "Мисията невъзможна".

Срещайки тази дилема, някои системни администратори решават да вземат синята таблетка, защото смятат, че никога няма да разберат отговора на големия въпрос за живота, вселената и всичко останало. И, както всички знаем, този отговор е 42.

В духа на "Автостопом из галактиката", тук са представени 42 отговора на важни въпроси относно управлението и използването на SELinux в нашите системи.

1. SELinux е система за принудително управление на достъпа, което означава, че всеки процес има етикет (label). Всеки файл, директория и системен обект също имат етикети. Правилата на политиката управляват достъпа между етикирани процеси и обекти. Ядрото осигурява прилагането на тези правила.

2. Двете най-важни концепции са: Етикетиране — етикетиране (файлове, процеси, портове и т.н.) и Налагане на тип (което изолира процесите едни от други на базата на типове).

3. Правилният формат на етикета потребител:роля:тип:ниво (по избор).

4. Целта на осигуряването на многостепенна безопасност (Многостепенна безопасност — MLS) е управлението на процесите (домейни) на базата на нивото на безопасност на данните, с които ще работят. Например, секретен процес не може да прочете свръхсекретни данни.

5. Осигуряването на многокатегорична безопасност (Много категории — 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:

14 юни 19:41:07 web1 setroubleshoot: SELinux предотвратява httpd да получи достъп до атрибутите на файла /var/www/html/index.html. За пълно съобщение изпълнете: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux предотвратява httpd да получи достъп до атрибутите на файла /var/www/html/index.html.

***** Плъгин restorecon (99.5% увереност) предлага ************************

Ако искате да поправите етикета,
/var/www/html/index.html по подразбиране етикетът трябва да бъде httpd_syscontent_t.
След това можете да restorecon.
Направете
# /sbin/restorecon -v /var/www/html/index.html

26. Логване: SELinux записва информация на много места:

  • /var/log/messages
  • /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. Включване на política de 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: # 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