- Что такое SELinux? Настройка, включение и отключение
- Изменение режима SELinux
- Политики SELinux
- Работа политики SELinux
- Изменение переключателей SELinux
- Заключение
- Руководство для начинающих по SELinux
- Изменение режимов SELinux
- Настройка SELinux
- Мониторим логи
- Настройка политики SELinux
- 1. Логические значения (переключатели)
- Настройка SELinux
- Основы SELinux
- Настройка SELinux
- 1. Состояние
- 3. Режим работы
- 4. Выбор политики
- 5. Просмотр контекста
- 6. Изменение контекста
- 7. Модификация политики
- 8. Логи
- 9. Модули
- 10. Флаги
- Выводы
Что такое SELinux? Настройка, включение и отключение
SELinux, или Security Enhanced Linux, — это продвинутый механизм управления доступом, разработанный Агентством национальной безопасности (АНБ) США для предотвращения злонамеренных вторжений. Он реализует мандатную модель управления доступом (MAC — Mandatory Access control) в дополнение к уже существующей в Linux дискреционной модели (DAC — Discretionary Access Control), то есть разрешениям на чтение, запись, выполнение.
У SELinux есть три режима работы:
1. Enforcing — ограничение доступа в соответствии с политикой. Запрещено все, что не разрешено в явном виде. Режим по умолчанию.
2. Permissive — ведёт лог действий, нарушающих политику, которые в режиме enforcing были бы запрещены, но не запрещает сами действия.
3. Disabled — полное отключение SELinux.
Изменение режима SELinux
Файл конфигурации по умолчанию, где можно изменять режим работы — /etc/selinux/config.
Чтобы узнать текущий режим работы, нужно выполнить следующую команду (для работы с SELinux необходимы root-привилегии, поэтому здесь и далее приводятся команды для root-пользователя):
Изменение режима работы на permissive:
и наоборот, на enforcing:
Полностью отключить SELinux можно только через файл конфигурации. Откройте его любым текстовым редактором
и измените параметр SELINUX на disabled:
После чего перезагрузите систему
Политики SELinux
В основе структуры безопасности SELinux лежат политики. Политика — это набор правил, определяющих ограничения и права доступа для всего, что есть в системе. Под “всем” в данном случае понимаются пользователи, роли, процессы и файлы. Политика определяет связь этих категорий друг с другом.
Для понимания политик необходимо понимание базовых терминов. Политика SELinux определяет доступ пользователей к ролям, доступ ролей к доменам и доступ доменов к типам. Разберём значение этих терминов.
Пользователи
В SELinux есть набор предварительно заданных пользователей. Каждая стандартная учётная запись пользователя Linux соответствует одному или нескольким пользователям SELinux.
В Linux пользователи запускают процессы. Это может быть пользователь ivan, открывший документ в редакторе vi (учётная запись ivan запускает процесс vi) или служебная учётная запись, запустившая демон httpd. В SELinux процесс (демон или запущенная программа) называется субъектом.
Роли
Роль определяет, какие пользователи могут осуществлять доступ к заданному процессу. Роли не тождественны группам, они больше похожи на фильтры: пользователь может принадлежать к роли в любое время, если роль это позволяет. Определение роли в политике безопасности SELinux задаёт пользователей, имеющих доступ к этой роли. Роли используются потому, что один из элементов SELinux реализует ролевую модель управления доступом (RBAC — Role Based Access Control).
Субъекты и объекты
Субъект — это процесс, который может потенциально влиять на объект.
Объектом в SELinux называется все, над чем можно выполнять какие-либо действия. Это может быть файл, директория, порт, tcp-сокет, курсор, X-сервер. Действия, которые субъект может выполнить над объектом, являются разрешениями субъекта.
Домены
Домен — это контекст, в котором может работать субъект SELinux (процесс). Этот контекст представляет собой как бы оболочку вокруг субъекта, которая сообщает процессу, что он может и не может делать. Например, домен определяет, какие файлы, директории, ссылки, устройства или порты доступны для субъекта.
Типы
Тип — это контекст для файла, который устанавливает предназначение файла. Например, контекст файла может указывать, что это веб-страница, или что файл находится в директории /etc, или что владелец этого файла — конкретный пользователь. В терминах SELinux контекст файла называется его типом.
Политика SELinux определяет доступ пользователей к ролям, доступ ролей к доменам и доступ доменов к типам. Сначала пользователь должен быть авторизован для получения роли, затем роль должна быть авторизована для доступа к доменам. Домен, в свою очередь, может осуществлять доступ только к определенным типам файлов.
Механизм, при котором процесс, запущенный в определенном домене, может осуществлять только определенные действия над определенными типами объектов, называется принудительным присвоением типов (Type Enforcement — TE).
Работа политики SELinux
Политика SELinux не заменяет традиционную дискреционную модель управления доступом (DAC). Если правило DAC запрещает пользователю доступ к файлу, правила политики SELinux не будут применяться, потому что первая линия обороны уже заблокировала доступ. SELinux начинает работать уже после DAC.
При запуске системы с SELinux политика загружается в память. Она имеет модульный формат, аналогично загружаемым модулям ядра. И точно так же как и модули ядра, модули политики можно динамически загружать и выгружать из памяти в ходе работы. SELinux ведёт список загруженных модулей (policy store), имя которого можно увидеть при помощи команды sestatus. Команда semodule -l выводит список модулей, загруженных память в данный момент:
Результат будет выглядеть примерно следующим образом:
Команду semodule можно использовать для множества других задач: установки, удаления, перезагрузки, обновления, включения и выключения модулей политики SELinux. Бинарные файлы модулей в большинстве случаев входят в состав пакетов SELinux. Они имеют расширение .pp. Просмотреть их список можно следующей командой:
Можно заметить, что файлы связаны с различными приложениями:
Файлы .pp не читаемы для человека. При загрузке системы модули политик объединяются в так называемую активную политику, которая затем загружается в память. Бинарная версия этой загруженной политики находится в директории /etc/selinux/targeted/policy.
Следующая команда показывает активную политику:
Изменение переключателей SELinux
Несмотря на то, что прочитать файлы модулей политики невозможно, есть простой способ их настройки. Она осуществляется при помощи булевых переключателей SELinux (boolean).
Чтобы разобраться, как они работают, запустим команду semanage с опцией boolean:
Если у вас будет ошибка
То нужно установить policycoreutils-python
Теперь запускаем semanage с опцией boolean
semanage boolean -l | less
Будет выведен список различных переключателей, которые можно включить или выключить, краткое описание их функций и текущее состояние:
Первый пункт в этом списке позволяет демону FTP осуществлять доступ к домашним директориям пользователей. В данный момент переключатель выключен (off), то есть доступ запрещен.
Для изменения значений используется команда setsebool. В качестве примера давайте разрешим анонимный доступ FTP на запись. Проверим состояние переключателя командой getsebool:
Она покажет, что в данный момент переключатель выключен:
Изменим значение переключателя и включим его:
Снова проверим состояние переключателя, оно должно поменяться:
Изменение переключателей является временным, при перезагрузке они вернутся к старым значениям. Чтобы закрепить изменения, нужно запустить команду setsebool с опцией -P.
Теперь после перезагрузки изменения не потеряются
Заключение
Мы рассмотрели базовые принципы работы SELinux, включение системы и режимы её работы, показали пример обеспечения безопасности системы. Также была разобрана работа политики безопасности и ее настройка при помощи булевых переключателей. Более подробную информацию о SELinux можно найти в соответствующих man-страницах.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Руководство для начинающих по SELinux
SELinux или Security Enhanced Linux — это улучшенный механизм управления доступом, разработанный Агентством национальной безопасности США (АНБ США) для предотвращения злонамеренных вторжений. Он реализует принудительную (или мандатную) модель управления доступом (англ. Mandatory Access Control, MAC) поверх существующей дискреционной (или избирательной) модели (англ. Discretionary Access Control, DAC), то есть разрешений на чтение, запись, выполнение.
У SELinux есть три режима:
- Enforcing — запрет доступа на основании правил политики.
- Permissive — ведение лога действий, нарушающих политику, которые в режиме enforcing были бы запрещены.
- Disabled — полное отключение SELinux.
По умолчанию настройки находятся в / etc / selinux / config
Изменение режимов SELinux
Чтобы узнать текущий режим запустите
Для изменения режима на permissive запустите следующую команду
или, для изменения режима с permissive на enforcing, выполните
Если вам нужно полностью отключить SELinux, то это можно сделать только через файл конфигурации
Для отключения измените параметр SELINUX следующим образом:
Настройка SELinux
Каждый файл и процесс помечается контекстом SELinux, в котором содержится дополнительная информация, такая как пользователь, роль, тип и т.д. Если вы впервые включаете SELinux, то сначала нужно настроить контекст и метки. Процесс назначения меток и контекста известен как маркировка. Чтобы начать маркировку, в файле конфигурации изменим режим на permissive.
После установки режима permissive, создадим в корне пустой скрытый файл с именем autorelabel
и перезагрузим компьютер
Примечание: мы используем режим permissive для маркировки, поскольку использование режима enforcing может привести к краху системы во время перезагрузки.
Не беспокойтесь, если загрузка застрянет на каком-то файле, маркировка занимает некоторое время. После завершения маркировки и загрузки вашей системы вы можете перейти к файлу конфигурации и установить режим enforcing, а также запустить:
Теперь вы успешно включили SELinux на своем компьютере.
Мониторим логи
Возможно, у вас возникли какие-то ошибки во время маркировки или во время работы системы. Чтобы проверить, работает ли ваш SELinux правильно и не блокирует ли он доступ к какому-либо порту, приложению и т. д. нужно посмотреть логи. Лог SELinux находится в / var / log / audit / audit . log , но вам не нужно читать его целиком, чтобы найти ошибки. Можно использовать утилиту audit2why для поиска ошибок. Запустите следующую команду:
В результате вы получите список ошибок. Если ошибок в логе не было, то никаких сообщений отображаться не будет.
Настройка политики SELinux
Политика SELinux — это набор правил, которыми руководствуется механизм безопасности SELinux. Политика определяет набор правил для конкретного окружения. Сейчас мы изучим как настраивать политики, чтобы разрешить доступ к запрещенным сервисам.
1. Логические значения (переключатели)
Переключатели (booleans) позволяют изменять части политики во время работы, без необходимости создания новых политик. Они позволяют вносить изменения без перезагрузки или перекомпиляции политик SELinux.
Пример
Предположим, мы хотим предоставить общий доступ к домашнему каталогу пользователя по FTP на чтение и запись, и мы уже расшарили его, но при попытке доступа мы ничего не видим. Это связано с тем, что политика SELinux запрещает FTP-серверу читать и писать в домашнем каталоге пользователя. Нам нужно изменить политику, чтобы FTP-сервер мог обращаться к домашним каталогам. Посмотрим, есть ли для этого какие-либо переключатели, выполнив
Источник
Настройка SELinux
Security-Enhanced Linux (SELinux) — это новый метод контроля доступа в Linux на основе модуля ядра Linux Security (LSM). SELinux включен по умолчанию во многих дистрибутивах на основе Red Hat, использующих пакетную базу rpm, например, Fedora, CentOS и т д.
В этой статье будет рассмотрена настройка SELinux, мы не будем трогать создание новых политик, а постараемся подойти к системе с другой стороны, посмотреть чем она может быть полезна обычному пользователю Linux, рассмотрим основы её работы, включение, отключение и изменение состояний. В качестве системы для выполнения примеров использовалась CentOS 8.
Основы SELinux
SELinux представляет собой систему маркировки, каждый процесс имеет метку. Каждый файл, каталог или даже пользователь в системе имеет метку. Даже портам и устройствам и именам хостов в системе присвоены метки. 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.
Теория в общих чертах рассмотрена. А теперь перейдем к практической части.
Настройка SELinux
1. Состояние
После перезагрузки вы можете посмотреть посмотреть состояние SELinux:
Здесь мы видим, что система включена SELinux status: enabled, Текущий режим Current mode — enforcing, то есть система будет блокировать неразрешенные действия. Используемая сейчас политика — targeted. Эта политика используется для того, чтобы правила SELinux распространялись только на определённые службы.
3. Режим работы
Сейчас давайте включим активный режим, для этого выполните команду:
sudo setenforce 1
Отключить активный режим можно передав в ту же команду 0:
sudo setenforce 0
Посмотреть используемый сейчас режим тоже можно подобной командой:
Вся основная настройка SELinux выполняется через файл /etc/selinux/config. Здесь можно как полностью отключить selinux, так и настроить используемую политику безопасности.
sudo vi /etc/selinux/config
Этот параметр означает режим работы SELinux, вы можете указать здесь один из трех параметров enforce, permissive и disabled
Используйте disabled чтобы полностью отключить SELinux или любой другой, чтобы включить SELinux обратно. Этот режим будет применяться по умолчанию при старте системы.
4. Выбор политики
Настройка SELinux политик выполняется тоже в этом файле. За политику отвечает параметр SELINUXTYPE:
Вы можете ссылаться на любую политику, расположенную в каталоге /etc/selinux. Могут использоваться три основные политики:
- targeted — защищает основные системные сервисы, например, веб-сервер, DHCP, DNS, но не трогает все остальные программы.
- strict — самая строгая политика, управляет не только сетевыми службами, но и программами пользователя.
- mls — содержит не только правила, но и различные уровни безопасности. Она позволяет реализовать многоуровневую систему безопасности на основе SELinux.
Также можно добавить свои политики. Для применения политики необходимо перезагрузить компьютер, и желательно чтобы SELinux во время этой перезагрузки был в режиме аудита (permissive). Также, чтобы система обновила все метки в файловой системе, возможно, придется создать пустой файл в корне:
sudo vi /.autolabel
5. Просмотр контекста
Каждый файл и каждый процесс имеет свою SELinux метку, которую принято называть контекстом. Какая метка будет присвоена тому или иному файлу или процессу определяется политикой, в нашем случае это targeted. Посмотреть контекст SELinux можно с помощью команды ls:
Синтаксис у строки контекста такой:
имя_пользователя:имя_объекта: тип_или_домен :уровень_доступа
В политике 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 -l
8. Логи
Несмотря на режим, в котором работает SELinux, все сообщения о нарушениях пишутся в лог файл /var/log/audit/audit.log. Вы можете посмотреть его вручную:
Или для более удобного просмотра можно использовать утилиту sealert. Для её установки выполните:
sudo yum install setroubleshoot
Затем можно смотреть:
sealert -a /var/log/audit/audit.log
Утилита отображает не все строки, а только сообщения об ошибках доступа и при этом выводит предлагаемые решения. Очень удобно. В числе решений утилита предлагает создать свой модуль для политики targeted, который разрешает делать то, что сейчас нельзя.
9. Модули
Политика targeted модульная. Она состоит из множества модулей, для различных программ. Чтобы посмотреть все активные на данный момент модули выполните:
Для просмотра всех установленных модулей выполните:
В прошлом пункте было показано, как с помощью утилиты sealert посмотреть возможные решения проблемы доступа. Самое частое решение — создать свой модуль для политики на основе лога. Утилита audit2allow анализирует лог файл, находит там сведения об объектах, к которым нет доступа, а затем разрешает этот доступ в новом модуле. В предыдущем примере утилита sealert посоветовала такую команду:
ausearch -c ‘httpd’ —raw | audit2allow -M my-httpd
После этого в текущей папке появится пакет модуля с расширением .pp, который можно уже установить с помощью утилиты semodule:
sudo semodule -i my-httpd.pp
10. Флаги
Кроме того, поведение политики можно настраивать с помощью флагов. Обычно, флаги, которые надо включить рекомендует та же утилита sealert. Все флаги определены в модулях политики. Посмотреть какие флаги доступны сейчас и их состояние можно с помощью команды:
Чтобы изменить состояние флага используйте команду setsebool. Например, чтобы разрешить модулям httpd подключаться к сети выполните:
setsebool -P httpd_can_network_connect on
Выводы
Теперь вы знаете как включить, отключить SELinux, а также как поменять политику или режим работы программы. Мы рассмотрели работу с контекстом, модулями политики, а также флагами. Этого вполне достаточно чтобы понимать как настроить SELinux на вашем сервере. Все остальное выходит за рамки нашей небольшой статьи.
Источник