Security-Enhanced Linux ( SELinux ) — это модуль безопасности ядра Linux , который обеспечивает механизм поддержки политик безопасности контроля доступа , включая обязательный контроль доступа (MAC).
SELinux — это набор модификаций ядра и инструментов пользовательского пространства, которые были добавлены в различные дистрибутивы Linux . Его архитектура стремится отделить реализацию решений по безопасности от политики безопасности и оптимизирует объем программного обеспечения, задействованного в реализации политики безопасности. [3] [4] Ключевые концепции, лежащие в основе SELinux, можно проследить до нескольких более ранних проектов Агентства национальной безопасности США (АНБ).
Команда NSA Security-enhanced Linux Team описывает NSA SELinux как [5]
набор исправлений для ядра Linux и утилит для обеспечения сильной, гибкой, обязательной архитектуры управления доступом (MAC) в основные подсистемы ядра. Он обеспечивает улучшенный механизм для обеспечения разделения информации на основе требований конфиденциальности и целостности, что позволяет устранять угрозы взлома и обхода механизмов безопасности приложений и позволяет ограничить ущерб, который может быть нанесен вредоносными или неисправными приложениями. Он включает набор образцов файлов конфигурации политики безопасности, разработанных для достижения общих общих целей безопасности.
Ядро Linux, интегрирующее SELinux, обеспечивает соблюдение политик обязательного контроля доступа, которые ограничивают пользовательские программы и системные службы, а также доступ к файлам и сетевым ресурсам. Ограничение привилегий до минимума, необходимого для работы, снижает или устраняет способность этих программ и демонов причинять вред в случае неисправности или компрометации (например, через переполнение буфера или неправильную конфигурацию). Этот механизм ограничения работает независимо от традиционных механизмов контроля доступа Linux ( дискреционных ). Он не имеет концепции суперпользователя «root» и не разделяет известные недостатки традиционных механизмов безопасности Linux, такие как зависимость от двоичных файлов setuid / setgid .
Безопасность «немодифицированной» системы Linux (системы без SELinux) зависит от корректности ядра, всех привилегированных приложений и каждой из их конфигураций. Ошибка в любой из этих областей может привести к компрометации всей системы. Напротив, безопасность «модифицированной» системы (основанной на ядре SELinux) зависит в первую очередь от корректности ядра и конфигурации его политики безопасности. Хотя проблемы с корректностью или конфигурацией приложений могут допускать ограниченную компрометацию отдельных пользовательских программ и системных демонов, они не обязательно представляют угрозу безопасности других пользовательских программ и системных демонов или безопасности системы в целом.
С точки зрения пуриста, SELinux предоставляет гибрид концепций и возможностей, взятых из обязательного контроля доступа, обязательного контроля целостности , контроля доступа на основе ролей (RBAC) и архитектуры принудительного применения типов . Сторонние инструменты позволяют создавать различные политики безопасности.
Самая ранняя работа, направленная на стандартизацию подхода, обеспечивающего обязательный и дискреционный контроль доступа (MAC и DAC) в вычислительной среде UNIX (точнее, POSIX), может быть отнесена к рабочей группе Trusted UNIX (TRUSIX) Агентства национальной безопасности , которая заседала с 1987 по 1991 год и опубликовала одну Радужную книгу (#020A), а также разработала формальную модель и связанный с ней прототип доказательств оценки (#020B), который в конечном итоге не был опубликован.
SELinux был разработан для демонстрации ценности обязательных элементов управления доступом сообществу Linux и того, как такие элементы управления можно добавить в Linux. Первоначально исправления, составляющие SELinux, должны были быть явно применены к исходному коду ядра Linux; SELinux был объединен с основной веткой ядра Linux в серии 2.6 ядра Linux.
NSA, первоначальный основной разработчик SELinux, выпустил первую версию для сообщества разработчиков открытого исходного кода под лицензией GNU GPL 22 декабря 2000 года. [6] Программное обеспечение было объединено с основным ядром Linux 2.6.0-test3, выпущенным 8 августа 2003 года. Другие значительные участники включают Red Hat , Network Associates , Secure Computing Corporation , Tresys Technology и Trusted Computer Solutions. Экспериментальные порты реализации FLASK /TE были сделаны доступными через проект TrustedBSD для операционных систем FreeBSD и Darwin .
Security-Enhanced Linux реализует Flux Advanced Security Kernel (FLASK). Такое ядро содержит архитектурные компоненты, прототипом которых является операционная система Fluke. Они обеспечивают общую поддержку для реализации многих видов политик обязательного контроля доступа, включая те, которые основаны на концепциях принудительного применения типов , контроля доступа на основе ролей и многоуровневой безопасности . FLASK, в свою очередь, был основан на DTOS, распределенной доверенной операционной системе, производной от Mach, а также на Trusted Mach, исследовательском проекте Trusted Information Systems , который оказал влияние на разработку и реализацию DTOS. [ необходима цитата ]
Полный список первоначальных и внешних участников SELinux размещался на сайте NSA до тех пор, пока обслуживание не прекратилось в 2009 году. Следующий список воспроизводит оригинал, сохраненный Internet Archive Wayback Machine. Объем их вкладов был указан на странице и был опущен для краткости, но к нему можно получить доступ через архивную копию. [7]
Пользователи и роли SELinux не обязательно должны быть связаны с фактическими системными пользователями и ролями. Для каждого текущего пользователя или процесса SELinux назначает трехстрочный контекст, состоящий из имени пользователя, роли и домена (или типа). Эта система более гибкая, чем обычно требуется: как правило, большинство реальных пользователей используют одно и то же имя пользователя SELinux, а все управление доступом осуществляется через третий тег — домен. Обстоятельства, при которых процессу разрешается входить в определенный домен, должны быть настроены в политиках. Команда runcon
позволяет запускать процесс в явно указанном контексте (пользователь, роль и домен), но SELinux может отклонить переход, если он не одобрен политикой.
Файлы, сетевые порты и другое оборудование также имеют контекст SELinux, состоящий из имени, роли (используется редко) и типа. В случае файловых систем сопоставление между файлами и контекстами безопасности называется маркировкой. Маркировка определяется в файлах политики, но может быть скорректирована вручную без изменения политик. Типы оборудования довольно подробны, например, bin_t
(все файлы в папке /bin) или postgresql_port_t
(порт PostgreSQL, 5432). Контекст SELinux для удаленной файловой системы можно указать явно во время монтирования.
SELinux добавляет -Z
переключатель к командам оболочки ls
, ps
, и некоторым другим, позволяя просматривать контекст безопасности файлов или процессов.
Типичные правила политики состоят из явных разрешений, например, какими доменами должен обладать пользователь для выполнения определенных действий с заданной целью (чтение, выполнение или, в случае сетевого порта, привязка или подключение) и т. д. Возможны также более сложные сопоставления, включающие роли и уровни безопасности.
Типичная политика состоит из файла сопоставления (маркировки), файла правил и файла интерфейса, которые определяют переход домена. Эти три файла должны быть скомпилированы вместе с инструментами SELinux для создания одного файла политики. Полученный файл политики можно загрузить в ядро, чтобы сделать его активным. Загрузка и выгрузка политик не требует перезагрузки. Файлы политики либо пишутся вручную, либо могут быть сгенерированы с помощью более удобного для пользователя инструмента управления SELinux. Обычно они сначала тестируются в разрешительном режиме, где нарушения регистрируются, но разрешены. audit2allow
Инструмент можно использовать позже для создания дополнительных правил, которые расширяют политику, позволяя ограничивать все законные действия приложения.
Возможности SELinux включают в себя:
SELinux реализован в Android с версии 4.3. [12]
Среди бесплатных поддерживаемых сообществом дистрибутивов Linux Fedora была одним из первых, кто принял ее, включая поддержку по умолчанию с Fedora Core 2. Другие дистрибутивы включают ее поддержку, например, Debian с версии 9 Stretch release [13] и Ubuntu с версии 8.04 Hardy Heron. [14] Начиная с версии 11.1, openSUSE содержит «базовую поддержку» SELinux. [15] SUSE Linux Enterprise 11 включает SELinux в качестве «технологической предварительной версии». [16]
SELinux популярен в системах на основе контейнеров Linux , таких как CoreOS Container Linux и rkt. [17] Он полезен в качестве дополнительного контроля безопасности, помогающего усилить изоляцию между развернутыми контейнерами и их хостом.
SELinux доступен с 2005 года как часть Red Hat Enterprise Linux (RHEL) версии 4 и всех будущих выпусков. Это присутствие также отражено в соответствующих версиях производных систем, таких как CentOS , Scientific Linux , AlmaLinux и Rocky Linux . Поддерживаемая политика в RHEL4 — это целевая политика, которая направлена на максимальную простоту использования и, таким образом, не является такой ограничительной, как могла бы быть. Планируется, что будущие версии RHEL будут иметь больше целей в целевой политике, что будет означать более ограничительные политики.
SELinux может потенциально контролировать, какие действия система разрешает каждому пользователю, процессу и демону, с очень точными спецификациями. Он используется для ограничения демонов, таких как движки баз данных или веб-серверы, которые имеют четко определенные права доступа к данным и действия. Это ограничивает потенциальный вред от ограниченного демона, который становится скомпрометированным.
Утилиты командной строки включают в себя: [18]chcon
, [19]restorecon
, [20]restorecond
, [21]runcon
, [22]secon
, [23]fixfiles
, [24]setfiles
, [25]load_policy
, [26]booleans
, [27]getsebool
, [28]setsebool
, [29] togglesebool
[30]setenforce
, semodule
, postfix-nochroot
, check-selinux-installation
, semodule_package
, checkmodule
, selinux-config-enforcing
, [31]selinuxenabled
, [32]
и selinux-policy-upgrade
[33]
Чтобы перевести SELinux в принудительный режим:
setenforce 1
Чтобы запросить статус SELinux:
getenforce
SELinux представляет собой один из нескольких возможных подходов к проблеме ограничения действий, которые может выполнять установленное программное обеспечение. Другая популярная альтернатива называется AppArmor и доступна на платформах SUSE Linux Enterprise Server (SLES), openSUSE и Debian . AppArmor был разработан как компонент ныне несуществующей платформы Immunix Linux . Поскольку AppArmor и SELinux радикально отличаются друг от друга, они образуют различные альтернативы для управления программным обеспечением. В то время как SELinux заново изобретает определенные концепции, чтобы предоставить доступ к более выразительному набору вариантов политики, AppArmor был разработан, чтобы быть простым, расширяя ту же административную семантику, которая используется для DAC, до уровня обязательного контроля доступа.
Есть несколько ключевых отличий:
CAP_FOWNER
или CAP_DAC_OVERRIDE
. В SELinux администратор (или поставщик платформы) может настроить SELinux так, чтобы запретить все возможности для пользователей, которые в противном случае не были бы ограничены, а затем создать ограниченные домены, в которые сотрудник сможет перейти после входа в систему, и которые могут использовать эти возможности, но только для файлов соответствующего типа. [ необходима цитата ]Изоляция процессов также может быть достигнута с помощью таких механизмов, как виртуализация ; например, проект OLPC в своей первой реализации [36] изолировал отдельные приложения в облегченных Vservers . Кроме того, АНБ приняло некоторые концепции SELinux в Security-Enhanced Android . [37]
General Dynamics разрабатывает и распространяет PitBull Trusted Operating System [38] , многоуровневое улучшение безопасности (MLS) для Red Hat Enterprise Linux .
Multi-Category Security (MCS) — это усовершенствование SELinux для Red Hat Enterprise Linux , позволяющее пользователям маркировать файлы категориями, чтобы еще больше ограничить доступ с помощью дискреционного контроля доступа и принудительного применения типов. Категории предоставляют дополнительные отсеки в пределах уровней чувствительности, используемых многоуровневой безопасностью (MLS). [39]
АНБ с радостью сообщает, что оно разработало и представляет общественности прототип версии операционной системы Linux с улучшенной безопасностью.
Решения SELinux, такие как разрешение или запрет доступа, кэшируются. Этот кэш известен как Access Vector Cache (AVC). Кэширование решений уменьшает частоту проверки правил SELinux, что повышает производительность.