Шпаргалка для сисадміну 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 / 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. Щоб налаштувати окремий процес (домен) для роботи в режимі 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

Додати коментар або відгук