Security-Enhanced Linux ( SELinux ) — это модуль безопасности ядра Linux , который обеспечивает механизм поддержки политик безопасности контроля доступа , включая обязательный контроль доступа (MAC).
SELinux — это набор модификаций ядра и инструментов пользовательского пространства, добавленных в различные дистрибутивы Linux . Его архитектура стремится отделить применение решений по безопасности от политики безопасности и оптимизирует количество программного обеспечения, задействованного в реализации политики безопасности. [3] [4] Ключевые концепции, лежащие в основе SELinux, можно проследить до нескольких более ранних проектов Агентства национальной безопасности США (АНБ).
Команда NSA по усиленной безопасности Linux описывает NSA SELinux как [5]
набор исправлений для ядра Linux и утилит, обеспечивающих надежную, гибкую архитектуру обязательного контроля доступа (MAC) к основным подсистемам ядра. Он обеспечивает расширенный механизм обеспечения разделения информации на основе требований конфиденциальности и целостности, что позволяет устранять угрозы несанкционированного доступа и обходить механизмы безопасности приложений, а также позволяет ограничить ущерб, который может быть вызван вредоносными или ошибочными приложениями. Он включает в себя набор примеров файлов конфигурации политики безопасности, предназначенных для достижения общих целей безопасности общего назначения.
Ядро Linux, интегрирующее SELinux, применяет обязательные политики контроля доступа, которые ограничивают пользовательские программы и системные службы, а также доступ к файлам и сетевым ресурсам. Ограничение привилегий до минимума, необходимого для работы, уменьшает или устраняет возможность этих программ и демонов причинять вред в случае неисправности или компрометации (например, из-за переполнения буфера или неправильной конфигурации). Этот механизм ограничения работает независимо от традиционных механизмов контроля доступа Linux ( дискреционных ). Он не имеет понятия «корневого» суперпользователя и не разделяет хорошо известные недостатки традиционных механизмов безопасности 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 в версии ядра Linux 2.6.
АНБ, первоначальный основной разработчик SELinux, выпустило первую версию для сообщества разработчиков открытого исходного кода под лицензией GNU GPL 22 декабря 2000 года. [6] Программное обеспечение было объединено с основным ядром Linux 2.6.0-test3, выпущенным 22 декабря 2000 года. 8 августа 2003 г. Среди других значительных участников — Red Hat , Network Associates , Secure Computing Corporation , Tresys Technology и Trusted Computer Solutions. Экспериментальные порты реализации FLASK /TE доступны через проект TrustedBSD для операционных систем FreeBSD и Darwin .
Linux с улучшенной безопасностью реализует ядро расширенной безопасности Flux (FLASK). Такое ядро содержит архитектурные компоненты, прототипы которых созданы в операционной системе Fluke. Они обеспечивают общую поддержку для применения многих видов политик обязательного контроля доступа, в том числе основанных на концепциях принудительного соблюдения типов , управления доступом на основе ролей и многоуровневой безопасности . FLASK, в свою очередь, был основан на DTOS, распределенной доверенной операционной системе на основе Mach, а также на Trusted Mach, исследовательском проекте Trusted Information Systems , который оказал влияние на разработку и реализацию DTOS. [ нужна цитата ]
Полный список первоначальных и внешних участников SELinux размещался на веб-сайте АНБ до тех пор, пока обслуживание не было прекращено где-то в 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 включают в себя:
sestatus
показ статуса SELinux в системеSELinux реализован в Android начиная с версии 4.3. [12]
Среди бесплатных дистрибутивов Linux, поддерживаемых сообществом, Fedora была одной из первых, кто внедрил ее, включая ее поддержку по умолчанию, начиная с Fedora Core 2. Другие дистрибутивы включают ее поддержку, например, Debian начиная с версии 9 Stretch Release [13] и Ubuntu с версии 8.04. Харди Херон. [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 . Поддерживаемая политика в 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 в 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, такие как разрешение или запрет доступа, кэшируются. Этот кэш известен как кэш векторов доступа (AVC). Решения о кэшировании уменьшают частоту проверки правил SELinux, что повышает производительность.