В июне 2023 года Red Hat приняла спорное решение изменить способ распространения исходного кода Red Hat Enterprise Linux (RHEL). В социальных сетях разгорелись бурные обсуждения, оставившие многих в недоумении относительно последствий этого решения. Возникло множество вопросов о будущей жизнеспособности вторичных сборок RHEL, затрагивающих такие дистрибутивы, как Rocky Linux, AlmaLinux, Oracle Linux и другие. Каждый из них впоследствии сделал заявления, пытаясь успокоить свои сообщества.
Тем не менее, многие в сообществе открытого ПО расценили решение Red Hat как откровенно подлый ход.
Всё больше людей заявляют, что они перейдут (или уже перешли) на Debian, ища убежища от того, что они считают жадным корпоративным влиянием. Я полностью понимаю это чувство. Однако есть проблема, о которой я хочу поговорить: безопасность.
Горькая правда заключается в том, что обеспечение безопасности — сложная задача. Это утомительно, неприятно и требует большой работы, чтобы сделать всё правильно.
Debian недостаточно делает для защиты пользователей.
Давно Red Hat внедрила использование SELinux (Security-Enhanced Linux). И они пошли дальше простого включения этой функции в своё ядро. Они проделали кропотливую работу по созданию политик SELinux по умолчанию для своего дистрибутива.
Эти политики поставляются включенными по умолчанию в их дистрибутиве. Политики помогают защитить различные демоны, работающие по умолчанию в RHEL, а также многие из наиболее популярных демонов, которые обычно используются на серверах.
Apache, nginx, MariaDB, PostgreSQL, OpenSSH и т. д. — все они охватываются политиками SELinux, поставляемыми в дистрибутивах RHEL.
Защита распространяется даже на контейнеры. Контейнеры становятся всё более предпочтительным методом развертывания программного обеспечения для разработчиков, включая меня. Распространенное заблуждение заключается в том, что если вы запускаете что-то в контейнере, это по своей сути безопасно. Это совершенно неверно. Сами по себе контейнеры не решают проблему безопасности. Они решают проблему распространения программного обеспечения. Они создают ложное впечатление безопасности у тех, кто их использует.
В дистрибутивах на основе Red Hat вы можете использовать podman — альтернативу Docker, которая позволяет запускать контейнеры без демона (в отличие от Docker) и предоставляет другие преимущества, например, возможность полностью безрутового запуска. Но Red Hat идет еще дальше и применяет строгие политики SELinux по умолчанию, которые отделяют контейнер от основной ОС и даже от других контейнеров!
Было множество примеров возможности выхода из контейнера и доступа к основной ОС или другим контейнерам. Вот где вступают в игру такие инструменты, как SELinux. Применение политик SELinux к контейнеру позволяет создать укрепленный «саркофаг» для вашего приложения, который снижает риск неизвестных будущих эксплоитов. И это практически не требует усилий в RHEL.
Red Hat понимала, что если они не проделают работу над этими политиками по умолчанию, их пользователи просто не будут использовать эту технологию, и миллионы серверов останутся уязвимыми. Потому что, будем реалистами, SELinux — сложная штука. Язык политик и инструменты громоздки, неинтуитивны и примерно так же привлекательны, как заполнение налоговых деклараций. Честно говоря, это ужасно в использовании — если вы вручную создаете свои собственные политики.
Но благодаря проделанной Red Hat работе, использование SELinux в RHEL в основном прозрачно и обеспечивает реальные преимущества безопасности для своих пользователей.
Подход Debian
Debian, оплот сообщества открытого исходного кода, почитается за свою стабильность и обширную библиотеку программного обеспечения. Я являюсь поклонником и ежегодно жертвую проекту (вам тоже следует!), хотя и не использую его в производственной среде.
Тем не менее, его система безопасности по умолчанию оставляет желать лучшего. Решение Debian включить AppArmor по умолчанию, начиная с версии 10, знаменует собой позитивный шаг к повышению безопасности, однако оно не достигает цели из-за неполноценной реализации в системе.
Опора Debian на AppArmor и его конфигурации по умолчанию выявляет системную проблему с его подходом к безопасности. Хотя AppArmor способен обеспечить надежную безопасность при правильной настройке, настройки Debian «из коробки» не используют весь его потенциал:
Ограниченные профили по умолчанию: Debian поставляется с минимальным набором профилей AppArmor, оставляя многие критически важные службы незащищенными.
Реактивная, а не проактивная позиция: Модель безопасности Debian часто полагается на пользователей в реализации более строгих политик, вместо предоставления безопасной по умолчанию конфигурации.
Непоследовательное применение: В отличие от SELinux в системах Red Hat, который применяется ко всей системе единообразно, AppArmor в Debian применяется фрагментарно, что приводит к потенциальным брешам в безопасности.
Нехватка ресурсов: Debian как сообщественный проект не имеет ресурсов для разработки и поддержки комплексных политик безопасности, сравнимых с теми, которые предоставляет Red Hat.
Очень часто пользователи запускают контейнерные рабочие нагрузки в Debian через Docker, который автоматически генерирует и загружает профиль AppArmor по умолчанию для контейнеров с именем docker-default
. К сожалению, это не очень надежный профиль с точки зрения безопасности, он излишне разрешителен.
Этот профиль, хотя и обеспечивает некоторую защиту, оставляет значительные поверхности атаки открытыми. Например:
network,
capability,
file,
umount,
# Host (privileged) processes may send signals to container processes.
signal (receive) peer=unconfined,
# runc may send signals to container processes (for "docker stop").
signal (receive) peer=runc,
# crun may send signals to container processes (for "docker stop" when used with crun OCI runtime).
signal (receive) peer=crun,
# dockerd may send signals to container processes (for "docker kill").
signal (receive) peer={{.DaemonProfile}},
# Container processes may send signals amongst themselves.
signal (send,receive) peer={{.Name}},
deny @{PROC}/* w, # deny write for all files directly in /proc (not in a subdir)
# deny write to files not in /proc/<number>/** or /proc/sys/**
deny @{PROC}/{[^1-9],[^1-9][^0-9],[^1-9s][^0-9y][^0-9s],[^1-9][^0-9][^0-9][^0-9/]*}/** w,
deny @{PROC}/sys/[^k]** w, # deny /proc/sys except /proc/sys/k* (effectively /proc/sys/kernel)
deny @{PROC}/sys/kernel/{?,??,[^s][^h][^m]**} w, # deny everything except shm* in /proc/sys/kernel/
deny @{PROC}/sysrq-trigger rwklx,
deny @{PROC}/kcore rwklx,
deny mount,
deny /sys/[^f]*/** wklx,
deny /sys/f[^s]*/** wklx,
deny /sys/fs/[^c]*/** wklx,
deny /sys/fs/c[^g]*/** wklx,
deny /sys/fs/cg[^r]*/** wklx,
deny /sys/firmware/** rwklx,
deny /sys/devices/virtual/powercap/** rwklx,
deny /sys/kernel/security/** rwklx,
Правило network разрешает все сетевые системные вызовы без ограничений.
Правило capability, без конкретных запретов, разрешает большинство возможностей по умолчанию.
Правило file предоставляет широкие права доступа к файлам, полагаясь на конкретные правила запрета для защиты.
AppArmor против SELinux
Фундаментальное различие между AppArmor и SELinux заключается в их подходе к МАС (Mandatory Access Control - принудительный контроль доступа). AppArmor работает на основе модели, основанной на путях, в то время как SELinux использует значительно более сложную систему принудительного управления доступом на основе типов. Это различие становится особенно очевидным в контейнерных средах.
SELinux применяет тип к каждому объекту в системе - файлам, процессам, портам, всему, что угодно. Когда вы запускаете контейнер в системе RHEL с поддержкой SELinux, ему немедленно назначается тип container_t - строгий механизм контроля доступа. Тип container_t эффективно изолирует контейнер, предотвращая его взаимодействие с любым объектом, не помеченным явно для использования контейнером.
Но SELinux не ограничивается принудительным контролем типов. Он выводит изоляцию контейнеров на новый уровень с помощью меток MCS (Multi-Category Security - многокатегорийная безопасность). Эти метки функционируют как дополнительный уровень разделения, гарантируя, что даже контейнеры одного типа (container_t) остаются изолированными друг от друга. Каждый контейнер получает свою собственную уникальную метку MCS, создавая то, что по сути является частной «песочницей» внутри более широкой среды container_t.
AppArmor, напротив, не заботится о типах или категориях. Он фокусируется на ограничении возможностей конкретных программ на основе предопределенных профилей. Эти профили указывают, к каким файлам программа может обращаться и какие операции она может выполнять. Хотя этот подход проще в реализации и понимании, ему не хватает детализации и системной согласованности принудительного контроля типов SELinux. Почти ни один из основных дистрибутивов Linux не распространяет по умолчанию исчерпывающие профили AppArmor для всех распространенных сетевых демонов.
Практические последствия этих различий весьма существенны. В среде SELinux скомпрометированный контейнер сталкивается со значительными препятствиями при доступе к хостовой системе или другим контейнерам или воздействии на них благодаря двойным барьерам принудительного контроля типов и меток MCS.
Это не значит, что один универсально лучше другого. SELinux предлагает более надежную изоляцию, но ценой повышенной сложности и потенциальных накладных расходов на производительность. AppArmor предоставляет более простую, более доступную модель безопасности, которая, тем не менее, может быть весьма эффективной при правильной настройке. Суть моего рассуждения в том, что Red Hat проделала работу, чтобы сделать использование SELinux и контейнеров бесшовным и легким для своих пользователей. Вас не оставляют разбираться самостоятельно.
В конечном счете, выбор между Debian и Red Hat — это не просто выбор между корпоративным влиянием и разработкой, управляемой сообществом. Это также выбор между системой, которая предполагает лучшее, и системой, которая готовится к худшему. К сожалению, в современном взаимосвязанном мире пессимизм необходим.
Комментарии (20)
Johan_Palych
01.10.2024 13:00+109.07.2019 16:42 Официально завершена сделка о покупке Red Hat компанией IBM
https://www.opennet.ru/opennews/art.shtml?num=51063
08.12.2020 18:46 Red Hat прекращает разработку CentOS 8 в пользу тестового CentOS Stream
https://www.opennet.ru/opennews/art.shtml?num=54219
21.06.2023 17:50 CentOS Stream станет единственным публичным источником кода пакетов RHEL
https://www.opennet.ru/opennews/art.shtml?num=59323
30.08.2023 11:46 В ядре Linux убрали упоминание связи SELinux с АНБ
https://www.opennet.ru/opennews/art.shtml?num=59685
"...В кодовую базу, на основе которой будет сформирован выпуск ядра Linux 6.6.
Механизм SELinux был разработан АНБ, включён в состав ядра Linux в 2003 году и используется во многих дистрибутивах Linux.
Последние 20 проект развивается под крылом сообщества и сопровождается независимыми мэйнтейнерами.
Решено перейти на использование имени "SELinux" вместо "NSA SELinux"
в комментариях и документации в Kconfig (например, пояснение к сборочному параметру SECURITY_SELINUX изменено с "NSA SELinux Support" на "SELinux Support")..."
https://en.wikipedia.org/wiki/Security-Enhanced_Linux
"...SELinux has been implemented in Android since version 4.3. Other distributions include support: Debian 9 Stretch and Ubuntu 8.04 Hardy Heron..."
Нет проблем в использовании SELinux на Debian.
На Debian и Arch Linux уже несколько лет использую podman с buildah и skopeo.
Когда в конце мая 2024 заблокировали Docker Hub, я и не заметил. Настроено проксирование через mirror.gcr.io.
https://github.com/containers/podman/blob/main/test/registries.confdartraiden
01.10.2024 13:00+1Вам надо новостникам Хабра устраиваться, это они любят накидать в конце портянку новостей, хоть как-то относящихся к теме.
Johan_Palych
01.10.2024 13:00+2"...Ничего, мужчина может иметь безобидное хобби..."
Было интересно отследить метаморфозы Red Hat, Inc. после сделки с IBM.
Посмотреть, кто принимал участие в создании SELinux - NSA's Official SELinux Homepage
"...Debian недостаточно делает для защиты пользователей. Хотя AppArmor способен обеспечить надежную безопасность при правильной настройке, настройки Debian «из коробки» не используют весь его потенциал..."
ansible-debootstrap - отличная штука
Linux Security Modules (LSM) в ядрах от Debian дают возможность использовать альтернативы: SELinux, Tomoyo
https://wiki.debian.org/AppArmor/HowToUse
https://wiki.debian.org/SELinux/Setup
https://wiki.debian.org/Tomoyo
VenbergV
01.10.2024 13:00+4Возможно у меня плохой опыт. Но если на проекте, или в дальнейшей эксплуатации отсутствует персона безопасника, то
SELINUX=disabled
присутствует почти всегда.Shaman_RSHU
01.10.2024 13:00+1Иногда для работы средств защиты тоже необходимо отключать SELinux:
Gem
01.10.2024 13:00Касперский сам по себе вектор атаки и живая проблема
Selinux обеспечивает лучшую защиту не опускаясь до сигнатурного сканирования и потребляя на порядок меньшие ресурсы
arachnid
01.10.2024 13:00довелось потрогать несколько крупных отечетсенных проектов (не буду тыкать пальцем, уж извините, хрен его знает, может под nda попаду) - и в одном точно (и еще в другом - кажется, но лень искать) на первых строках мануала - необходимо отключить selinux. и что любой безопасник с этим сделает? ну вот такое вот треботвание у внедряемого софта...
и да, это не про средства защитыdbax
01.10.2024 13:00Статья-то переводная. Реальный автор не знает про "отечественные" проекты ))
achekalin Автор
01.10.2024 13:00+2Ну а что, может, кто из сотрудников "отечественных" проектов напишет контр-статью, где поделится, почему они делают так, как делают. Ну, что на selinux свет не сошёлся, и что в трудное время выбор между "шашечки" или "ехать" нужно делать в сторону
высокой ценыбыстрейшего запуска?
arachnid
01.10.2024 13:00статья - да. но отвечал на первый комментарий в этой ветке Vengberga. вернее, дополнял
JHD
01.10.2024 13:00А кто, кроме безопасника будет следить за безопасностью? Кому платят, тот и делает.
m0xf
01.10.2024 13:00+10В базовой конфигурации не должно быть явных уязвимостей, вроде СУБД без пароля на адресе 0.0.0.0. Больше ничего от хорошего дистрибутива не требуется.
eyeDM
01.10.2024 13:00+1Что сильно дискредитирует Debian, так это wiki.debian.org, местами сильно устаревшая и несогласованная. На фоне ArchWiki и docs.redhat.com очень уж бледно смотрится.
achekalin Автор
01.10.2024 13:00+1Насколько сил у них хватает на документацию, насколько они верят в её необходимость (а вот тут прицел сбился, как кажется), ну и насколько сил после разбирания "этических" вопросов остаётся.
ZVEZDO4ETik
01.10.2024 13:00вторичных сборок RHEL
Oracle Linux
Это Вы сейчас накидываете на вентилятор?
mmmex
01.10.2024 13:00+1В голосовании не нашел "Иное мнение". Что значит безопасность? Это наверно когда безопасно? А как безопасно? Совсем или что-то не безопасно? ... Во первых RH коммерческий дистрибутив и они хороши в этом "точка". Поэтому из коробки у них SELinux и уже в enforced. Дистрибутив Debian это другое (https://www.debian.org/intro/why_debian#:~:text=Debian is made of free,It's also free of cost.) и он довольно не плохо поддерживается. Ничего не мешает в Debian установить пакет политики по умолчанию в stable дистрибутиве (selinux-default-policy) и выключить модуль unconfined (https://debian-handbook.info/browse/stable/sect.selinux.html) что приведет к настройки строгой политики SELinux в Debian:
The selinux-policy-default package contains a set of standard rules. By default, this policy only restricts access for a few widely exposed services. The user sessions are not restricted and it is thus unlikely that SELinux would block legitimate user operations. However, this does enhance the security of system services running on the machine. To setup a policy equivalent to the old “strict” rules, you just have to disable the
unconfined
module (modules management is detailed further in this section).На хабре достаточно тем по SELinux: https://habr.com/ru/users/annmuor/publications/articles
Refpolicy (https://github.com/SELinuxProject/refpolicy) является основой, наверное для всех дистрибутивов и он очень хорошо документирован. Во многих случаях SELinux отключать не обязательно, а достаточно перевести его в разрешающий режим и проводить отладку, что является стандартной практикой и в RH, а обширный инструментарий (sepolgen и policygentool и многие другие) помогут лучше разобраться с разработкой политик.
ИМХО модули безопасности SELinux должны писать разработчики ПО т.к. им лучше знать поведение своего детища, и если кто-то из вендоров в инструкции указывает что перед установкой его ПО необходимо отключить SELinux, то кажется что у вендора костыльное представление о безопасности его ПО на данный момент времени, т.к. технология существует уже более 10 лет.
slonik_nocry
01.10.2024 13:00Спасибо за статью. Я как хомячёк считал redhet издателем просто хороших и для сервера дистров и для пк, и внедрятором иноваций безопастности, а теперь знаю чуть больше подробностей почему. Саму идею идею бежать в debian считаю дичью, так как имел неприятный опыт. Тогда уж arch
mnnoee
01.10.2024 13:00А если начать с другого... Нужна ли вам защита в вашей ОС на ядре Linux или нет?
RodionGork
По-моему тут некий эмоциональный перегиб в сторону "максимальная безопасность нужна всем и во всех случаях". Это наверное не совсем правильно т.к. операционные системы вообще и дистрибутивы на базе Debian в частности используются в очень разнообразных условиях. Тут нет какой-то конкретики, прямо таки кейса "вот здесь сломали apparmor потому что это не selinux" и получается довольно туманно. Если речь идёт об ubuntu в подах кубернетеса например, в системе где безопасность обеспечивается снаружи - насколько это (туманное) различие между apparmor и selinux помешает?
anonymous
НЛО прилетело и опубликовало эту надпись здесь