Начало работы с SELinux
Введение в SELinux
Security Enhanced Linux (SELinux) обеспечивает дополнительный уровень безопасности системы. SELinux принципиально отвечает на вопрос: Может ли <субъект> выполнить <действие> над <объектом>?, например: Может ли веб-сервер получить доступ к файлам в домашних каталогах пользователей?
Стандартная политика доступа, основанная на пользователе, группе и других разрешениях, известная как избирательное управление доступом (DAC), не позволяет системным администраторам создавать комплексные и детализированные политики безопасности, такие как ограничение определённых приложений только просмотром файлов журналов, при этом разрешая другим приложениям добавлять новые данные в файлы журналов.
SELinux реализует мандатное управление доступом (MAC). Каждый процесс и системный ресурс имеет специальную метку безопасности, называемую контекстом SELinux. Контекст SELinux, иногда называемый меткой SELinux, — это идентификатор, который абстрагируется от системных деталей и фокусируется на свойствах безопасности сущности. Это не только обеспечивает согласованный способ ссылки на объекты в политике SELinux, но также устраняет любую неоднозначность, которая может присутствовать в других методах идентификации; например, файл может иметь несколько допустимых путей в системе, использующей привязанные монтирования.
Политика SELinux использует эти контексты в ряде правил, определяющих, как процессы могут взаимодействовать друг с другом и с различными системными ресурсами. По умолчанию политика не разрешает никакого взаимодействия, если правило явно не предоставляет доступ.
|
Важно помнить, что правила политики SELinux проверяются после правил DAC. Правила политики SELinux не используются, если правила DAC сначала запрещают доступ, что означает, что отказ SELinux не регистрируется, если традиционные правила DAC предотвращают доступ. |
Контексты SELinux имеют несколько полей: пользователь, роль, тип и уровень безопасности. Информация о типе SELinux, возможно, наиболее важна, когда речь идёт о политике SELinux, поскольку наиболее распространённое правило политики, определяющее разрешённые взаимодействия между процессами и системными ресурсами, использует типы SELinux, а не полный контекст SELinux. Типы SELinux обычно заканчиваются на _t. Например, имя типа для веб-сервера — httpd_t. Контекст типа для файлов и каталогов, обычно находящихся в /var/www/html/, — httpd_sys_content_t. Контексты типов для файлов и каталогов, обычно находящихся в /tmp и /var/tmp/, — tmp_t. Контекст типа для портов веб-сервера — http_port_t.
Например, существует правило политики, разрешающее Apache (процессу веб-сервера, работающему как httpd_t) получать доступ к файлам и каталогам с контекстом, обычно находящимся в /var/www/html/ и других каталогах веб-сервера (httpd_sys_content_t). В политике нет правила allow для файлов, обычно находящихся в /tmp и /var/tmp/, поэтому доступ не разрешён. С SELinux, даже если Apache скомпрометирован и вредоносный сценарий получил доступ, он всё равно не может получить доступ к каталогу /tmp.
Дополнительные ресурсы
Чтобы лучше понять основные концепции SELinux, см. следующую документацию:
Преимущества использования SELinux
SELinux предоставляет следующие преимущества:
-
Все процессы и файлы помечены. Правила политики SELinux определяют, как процессы взаимодействуют с файлами, а также как процессы взаимодействуют друг с другом. Доступ разрешён только при наличии правила политики SELinux, которое его специально разрешает.
-
Детализированное управление доступом. Выходя за рамки традиционных разрешений UNIX, которые контролируются по усмотрению пользователя и основаны на идентификаторах пользователей и групп Linux, решения о доступе SELinux основаны на всей доступной информации, такой как пользователь SELinux, роль, тип и, необязательно, уровень безопасности.
-
Политика SELinux определяется административно и применяется в масштабе всей системы.
-
Улучшенная защита от атак с повышением привилегий. Процессы работают в доменах и, следовательно, отделены друг от друга. Правила политики SELinux определяют, как процессы получают доступ к файлам и другим процессам. Если процесс скомпрометирован, злоумышленник имеет доступ только к обычным функциям этого процесса и к файлам, к которым этот процесс настроен иметь доступ. Например, если Apache HTTP Server скомпрометирован, злоумышленник не может использовать этот процесс для чтения файлов в домашних каталогах пользователей, если только не было добавлено или настроено специальное правило политики SELinux, разрешающее такой доступ.
-
SELinux можно использовать для обеспечения конфиденциальности и целостности данных, а также для защиты процессов от недоверенных входных данных.
Однако SELinux не является:
-
антивирусным программным обеспечением,
-
заменой паролей, брандмауэров и других систем безопасности,
-
универсальным решением безопасности.
SELinux предназначен для улучшения существующих решений безопасности, а не для их замены. Даже при использовании SELinux важно продолжать следовать передовым практикам безопасности, таким как поддержание программного обеспечения в актуальном состоянии, использование трудноугадываемых паролей или брандмауэров.
Примеры SELinux
Следующие примеры демонстрируют, как SELinux повышает безопасность:
-
Действие по умолчанию — запретить. Если правила политики SELinux, разрешающего доступ, не существует, например, для открытия файла процессом, доступ запрещается.
-
SELinux может ограничивать пользователей Linux. В политике SELinux существует ряд ограниченных пользователей SELinux. Пользователи Linux могут быть сопоставлены с ограниченными пользователями SELinux, чтобы воспользоваться преимуществами правил и механизмов безопасности, применяемых к ним. Например, сопоставление пользователя Linux с пользователем SELinux
user_uприводит к тому, что пользователь Linux не может запускать (если не настроено иное) приложения, устанавливающие идентификатор пользователя (setuid), такие какsudoиsu, а также препятствует им выполнять файлы и приложения в своём домашнем каталоге. Если настроено, это предотвращает выполнение пользователями вредоносных файлов из их домашних каталогов. -
Увеличенное разделение процессов и данных. Процессы работают в своих собственных доменах, что препятствует доступу процессов к файлам, используемым другими процессами, а также препятствует доступу процессов к другим процессам. Например, при использовании SELinux, если не настроено иное, злоумышленник не может скомпрометировать сервер Samba, а затем использовать этот сервер Samba в качестве вектора атаки для чтения и записи файлов, используемых другими процессами, такими как базы данных MariaDB.
-
SELinux помогает смягчить ущерб от ошибок конфигурации. Серверы системы доменных имён (DNS) часто реплицируют информацию между собой в рамках так называемой передачи зоны. Злоумышленники могут использовать передачу зоны для обновления DNS-серверов ложной информацией. При использовании Berkeley Internet Name Domain (BIND) в качестве DNS-сервера в Fedora, даже если администратор забудет ограничить, какие серверы могут выполнять передачу зоны, политика SELinux по умолчанию предотвращает обновление файлов зон [1] с помощью передачи зоны, сам демон BIND
namedи другие процессы. -
См. статью NetworkWorld.com, A seatbelt for server software: SELinux blocks real-world exploits[2], для получения справочной информации о SELinux и информации о различных эксплойтах, которые предотвратил SELinux.
Архитектура SELinux
SELinux — это модуль безопасности Linux (LSM), встроенный в ядро Linux. Подсистема SELinux в ядре управляется политикой безопасности, которая контролируется администратором и загружается при загрузке. Все операции доступа на уровне ядра, связанные с безопасностью, перехватываются SELinux и анализируются в контексте загруженной политики безопасности. Если загруженная политика разрешает операцию, она продолжается. В противном случае операция блокируется, и процесс получает ошибку.
Решения SELinux, такие как разрешение или запрет доступа, кэшируются. Этот кэш известен как кэш векторов доступа (AVC). При использовании этих кэшированных решений правила политики SELinux нужно проверять реже, что повышает производительность. Помните, что правила политики SELinux не имеют эффекта, если правила DAC сначала запрещают доступ.
Состояния и режимы SELinux
SELinux может работать в одном из трёх режимов: отключён, разрешающий или принудительный.
Отключённый режим настоятельно не рекомендуется; система не только избегает применения политики SELinux, но и избегает маркировки любых постоянных объектов, таких как файлы, что затрудняет включение SELinux в будущем.
В разрешающем режиме система ведёт себя так, как будто SELinux применяет загруженную политику безопасности, включая маркировку объектов и выдачу записей об отказе в доступе в журналах, но фактически не запрещает никаких операций. Хотя это не рекомендуется для производственных систем, разрешающий режим может быть полезен для разработки политики SELinux.
Принудительный режим — это режим работы по умолчанию и рекомендуемый режим; в принудительном режиме SELinux работает нормально, применяя загруженную политику безопасности ко всей системе.
Используйте утилиту setenforce для переключения между принудительным и разрешающим режимами. Изменения, сделанные с помощью setenforce, не сохраняются между перезагрузками. Чтобы переключиться в принудительный режим, введите команду setenforce 1 от имени пользователя root Linux. Чтобы переключиться в разрешающий режим, введите команду setenforce 0. Используйте утилиту getenforce для просмотра текущего режима SELinux:
$ getenforce
Enforcing
$ sudo setenforce 0
$ getenforce
Permissive
$ sudo setenforce 1
$ getenforce
Enforcing
В Fedora вы можете установить отдельные домены в разрешающий режим, пока система работает в принудительном режиме. Например, чтобы сделать домен httpd_t разрешающим:
$ sudo semanage permissive -a httpd_t
Want to help? Learn how to contribute to Fedora Docs ›