Тут ви отримаєте відповіді на важливі питання про життя, всесвіт і все таке в Linux з покращеною безпекою.
"Важлива істина, що речі не завжди є тим, чим здаються, загальновідома ..."
-Дуглас Адамс, Автостопом по галактиці
Безпека. Підвищення надійності. Відповідність. Політика Чотири Вершники Апокаліпсису сісадміну. На додаток до наших щоденних завдань – моніторингу, резервного копіювання, впровадження, настроювання, оновлення тощо – ми також відповідаємо за безпеку наших систем. Навіть тих систем, де сторонній провайдер рекомендує нам вимкнути посилену безпеку. Це схоже на роботу Етана Ханта з “Місія нездійсненна”.
Зіткнувшись із цією дилемою, деякі системні адміністратори вирішують взяти блакитну таблетку, тому що вони думають, що ніколи не дізнаються відповідь на велике питання життя, всесвіту і всього такого. І, як ми всі знаємо, ця відповідь 42.
У дусі “Автостопом по галактиці”, тут наведено 42 відповіді на важливі питання щодо управління та використання SELinux у ваших системах.
1. SELinux - це система примусового керування доступом, що означає, що кожен процес має позначку (lable). Кожен файл, каталог і системний об'єкт мають мітки. Правила політики керують доступом між промаркованими процесами та об'єктами. Ядро забезпечує дотримання цих правил.
2. Двома найважливішими концепціями є: Маркування - маркування (файли, процеси, порти тощо) Type enforcement (який ізолює процеси один від одного на основі типів).
4. Метою забезпечення багаторівневої безпеки (Multi-Level Security - MLS) є управління процесами (доменами) на основі рівня безпеки даних, які вони будуть використовувати. Наприклад, секретний процес не може прочитати надсекретні дані.
5. Забезпечення мультикатегорійної безпеки (Multi-Category Security - MCS) захищає схожі процеси один від одного (наприклад, віртуальні машини, механізми OpenShift, пісочниці SELinux, контейнери тощо).
6. Параметри ядра для зміни режимів SELinux під час завантаження:
autorelabel=1 → змушує систему запускати перемаркування
Процес, запущений у контексті 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 для розробки модулів політики:
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 записує інформацію у багатьох місцях:
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. Щоб запустити команду або скрипт у певному файлі, ролі та контексті користувача: