Опубліковано Вівторок в 17:363 дн Адміністратор Security-Enhanced Linux (SELinux) - це новий метод контролю доступу до Linux на основі модуля ядра Linux Security (LSM). SELinux включений за замовчуванням в багатьох дистрибутивах на основі Red Hat, що використовують пакетну базу rpm, наприклад, Fedora, CentOS і т д. станів. Як система виконання прикладів використовувалася CentOS 8.Основи SELinuxSELinux є системою маркування, кожен процес має мітку. Кожен файл, каталог або навіть користувач у системі має мітку. Навіть портам та пристроям та іменам хостів у системі присвоєно мітки. SELinux визначає правила доступу процесу до об'єктів із певними мітками. Це називається політикою. За дотриманням правил стежить ядро. Іноді це ще називається обов'язковий контроль доступу (Mandatory Access Control, MAC).Власник файлу не має повної свободи дій над атрибутами безпеки. Стандартні атрибути контролю доступу, такі як група та власник нічого не означають для SELinux. Повністю все керується мітками. Значення атрибутів можуть бути встановлені без прав root, але на це потрібно мати спеціальні повноваження SELinux.Тепер поговоримо трохи про політиків. Ми визначаємо мітку для процесів певного типу, а також об'єкти файлової системи теж певного типу. Ось уявіть собі систему, в якій об'єкти (процеси) це кішки і собаки. Це типи процесів. І у нас є об'єкти, до яких вони хочуть мати доступ – їжа. Але їжа у них різна їжа_котів та їжа_собак. Потрібно, щоб об'єкти мали доступ лише до своєї їжі.У собаки є дозвіл їсти свою їжу, а у кішки - свою. У політиках SELinux це буде виглядати ось так:дозволити кішці корм_кішок єдозволити собаці корм_собак єТепер ядро стежитиме, щоб дотримувалися цих правил. У системі SELinux все за замовчуванням заборонено, таким чином, якщо собака спробує з'їсти котячий корм, ядро не дозволить це зробити.Припустимо, процес Apache має мітку httpd_t , а файли, до яких Apache повинен бути доступ ми назвали httpd_sys_content . Також у нас є дані кредитних карток, які зберігаються в базі даних mysql. Якщо хакер зламає процес Apache і в нього буде root доступ, він все одно не зможе отримати доступ до файлів від mysql.SELinux може викликати у системних адміністраторів велику кількість проблем, багато хто її просто відключає, таким чином вирішивши проблему і зменшивши безпеку. Як уже говорилося вище, за замовчуванням SELinux блокує все та вся. Це підходить під опис суворої політики. Але щоб полегшити системним адміністраторам роботу, було розроблено інші стандартні політики. У багатьох дистрибутивах використовується цільова політика (targeted), вона охоплює близько 200 мережевих служб і процесів, все ж таки інші програми запускаються і працюють вільно, до них ніякі моделі SELinux не застосовуються.SELinux може працювати в трьох режимах - відключений, система повністю відключена і не працює, режим обмежень Enforcing - програма активована і блокує всі дії, що не відповідають політикам, і третій режим Permissive - тільки фіксувати порушення.Політики SELinux бувають також кількох типів. Політика targeted, яку ми розглядали вище відноситься до типу Type Enforcment (TE) політик, в яких управління доступом до файлів здійснюється на основі ролей. Сюди належить політика strict . Є ще політики Multi-Level Security (MLS) , в яких додані додаткові категорії, вони складні і непотрібні пересічному користувачеві, тому початківцям можна поки що забути про їхнє існування. Треба зрозуміти, що підсистема SELinux розроблена військовими для військових, тому звичайним користувачам всі її можливості навряд чи знадобляться. У цій статті ми обговорюватимемо саме політику targeted.Теорія загалом розглянута. А тепер перейдемо до практичної частини.Налаштування SELinux1. СтанПісля перезавантаження ви можете переглянути стан SELinux:Код:sestatusТут бачимо, що система включена SELinux status: enabled, Поточний режим Current mode - enforcing , тобто система блокуватиме невирішені дії. Політика - targeted . Ця політика використовується для того, щоб правила SELinux поширювалися лише на певні служби.3. Режим роботиЗараз увімкнемо активний режим, для цього виконайте команду:Код:sudo setenforce 1Вимкнути активний режим можна, передавши в ту ж команду 0:Код:sudo setenforce 0Подивитися режим, що використовується зараз, теж можна подібною командою:КодgetenforceВсе основне налаштування SELinux виконується через файл /etc/selinux/config . Тут можна як повністю відключити selinux, так і настроїти політику безпеки.sudo vi /etc/selinux/configЦей параметр означає режим роботи SELinux, ви можете вказати тут один із трьох параметрів enforce , permissive та disabledSELINUX=enforcingВикористовуйте disabled щоб повністю вимкнути SELinux або будь-який інший, щоб увімкнути SELinux назад. Цей режим буде використовуватись за умовчанням під час старту системи.4. Вибір політикиНалаштування SELinux політик виконується також у цьому файлі. За політику відповідає параметр SELINUXTYPE :SELINUXTYPE=targetedВи можете посилатися на будь-яку політику, розташовану в каталозі /etc/selinux . Можуть використовуватися три основні політики:targeted - захищає основні системні сервіси, наприклад, веб-сервер, DHCP, DNS, але не торкається всіх інших програм.strict - найсуворіша політика, керує як мережевими службами, а й програмами користувача.mls - містить як правила, а й різні рівні безпеки. Вона дає змогу реалізувати багаторівневу систему безпеки на основі SELinux.Можна також додати свої політики. Для застосування політики необхідно перезавантажити комп'ютер, і бажано, щоб SELinux під час цього перезавантаження був у режимі аудиту (permissive). Також, щоб система оновила всі мітки у файловій системі, можливо, доведеться створити порожній файл у корені:Код:sudo vi /.autolabel5. Перегляд контекстуКожен файл і процес має свою SELinux мітку, яку прийнято називати контекстом. Яка мітка буде присвоєна тому чи іншому файлу чи процесу визначається політикою, у нашому випадку це targeted. Переглянути контекст SELinux можна за допомогою команди ls:Код:ls -lZ /Синтаксис у рядка контексту такий:ім'я_користувача:ім'я_об'єкта:тип_або_домен:рівень_доступуУ політиці targeted ім'я користувача та ім'я об'єкта практично не використовуються, рівень доступу - відноситься до MLS політиків і на нього теж можна не звертати уваги. А дивитись варто на третє поле. Для файлів чи папок воно називається типом, а процесів доменом. Наприклад, у папки /bin тип bin_t .Щоб подивитися домен процесу, використовуйте команду ps, наприклад, для httpd:ps auxZ | grep httpdЯк бачите, тут у сервісу httpd домен httpd_t це означає, що йому будуть доступні тільки ті ресурси, які дозволено чіпати цьому домену, в даному випадку це тип sys_httpd_content. Все це, включаючи назви, визначено у політиці targeted. У той же час інші процеси, наприклад, grep, запущені з доменом unconfined_t , це означає, що їм будуть доступні всі без винятку ресурси в системі, тому що саме така поведінка налаштована в політиці для цього домену.6. Зміна контекстуЗа промовчанням папка веб-сервера знаходиться /var/www/html . У неї контекст такий, як ми обговорили раніше:Якщо ви захочете перенести цю папку в інше місце, потрібно буде змінити контекст для нової папки. Для цього використовується команда chcon, треба вказати лише тип:Код:sudo chcon -Rv --type=httpd_sys_content_t /home/losst/htdocsОднак, можна вказати контекст повністю:Код:sudo chcon -Rv system_u:object_r:httpd_sys_content_t:s0 /home/losst/htdocsЦя зміна збережеться після перезавантаження, але після оновлення позначок файлової системи вона буде стерто. Щоб цього уникнути, треба додати правило в політику.7. Модифікація політикиВи можете додати додаткові правила присвоєння міток файлів у політику за допомогою утиліти semanage. Щоб встановити тип httpd_sys_content_t для директорії /home/losst/httdocs , і всі файли в ній треба виконати:Код:semanage fcontext -a -t httpd_sys_content_t "/home/losst/httdocs(/.*)?"Якщо потрібно поміняти контекст тільки для одного файлу, маску використовувати не обов'язково:Код:semanage fcontext -a -t httpd_sys_content_t "/home/losst/httdocs/index.html"Сама собою ця команда у файловій системі нічого не змінює, треба створити файл /.autolabel і перезавантажити комп'ютер або виконати команду restorecon для потрібної папки:Код:restorecon -R -v /home/losst/httdocsПереглянути всі додані таким чином правила можна за допомогою такої команди:Код:semanage fcontext -C -l8. ЛогиНезважаючи на режим, в якому працює SELinux, всі повідомлення про порушення пишуться в лог файл /var/log/audit/audit.log . Ви можете переглянути його вручну:Код:less /var/log/audit/audit.logАбо для більш зручного перегляду можна використовувати утиліту sealert. Для її встановлення виконайте:Код:sudo yum install setroubleshootПотім можна дивитися:Код:sealert -a /var/log/audit/audit.logУтиліта відображає не всі рядки, а лише повідомлення про помилки доступу і при цьому виводить запропоновані рішення. Дуже зручно. У числі рішень утиліта пропонує створити свій модуль для політики targeted, який дозволяє робити те, що зараз не можна.9. МодуліПолітика targeted модульна. Вона складається з безлічі модулів для різних програм. Щоб переглянути всі активні на даний момент модулі, виконайте:Код:semodule -lЩоб переглянути всі встановлені модулі, виконайте:Код:semodule --list-modules=fullУ минулому пункті було показано, як за допомогою утиліти sealert переглянути можливі рішення проблеми доступу. Найчастіше рішення створити свій модуль для політики на основі лога. Утиліта audit2allow аналізує лог файл, знаходить там відомості про об'єкти, до яких немає доступу, а потім дозволяє цей доступ у новому модулі. У попередньому прикладі утиліта sealert порадила таку команду:Код:ausearch -c 'httpd' --raw | audit2allow -M my-httpdПісля цього в поточній папці з'явиться пакет модуля з розширенням .pp, який можна встановити за допомогою утиліти semodule :Кодsudo semodule -i my-httpd.pp10. ПрапориКрім того, поведінку політики можна налаштовувати за допомогою прапорів. Зазвичай, прапори, які треба включити рекомендує та ж утиліта sealert. Усі прапори визначено у модулях політики. Подивитися які прапори доступні зараз та їх стан можна за допомогою команди:Код:getsebool -aЩоб змінити стан прапора, використовуйте команду setsebool. Наприклад, щоб дозволити модулям httpd підключатися до мережі, виконайте:Код:setsebool -P httpd_can_network_connect on
Для публікації повідомлень створіть обліковий запис або авторизуйтесь