Разное

Debian selinux: Настройка SELinux | Losst

Содержание

Настройка SELinux | Losst

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:

sestatus

Здесь мы видим, что система включена SELinux status: enabled, Текущий режим Current modeenforcing, то есть мы будем только получать сообщения о нарушениях в логе. Используемая сейчас политика — targeted.

3. Режим работы

Сейчас давайте включим активный режим, для этого выполните команду:

sudo setenforce 1

Отключить активный режим можно передав в ту же команду 0:

sudo setenforce 0

Посмотреть используемый сейчас режим тоже можно подобной командой:

getenforce

Вся основная настройка SELinux выполняется через файл /etc/selinux/config. Здесь можно как полностью отключить selinux, так и настроить используемую политику безопасности.

sudo vi /etc/selinux/config

Этот параметр означает режим работы SELinux, вы можете указать здесь один из трех параметров enforcepermissive и disabled

SELINUX=enforcing

Используйте disabled чтобы полностью отключить SELinux или любой другой, чтобы включить SELinux обратно. Этот режим будет применяться по умолчанию при старте системы.

4. Выбор политики

Настройка SELinux политик выполняется тоже в этом файле. За политику отвечает параметр SELINUXTYPE:

SELINUXTYPE=targeted

Вы можете ссылаться на любую политику, расположенную в каталоге /etc/selinux. Могут использоваться три основные политики:

  • targeted — защищает основные системные сервисы, например, веб-сервер, DHCP, DNS, но не трогает все остальные программы.
  • strict — самая строгая политика, управляет не только сетевыми службами, но и программами пользователя.
  • mls — содержит не только правила, но и различные уровни безопасности. Она позволяет реализовать многоуровневую систему безопасности на основе SELinux.

Также можно добавить свои политики. Для применения политики необходимо перезагрузить компьютер, и желательно чтобы SELinux во время этой перезагрузки был в режиме аудита (permissive). Также, чтобы система обновила все метки в файловой системе, возможно, придется создать пустой файл в корне:

sudo vi /.autolabel

5. Просмотр контекста

Каждый файл и каждый процесс имеет свою SELinux метку, которую принято называть контекстом. Какая метка будет присвоена тому или иному файлу или процессу определяется политикой, в нашем случае это targeted. Посмотреть контекст SELinux можно с помощью команды ls:

ls -lZ /

Синтаксис у строки контекста такой:

имя_пользователя:имя_объекта:тип_или_домен:уровень_доступа

В политике 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. Вы можете посмотреть его вручную:

less /var/log/audit/audit.log

Или для более удобного просмотра можно использовать утилиту sealert. Для её установки выполните:

sudo yum install setroubleshoot

Затем можно смотреть:

sealert -a /var/log/audit/audit.log

Утилита отображает не все строки, а только сообщения об ошибках доступа и при этом выводит предлагаемые решения. Очень удобно. В числе решений утилита предлагает создать свой модуль для политики targeted, который разрешает делать то, что сейчас нельзя.

9. Модули

Политика targeted модульная. Она состоит из множества модулей, для различных программ. Чтобы посмотреть все активные на данный момент модули выполните:

semodule -l

Для просмотра всех установленных модулей выполните:

semodule --list-modules=full

В прошлом пункте было показано, как с помощью утилиты sealert посмотреть возможные решения проблемы доступа. Самое частое решение — создать свой модуль для политики на основе лога. Утилита audit2allow анализирует лог файл, находит там сведения об объектах, к которым нет доступа, а затем разрешает этот доступ в новом модуле. В предыдущем примере утилита sealert посоветовала такую команду:

ausearch -c 'httpd' --raw | audit2allow -M my-httpd

После этого в текущей папке появится пакет модуля с расширением .pp, который можно уже установить с помощью утилиты semodule:

sudo semodule -i my-httpd.pp

10. Флаги

Кроме того, поведение политики можно настраивать с помощью флагов. Обычно, флаги, которые надо включить рекомендует та же утилита sealert. Все флаги определены в модулях политики. Посмотреть какие флаги доступны сейчас и их состояние можно с помощью команды:

getsebool -a

Чтобы изменить состояние флага используйте команду setsebool. Например, чтобы разрешить модулям httpd подключаться к сети выполните:

setsebool -P httpd_can_network_connect on

Выводы

Теперь вы знаете как включить, отключить SELinux, а также как поменять политику или режим работы программы. Мы рассмотрели работу с контекстом, модулями политики, а также флагами. Этого вполне достаточно чтобы понимать как настроить SELinux на вашем сервере. Все остальное выходит за рамки нашей небольшой статьи.

SELinux – описание и особенности работы с системой. Часть 1

О SELinux на Хабре уже писали, однако, не так много опубликовано подробных мануалов по данной системе. Сегодня мы публикуем именно такой, подробный мануал по SELinux, начиная от информации по системе, и заканчивая гибкой настройкой политик.

Для того, чтобы не превращать пост в «простыню», сложную для понимания, мы решили разделить мануал на две части. Первая будет рассказывать о самой системе, и некоторых ее особенностях. Вторая – о настройке политик. Сейчас публикуем первую часть, чуть позже будет опубликована и вторая часть.

1. Введение

SELinux (SELinux) — это система принудительного контроля доступа, реализованная на уровне ядра. Впервые эта система появилась в четвертой версии CentOS, а в 5 и 6 версии реализация была существенно дополнена и улучшена. Эти улучшения позволили SELinux стать универсальной системой, способной эффективно решать массу актуальных задач. Стоит помнить, что классическая система прав Unix применяется первой, и управление перейдет к SELinux только в том случае, если эта первичная проверка будет успешно пройдена.

1.1 Некоторые актуальные задачи.

Для того, чтобы понять, в чем состоит практическая ценность SELinux, рассмотрим несколько примеров, когда стандартная система контроля доступа недостаточна. Если SELinux отключен, то вам доступна только классическая дискреционная система контроля доступа, которая включает в себя DAC (избирательное управление доступом) или ACL(списки контроля доступа). То есть речь идет о манипулировании правами на запись, чтение и исполнение на уровне пользователей и групп пользователей, чего в некоторых случаях может быть совершенно недостаточно. Например:

— Администратор не может в полной мере контролировать действия пользователя. Например, пользователь вполне способен дать всем остальным пользователям права на чтение собственных конфиденциальных файлов, таких как ключи SSH.

— Процессы могут изменять настройки безопасности. Например, файлы, содержащие в себе почту пользователя должны быть доступны для чтения только одному конкретному пользователю, но почтовый клиент вполне может изменить права доступа так, что эти файлы будут доступны для чтения всем.

— Процессы наследуют права пользователя, который их запустил. Например, зараженная трояном версия браузера Firefox в состоянии читать SSH-ключи пользователя, хотя не имеет для того никаких оснований.

По сути, в традиционной модели избирательного управления доступом (DAC), хорошо реализованы только два уровня доступа — пользователь и суперпользователь. Нет простого метода, который позволил бы устанавливать для каждого пользователя необходимый минимум привилегий.

Конечно, есть множество методов обхода этих проблем в рамках классической модели безопасности, но ни один из них не является универсальным.

1.1.1 Основные термины, использующиеся в SELinux:

Домен — список действий, которые может выполнять процесс. Обычно в качестве домена определяется минимально-возможный набор действий, при помощи которых процесс способен функционировать. Таким образом, если процесс дискредитирован, злоумышленнику не удастся нанести большого вреда.

Роль — список доменов, которые могут быть применены. Если какого-то домена нет в списке доменов какой-то роли, то действия из этого домена не могут быть применены.

Тип — набор действий, которые допустимы по отношения к объекту. Тип отличается от домена тем, что он может применяться к пайпам, каталогам и файлам, в то время как домен применяется к процессам.

Контекст безопасности — все атрибуты SELinux — роли, типы и домены.

1.2 Решение проблем традиционной модели безопасности.

SELinux следует модели минимально необходимых привилегий для каждого сервиса, пользователя и программы намного более строго. По умолчанию установлен «запретительный режим», когда каждый элемент системы имеет только те права, которые жизненно необходимы ему для функционирования. Если же пользователь, программа или сервис пытаются изменить файл или получить доступ к ресурсу, который явно не необходим для решения их, то им будет просто отказано в доступе, а такая попытка будет зарегистрирована в журнале.

SELinux реализована на уровне ядра, так что прикладные приложения могут совсем ничего не знать о версии этой системы принудительного контроля доступа, особенностях её работы и т.д. В случае грамотной настройки, SELinux никак не повлияет на функционирование сторонних программ и сервисов. Хотя, если приложение способно перехватывать сообщения об ошибках этой системы контроля доступа, удобство пользования таки приложением существенно возрастает. Ведь в случае попытки доступа к защищенному ресурсу или файлу, SELinux передает в основное приложение ошибку из семейства «access denied». Но лишь немногие приложения используют получаемые от SELinux коды возврата системных вызовов.

Вот несколько примеров использования SELinux, которые позволяют увидеть, каким образом можно увеличить степень безопасности всей системы.

— Создание и настройка списка программ, которые могут читать ssh-ключи.

— Предотвращение несанкционированного доступа к данным через mail-клиент.

— Настройка браузера таким образом, чтобы он мог читать в домашней папки пользователя только необходимые для функционирования файлы и папки.

2. Режимы работы SELinux

SELinux имеет три основных режим работы, при этом по умолчанию установлен режим Enforcing. Это довольно жесткий режим, и в случае необходимости он может быть изменен на более удобный для конечного пользователя.

Enforcing: Режим по-умолчанию. При выборе этого режима все действия, которые каким-то образом нарушают текущую политику безопасности, будут блокироваться, а попытка нарушения будет зафиксирована в журнале.

Permissive: В случае использования этого режима, информация о всех действиях, которые нарушают текущую политику безопасности, будут зафиксированы в журнале, но сами действия не будут заблокированы.

Disabled: Полное отключение системы принудительного контроля доступа.

Вы можете посмотреть текущий режим и другие настройки SELinux (а в случае необходимости и изменить его) при помощи специального GUI-инструмента, доступного в меню «Администрирование» (system-config-selinux). Если же вы привыкли работать в консоли, то можете посмотреть текущий статус командой sestatus.

# sestatus
    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 21
    Policy from config file:        targeted

Также вы можете узнать статус SELinux при помощи команды getenforce.

Команда «setenforce» позволяет быстро переключаться между режимами Enforcing и Permissive, изменения вступают в силу без перезагрузки. Но если вы включаете или отключаете SELinux, требуется перезагрузка, ведь нужно заново устанавливать метки безопасности в файловой системе.

Для того, чтобы выбрать режим по-умолчанию, который будет применяться при каждой загрузке системы, задайте значение строки ‘SELINUX=’ в файле /etc/selinux/config, задав один из режимов — ‘enforcing’, ‘permissive’ или ‘disabled’. Например: ‘SELINUX=permissive’.

3. Политики SELinux

Как отмечалось ранее, SELinux по-умолчанию работает в режиме Enforcing, когда любые действия, кроме разрешенных, автоматически блокируются, каждая программа, пользователь или сервис обладают только теми привилегиями, которые необходимы им для функционирования, но не более того. Это довольно жесткая политика, которая обладает как плюсами — наибольший уровень информационной безопасности, так и минусами — конфигурирование системы в таком режиме сопряжено с большими трудозатратами системных администраторов, к тому же, велик риск того, что пользователи столкнутся с ограничением доступа, если захотят использовать систему хоть сколько-нибудь нетривиальным образом. Такой подход допустим в Enterprise-секторе, но неприемлем на компьютерах конечных пользователей. Многие администраторы просто отключают SELinux на рабочих станциях, чтобы не сталкиваться с подобными проблемами.

Для того, чтобы избежать этого, для ключевых приложений и сервисов, таких как, например, httpd, named, dhcpd, mysqld, определены заранее сконфигурированные целевые политики, которые не позволят получить злоумышленнику доступ к важным данным. Те же приложения, для которых политика не определена, выполняются в домене unconfined_t и не защищаются SELinux. Таким образом, правильно выбранные целевые политики позволяют добиться приемлемого уровня безопасности, не создав при этом для пользователя лишних проблем.

4. Контроль доступа в SELinux

SELinux предоставляет следующие модели управления доступом:

Type Enforcement (TE): основной механизм контроля доступа, используемый в целевых политиках. Позволяет детально, на самом низком уровне управлять разрешениями. Самый гибкий, но и самый трудоемкий для системного администратора механизм.

Role-Based Access Control (RBAC): в этой модели права доступа реализуются в качестве ролей. Ролью называется разрешения на выполнение определенных действий одним или несколькими элементами системы над другими частями системы. По-сути, RBAC является дальнейшим развитием TE.

Multi-Level Security (MLS): многоуровневая модель безопасности, в которой всем объектам системы присваивается определенный уровень доступа. Разрешение или запрет доступа определяется только соотношением этих уровней.

Все процессы и файлы в рамках SELinux имеют контекст безопасности.

Давайте посмотрим на контекст на практике, подробно рассмотрев стартовую страницу веб-сервера Apache, находящуюся по адресу /var/www/html/index.html

$ ls -Z /var/www/html/index.html 
-rw-r--r--  username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html

В дополнение к стандартным правам доступа к файлу, мы можем видеть контекст безопасности SELinux: system_u: object_r: httpd_sys_content_t.

Контекст базируется на user:role:type:mls, но поля user:role:type отображаются, в то время как поле mls скрыто. Также мы можем видеть целевую политику, в данном случае httpd_sys_content_t.

Теперь рассмотрим контекст безопасности SELinux для процесса ‘httpd’ (веб-сервер Apache):

$ ps axZ | grep httpd
system_u:system_r:httpd_t        3234 ?        Ss     0:00 /usr/sbin/httpd

Как мы видим, этот процесс запущен на домене httpd_t.

Ну а теперь давайте посмотрим на контекст безопасности файла в нашем домашнем каталоге:

$ ls -Z /home/username/myfile.txt
-rw-r--r--  username username user_u:object_r:user_home_t      /home/username/myfile.txt

Мы видим, что файл имеет тип user_home_t, этот тип присваивается по умолчанию всем файлам в домашнем каталоге.

Доступ разрешен только между элементами с одинаковым типом, именно поэтому веб-сервер Apache может без проблем читать файл /var/www/html/index.html, который имеет тип httpd_sys_content_t. В то же самое время, так как Apache запущен на домене httpd_t и не имеет заполненных полей userid:username, он не может получить доступ к файлу home/username/myfile.txt, хотя этот файл доступен для чтения процессам, для которых не определена целевая политика. Таким образом, если веб-сервер Apache будет взломан, то злоумышленник не сможет получить доступ к файлам или запускать процессы, которые не находятся в домене httpd_t.

5. Устранение проблем SELinux

Рано или поздно происходит ситуация, когда вы сталкиваетесь с ситуацией, когда SELinux запрещает вам доступ к чему-то. Есть несколько основных причин отказа доступа:

— Неправильно маркированный файл.

— Процесс работает в неправильном контексте

— Ошибка в политике. Процесс требует доступ к файлу, который не был учтен при создании политики.

— Попытка вторжения.

Первые три причины отказа доступа разрешаются достаточно легко, в то время как во время попытки вторжения звучит сигнал тревоги и пользователю посылается соответствующее уведомление.

Для того, чтобы разобраться с любой проблемой, достаточно просмотреть журнал SELinux. По умолчанию он записывается процессом auditd в файл /var/log/audit/audit.log. Если этот процесс не запущен, то SELinux ведет журнал в файле /var/log/messages, в этом случае все сообщения системы контроля доступа маркируются ключом AVC, что позволяет быстро отфильтровать нужные строки, например. при помощи команды grep.

В последние версии дистрибутивов (начиная с CentOS 5), включена утилита с графическим интерфейсом пользователя, которая позволяет отображать журнал SELinux в удобном и понятном для пользователя виде. Вызвать её можно из консоли, набрав sealert -b. Утилита входит в состав пакета setroubleshoot. В том случае, если X-сервер не запущен, вы можете сгенерировать понятные и удобные для человека отчеты следующей командой:

sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt 
5.1 Изменение меток контекста безопасности файлов.

Команда «chcon» позволяет изменяет контекст SELinux для файлов или каталогов точно таким же образом, как команды «chown» и «chmod» позволяют менять владельца файла или права доступа к нему в рамках стандартной системы контроля доступа.

Рассмотрим несколько примеров.

Предположим, что в системе установлен веб-сервер Apache и нам необходимо изменить папку, в которой хранятся сайты (по-умолчанию это /var/www/html/) на, допустим, /html/ и создать в этом каталоге файл index.html.


# mkdir /html
# touch /html/index.html
# ls -Z /html/index.html
-rw-r--r--  root root user_u:object_r:default_t        /html/index.html
# ls -Z | grep html
drwxr-xr-x  root root user_u:object_r:default_t        html 

Выше мы видим, что и каталог /html, и файл /html/index.html в рамках контекста безопасности имеют тип default_t. Это означает, что если мы запустим Apache и попробуем начать работать с этим каталогом или файлом, то SELinux откажет нам в доступе. И это будет абсолютно правильно, ведь правильный контекст безопасности для файлов, взаимодействующих с Apache, это httpd_sys_content_t.

Изменим контекст и проверим правильно ли все сделано:

# chcon -v --type=httpd_sys_content_t /html
context of /html changed to user_u:object_r:httpd_sys_content_t
# chcon -v --type=httpd_sys_content_t /html/index.html
context of /html/index.html changed to user_u:object_r:httpd_sys_content_t
# ls -Z /html/index.html
-rw-r--r--  root root user_u:object_r:httpd_sys_content_t    /html/index.html
# ls -Z | grep html
drwxr-xr-x  root root user_u:object_r:httpd_sys_content_t    html 

Не обязательно вручную обрабатывать каждый файл и каждый каталог, можно просто воспользоваться опцией рекурсивного обхода каталога -R:

# chcon -Rv --type=httpd_sys_content_t /html

Подобные изменения контекста безопасности будут сохраняться между перезагрузками, однако, при изменении меток файловых систем, изменения пропадут. В процессе обслуживания и эксплуатации, подобное не редкость. Правильным решением в такой ситуации будет (после тестирования, конечно) создать дополнительное правило, после чего объеденить его с местными локальными правилами. Таким образом, оно будет иметь более высокий приоритет, чем базовые правила.

Для того, чтобы SELinux корректно работал даже после изменения меток файловых систем, мы можем использовать как инструменты для управления SELinux c GUI-интерфейсом, так и консольную утилиту semanage:

semanage fcontext -a -t httpd_sys_content_t "/html(/.*)?"

В примере выше мы присвоили контекст httpd_sys_content_t всем файлам, находящимся в катологе /html.

5.2 Восстановление контекста безопасности SELinux.

Команда «restorecon» позволяет изменить контекст безопасности на тот, который был присвоен по-умолчанию.

Снова используем в качестве примера веб-сервер Apache. Предположим, что пользователь отредактировал в своем домашнем каталоге копию файла index.html и переместил (командой mv) его в каталог, в котором храняться сайты (/var/www/html).

Следует обратить внимание, что при копировании (команда cp) контекст безопасности файла будет совпадать с контекстом каталога назначения, при перемещении же, контекст безопасности будет совпадать с контекстом источника. Конечно, мы могли бы использовать команду chcon для изменения контекста безопасности, но так как перемещенные файлы находятся сейчас в каталоге /var/www/html, мы можем просто восстановить параметры контекста для всех файлов, находящихся в этом каталоге.

Для того, чтобы восстановить контекст только для файла index.html, мы можем применить команду:

# restorecon -v /var/www/html/index.html 

Если же мы хотим рекурсивно обойти весь каталог и изменить контекст для всех содержащихся в нем файлов, используем следующую команду:

# restorecon -Rv /var/www/html
5.3 Изменение меток для всей файловой системы.

Иногда бывает необходимо заново устанавливать метки безопасности во всей файловой системе. Чаще всего такую операцию производят при повторном включении SELinux, после того, как система была на некоторое время отключена. Также это бывает нужно, если мы меняем тип управления политиками на strict (в этом случае все процессы работают в своих специальных доменах, в домене unconfined_t не может работать никто).

Для того, чтобы автоматически переразметить файловую систему при следующей перезагрузке, введите следующие команды:


# touch /.autorelabel
# reboot 

Иногда автоматическая переразметка не срабатывает (чаще всего в тех случаях, когда дистрибутив с выключенной системой SELinux был обновлен). В таком случае воспользуйтесь следующей командой:

# genhomedircon
# touch /.autorelabel
# reboot
5.4 Предоставление доступа к портам.

Нередко мы хотим, чтобы сервисы, подобные Apache, имели возможность прослушивать нестандартные порты и принимать на них входящие соединения. Базовые политики SELinux позволяют получить доступ только к заранее предопределенным портам, которые жестко связаны с тем или иным сервисом. Допустим, мы хотим, чтобы Apache прослушивал 81 порт. В таком случае, нам надо добавить правило при помощи команды semanage:

# semanage port -a -t http_port_t -p tcp 81

Полный список портов, к которым SELinux предоставляет доступ, можно просмотреть следующим образом:

# semanage port -l

В следующей, второй части мануала, мы покажем возможность гибкой настройки политик системы.

4 метода отключения SELinux

В некоторых дистрибутивах Linux SELinux по умолчанию включен, и в результате могут возникать различные проблемы. Если вы не понимаете как работает SELinux и не умеете правильно его настраивать лучше всего отключить его до тех пор, пока вы не изучите основные принципы его работы

 

Для отключения SELinux вы можете использовать любой из 4-ех описанных методов.

Мы не будем подробно останавливаться на том, для чего используется SELinux, и приступим непосредственно к отключению. Если в системе используется SELinux, то выполнив команду ls -Z вы можете увидеть такую картинку.

# <strong>ls -Z /etc/
</strong>-rw-r--r--  root root  system_u:object_r:etc_t:s0       a2ps.cfg
-rw-r--r--  root root  system_u:object_r:adjtime_t:s0   adjtime
-rw-r--r--  root root  system_u:object_r:etc_aliases_t:s0 aliases
drwxr-x---  root root  system_u:object_r:auditd_etc_t:s0 audit
drwxr-xr-x  root root  system_u:object_r:etc_runtime_t:s0 blkid
drwxr-xr-x  root root  system_u:object_r:bluetooth_conf_t:s0 bluetooth
drwx------  root root  system_u:object_r:system_cron_spool_t:s0 cron.d
-rw-rw-r--  root disk  system_u:object_r:amanda_dumpdates_t:s0 dumpdates

Метод 1: Временное отключение SELinux

Для временного отключения SELinux вы можете модифицировать файл /selinux/enforce. Обратите внимание, это временное отключение, и после перезагрузки системы SELinux будет работать снова.

# cat /selinux/enforce
1
# <strong>echo 0 > /selinux/enforce</strong>
# cat /selinux/enforce
0

 

Также можно использовать команду setenforce, как показано в примере ниже. Возможные параметры команды setenforce таковы: Enforcing , Permissive, 1 (включить) or 0 (отключить).

# setenforce 0

Метод 2: Постоянное отключение SELinux

Для постоянного отключения SELinux, измените файл /etc/selinux/config и установите SELINUX=disabled как показано ниже. После этого перезагрузите сервер.

# <strong>cat /etc/selinux/config</strong>
SELINUX=disabled
SELINUXTYPE=targeted
SETLOCALDEFS=0

Метод 3: Отключение SELinux в загрузчике Grub

Третий способ использует возможности загрузчика системы GRUB для отключения SELinux. Добавьте в конец строки selinux=0

# <strong>cat /boot/grub/grub.conf</strong>
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title Enterprise Linux Enterprise Linux Server (2.6.18-92.el5PAE)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-92.el5PAE ro root=LABEL=/ rhgb quiet <strong>selinux=0</strong>
initrd /boot/initrd-2.6.18-92.el5PAE.img
title Enterprise Linux Enterprise Linux Server (2.6.18-92.el5)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet <strong>selinux=0</strong>
initrd /boot/initrd-2.6.18-92.el5.img

Метод 4: Отключаем SELinux только для определенных сервисов – HTTP/Apache

Если вам необходимо не целиком отключить SELinux, а только для определенных служб, у вас есть такая возможность. Для примера отключим SELinux для HTTP/Apache, изменив значение переменной httpd_disable_trans в файле /etc/selinux/targeted/booleans.

 

# grep httpd /etc/selinux/targeted/booleans
httpd_builtin_scripting=1
<strong>httpd_disable_trans=1
</strong>httpd_enable_cgi=1
httpd_enable_homedirs=1
httpd_ssi_exec=1
httpd_tty_comm=0
httpd_unified=1

 

Установите переменную также используя команду setsebool. После этого перезапустите httpd для вступления изменений в силу.

# <strong>setsebool httpd_disable_trans 1
</strong># service httpd restart

Оригинал на английском тут 167

Постовой

Отличный сайт, который позволит вам скачать фильмы в отличном качестве, на хорошей скорости и все это бесплатно!

С этим сервисом доставка цветов перестала быть проблемой, рекомендую всем: доставка цветов.

 

 

Руководство для начинающих по SELinux

Перевод статьи подготовлен для студентов курса «Безопасность Linux»


SELinux или Security Enhanced Linux — это улучшенный механизм управления доступом, разработанный Агентством национальной безопасности США (АНБ США) для предотвращения злонамеренных вторжений. Он реализует принудительную (или мандатную) модель управления доступом (англ. Mandatory Access Control, MAC) поверх существующей дискреционной (или избирательной) модели (англ. Discretionary Access Control, DAC), то есть разрешений на чтение, запись, выполнение.

У SELinux есть три режима:

  1. Enforcing — запрет доступа на основании правил политики.
  2. Permissive — ведение лога действий, нарушающих политику, которые в режиме enforcing были бы запрещены.
  3. Disabled — полное отключение SELinux.

По умолчанию настройки находятся в /etc/selinux/config

Чтобы узнать текущий режим запустите

$ getenforce

Для изменения режима на permissive запустите следующую команду

$ setenforce 0

или, для изменения режима с permissive на enforcing, выполните

$ setenforce 1

Если вам нужно полностью отключить SELinux, то это можно сделать только через файл конфигурации

$ vi /etc/selinux/config

Для отключения измените параметр SELINUX следующим образом:

SELINUX=disabled

Каждый файл и процесс помечается контекстом SELinux, в котором содержится дополнительная информация, такая как пользователь, роль, тип и т.д. Если вы впервые включаете SELinux, то сначала нужно настроить контекст и метки. Процесс назначения меток и контекста известен как маркировка. Чтобы начать маркировку, в файле конфигурации изменим режим на permissive.

$ vi /etc/selinux/config
SELINUX=permissive

После установки режима permissive, создадим в корне пустой скрытый файл с именем autorelabel

$ touch /.autorelabel

и перезагрузим компьютер

$ init 6

Примечание: мы используем режим permissive для маркировки, поскольку использование режима enforcing может привести к краху системы во время перезагрузки.

Не беспокойтесь, если загрузка застрянет на каком-то файле, маркировка занимает некоторое время. После завершения маркировки и загрузки вашей системы вы можете перейти к файлу конфигурации и установить режим enforcing, а также запустить:

$ setenforce 1

Теперь вы успешно включили SELinux на своем компьютере.

Возможно, у вас возникли какие-то ошибки во время маркировки или во время работы системы. Чтобы проверить, работает ли ваш SELinux правильно и не блокирует ли он доступ к какому-либо порту, приложению и т. д. нужно посмотреть логи. Лог SELinux находится в /var/log/audit/audit.log, но вам не нужно читать его целиком, чтобы найти ошибки. Можно использовать утилиту audit2why для поиска ошибок. Запустите следующую команду:

$ audit2why < /var/log/audit/audit.log

В результате вы получите список ошибок. Если ошибок в логе не было, то никаких сообщений отображаться не будет.

Политика SELinux — это набор правил, которыми руководствуется механизм безопасности SELinux. Политика определяет набор правил для конкретного окружения. Сейчас мы изучим как настраивать политики, чтобы разрешить доступ к запрещенным сервисам.

1. Логические значения (переключатели)

Переключатели (booleans) позволяют изменять части политики во время работы, без необходимости создания новых политик. Они позволяют вносить изменения без перезагрузки или перекомпиляции политик SELinux.

Пример

Предположим, мы хотим предоставить общий доступ к домашнему каталогу пользователя по FTP на чтение и запись, и мы уже расшарили его, но при попытке доступа мы ничего не видим. Это связано с тем, что политика SELinux запрещает FTP-серверу читать и писать в домашнем каталоге пользователя. Нам нужно изменить политику, чтобы FTP-сервер мог обращаться к домашним каталогам. Посмотрим, есть ли для этого какие-либо переключатели, выполнив

$ semanage boolean -l

Эта команда выдаст список доступных переключателей с их текущим состоянием (включено/on или выключено/off) и описанием. Вы можете уточнить поиск, добавив grep, чтобы найти результаты, относящиеся только с ftp:

$ semanage boolean -l | grep ftp

и найдете следующее

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Этот переключатель выключен, поэтому мы включим его с помощью setsebool $ setsebool ftp_home_dir on

Теперь наш ftp-демон сможет получить доступ к домашнему каталогу пользователя.

Примечание: вы также можете получить список доступных переключателей без описания, выполнив getsebool -a

2. Метки и контекст

Это наиболее распространенный способ реализации политики SELinux. Каждый файл, папка, процесс и порт помечаются контекстом SELinux:

  • Для файлов и папок метки хранятся как расширенные атрибуты в файловой системе и могут быть просмотрены следующей командой:
    $ ls -Z /etc/httpd
  • Для процессов и портов маркировкой управляет ядро, и можно посмотреть эти метки следующим образом:

процесс

$ ps –auxZ | grep httpd

порт

$ netstat -anpZ | grep httpd

Пример

Теперь давайте рассмотрим пример, чтобы лучше понять метки и контекст. Допустим, у нас есть веб-сервер, который вместо каталога /var/www/html/ использует /home/dan/html/. SELinux сочтет это нарушением политики, и вы не сможете просматривать ваши веб-страницы. Это потому, что мы не установили контекст безопасности, связанный с HTML-файлами. Для просмотра контекста безопасности по умолчанию используйте следующую команду:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Здесь мы получили httpd_sys_content_t в качестве контекста для html-файлов. Нам нужно установить этот контекст безопасности для нашего текущего каталога, который сейчас имеет следующий контекст:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Альтернативная команда для проверки контекста безопасности файла или каталога:

$ semanage fcontext -l | grep '/var/www'

Мы также будем использовать semanage для изменения контекста, после того как найдем правильный контекст безопасности. Чтобы изменить контекст /home/dan/html, выполните следующие команды:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

После того, как контекст изменен с помощью semanage, команда restorecon загрузит контекст по умолчанию для файлов и каталогов. Наш веб-сервер теперь сможет читать файлы из папки /home/dan/html, поскольку контекст безопасности для этой папки был изменен на httpd_sys_content_t.

3. Создание локальных политик

Могут возникнуть ситуации, когда вышеуказанные методы бесполезны для вас, и вы получаете ошибки (avc/denial) в audit.log. Когда такое происходит, то нужно создать локальную политику (Local policy). Все ошибки вы можете найти с помощью audit2why, как было описано выше.

Для устранения ошибок можно создать локальную политику. Например, мы получаем ошибку, связанную с httpd (apache) или smbd (samba), мы grep’аем ошибки и создаем для них политику:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Здесь http_policy и smb_policy — это названия локальных политик, которые мы создали. Теперь нам нужно загрузить эти созданные локальные политики в текущую политику SELinux. Это можно сделать следующим образом:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Наши локальные политики были загружены, и мы не должны больше получать никаких avc или denail в audit.log.


Это была моя попытка помочь вам понять SELinux. Я надеюсь, что после прочтения этой статьи вы будете чувствовать себя с SELinux более комфортно.

Что такое 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-пользователя):

$ getenforce

Изменение режима работы на permissive:

$ setenforce permissive

и наоборот, на enforcing:

$ setenforce enforcing

Полностью отключить SELinux можно только через файл конфигурации. Откройте его любым текстовым редактором

$ vi /etc/selinux/config

и измените параметр SELINUX на disabled:

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 -l | less

Результат будет выглядеть примерно следующим образом:

Команду semodule можно использовать для множества других задач: установки, удаления, перезагрузки, обновления, включения и выключения модулей политики SELinux. Бинарные файлы модулей в большинстве случаев входят в состав пакетов SELinux. Они имеют расширение .pp. Просмотреть их список можно следующей командой:

ls -l /etc/selinux/targeted/modules/active/modules/

Можно заметить, что файлы связаны с различными приложениями:

...
-rw-r--r--. 1 root root 10692 Aug 20 11:41 anaconda.pp
-rw-r--r--. 1 root root 11680 Aug 20 11:41 antivirus.pp
-rw-r--r--. 1 root root 24190 Aug 20 11:41 apache.pp
-rw-r--r--. 1 root root 11043 Aug 20 11:41 apcupsd.pp
...

Файлы .pp не читаемы для человека. При загрузке системы модули политик объединяются в так называемую активную политику, которая затем загружается в память. Бинарная версия этой загруженной политики находится в директории /etc/selinux/targeted/policy.

Следующая команда показывает активную политику:

ls -l /etc/selinux/targeted/policy/

Изменение переключателей SELinux

Несмотря на то, что прочитать файлы модулей политики невозможно, есть простой способ их настройки. Она осуществляется при помощи булевых переключателей SELinux (boolean).
Чтобы разобраться, как они работают, запустим команду semanage с опцией boolean:

Если у вас будет ошибка

-bash: semanage: команда не найдена

То нужно установить  policycoreutils-python

yum install policycoreutils-python

Теперь запускаем semanage с опцией boolean

semanage boolean -l | less

Будет выведен список различных переключателей, которые можно включить или выключить, краткое описание их функций и текущее состояние:

ftp_home_dir (off , off) Allow ftp to home dir
smartmon_3ware (off , off) Allow smartmon to 3ware
mpd_enable_homedirs (off , off) Allow mpd to enable homedirs
xdm_sysadm_login (off , off) Allow xdm to sysadm login
xen_use_nfs (off , off) Allow xen to use nfs
mozilla_read_content (off , off) Allow mozilla to read content
ssh_chroot_rw_homedirs (off , off) Allow ssh to chroot rw homedirs
mount_anyfile (on , on) Allow mount to anyfile
...
...

Первый пункт в этом списке позволяет демону FTP осуществлять доступ к домашним директориям пользователей. В данный момент переключатель выключен (off), то есть доступ запрещен.
Для изменения значений используется команда setsebool. В качестве примера давайте разрешим анонимный доступ FTP на запись. Проверим состояние переключателя командой getsebool:

getsebool ftpd_anon_write

Она покажет, что в данный момент переключатель выключен:

ftpd_anon_write --> off

Изменим значение переключателя и включим его:

setsebool ftpd_anon_write on

Снова проверим состояние переключателя, оно должно поменяться:

getsebool ftpd_anon_write
ftpd_anon_write --> on

Изменение переключателей является временным, при перезагрузке они вернутся к старым значениям. Чтобы закрепить изменения, нужно запустить команду setsebool с опцией -P.

setsebool -P ftpd_anon_write on

Теперь после перезагрузки изменения не потеряются

Заключение

Мы рассмотрели базовые принципы работы SELinux, включение системы и режимы её работы, показали пример обеспечения безопасности системы. Также была разобрана работа политики безопасности и ее настройка при помощи булевых переключателей. Более подробную информацию о SELinux можно найти в соответствующих man-страницах.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Настройка SELinux, включение, отключение — Блог о веб-разработке

Всем привет, давайте поговорим немного о SELinux, но перед этим немного определения для тех, кто не слышал что это вообще такое. SELinux сокращение от анг. слова Security-Enhanced Linux что означает Linux с улучшенной безопасностью. Иными словами это реализация системы принудительного контроля доступа, которая способна функционировать параллельно с классической избирательной системой контроля доступа. Разница в том, что в SELinux посредством определенных политик определяются права доступа самой системой, в свою очередь избирательная система контроля доступа выполняет разделение доступа процессов к ресурсам, основываясь на правах пользователя, для простого понимания это права rwx на трех уровнях – владелец, группа-владелец и остальные пользователи.
После небольшого описания давайте попробуем рассмотреть некоторые команды и параметры SELinux. Наши примеры будут демонстрироваться на операционной системе Linux CentOS 6. Пожалуй, первое и наверное самое востребованное это команды для проверки статуса SELinux.

/usr/sbin/getenforce

или

/usr/sbin/sestatus

Возвращаемые значения для команды getenforce
Enforcing – указывает на то что SELinux активирован и правила политики принудительные;
Permissive – указывает на то что SELinux активирован, но правила политики не принудительные enforced и используются только правила DAC;
Disabled – указывает на то, что SELinux отключен.

Возвращаемые значения для команды sestatus
Данная команда возвращает помимо статуса SELinux так же используемую политику SELinux, пример:


$ /usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 23
Policy from config file:        targeted

SELinux status: enabled – обозначает что SELinux включен;
Current mode: enforcing – обозначает что SELinux включен в принудительном enforced режиме;
Policy from config file: targeted – обозначает что используется политика SELinux targeted.

Включение SELinux
Включается / отключается SELinux в операционной системе в файле конфигурации
/etc/selinux/config


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted

Опция SELINUX=disabled обозначает, что SELinux отключен. Перед тем как запустить SELinux необходимо выполнить некоторые манипуляции.
1. Проверить инсталляцию пакетов SELinux


rpm -qa | grep selinux
rpm -q policycoreutils
rpm -qa | grep setroubleshoot

Так же убедитеть в том, что установлены следующие пакеты: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Пакеты policycoreutils-gui, setroubleshoot, selinux-policy-devel, и mcstrans опциональны.
Отсутствующие пакеты можно установить с помощью команды (под пользователем root)

yum install package-name

2. Каждый файл файловой системы должен быть промаркирован контекстом SELinux перед запуском. До этого момента ограниченным доменам может быть отказано в доступе, что может привести к некорректной загрузке операционной системы. Ситуация исправляется выставлением опции SELINUX=permissive в конфигурационном файле /etc/selinux/config.

3. Маркировка файлов произойдет во время следующей перезагрузки системы. Метки для всех файлов выставляются в контексте SELinux в ходе процесса. В последней строке каждый символ * обозначает 1000 промаркированных файлов. Длительность процесса зависит от количества файлов в системе, а так же скорости работы дисков.


*** Warning -- SELinux targeted policy relabel is required.
*** Relabeling could take a very long time, depending on file
*** system size and speed of hard drives.
****

4. В случае когда политика SELinux принудительно не назначена, и работа происходит в расширительном режиме, то запреты пишутся в лог как действия, которые были бы запрещены в принудительном режиме. Убедитесь что SELinux не запрещает действия во время последней загрузки системы, для этого выполните команду

grep "SELinux is preventing" /var/log/messages

Вывод должен быть пустой, это означает что всё в порядке, и SELinux не запрещает действия.
5. После того как вы убедились что сообщений о запретах в логах нет, установите параметр SELINUX в enforcing (файл /etc/selinux/config):


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted

6. После этого операционную систему следует перезапустить. После перезапуска нужно проверить возвращаемое значение Enforcing командой getenforce.


$ /usr/sbin/getenforce
Enforcing

7. Для просмотра отображений между SELinux и пользователями системы, выполните команду


/usr/sbin/semanage login –l

Вывод команды должен быть такого плана:


Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023

Есть некоторые особенности, которые так же следует учитывать. При отключенном SELinux созданные пользователями файлы не маркируются, вследствие чего, при переводе в состояние enforcing могут появляться проблемы. Маркировка файлов произойдет по изменению опции с disabled на permissive/enforcing режим, таким образом, будет предотвращена проблема с появлением немаркированных файлов.

SELinux: теория и практика безопасности

Алексей Федосеев
Опубликовано 18.10.2006

Традиции UNIX

История операционной системы UNIX насчитывает уже более тридцати лет. Нет
ничего удивительного в том, что коммерческие и свободные реализации UNIX
используются в военных и серьёзных промышленных системах. Одним из важных
достоинств UNIX всегда была простота и идеологическая выдержанность. Что
же касается открытости системы, то здесь у неё вообще нет равных —
традиции распространения исходных кодов уходят в далёкие 1970-е. Влияние и
популярность UNIX были настолько большими, что во всех современных
операционных системах можно увидеть реализацию той или иной идеи из этой
операционной системы.

Модель безопасности UNIX довольно проста. В основе её лежит
дискреционный механизм доступа — каждый объект в системе
имеет владельца, который и устанавливает права доступа к объекту. Сами
пользователи в системе фигурируют в виде процессов — программ, запущенных
от их имени. Так как в операционной системе UNIX даже устройства
представляются в виде файлов, достаточно для каждого из них хранить
владельца и права на использование этого файла другими пользователями
системы.

Но в операционной системе могут работать тысячи пользователей (а такая
ситуация встречается и сейчас — на мэйнфреймах и других больших машинах).
При этом списки доступа (ACL, Access Control List) для каждого файла
разрастутся до гигантских размеров. Частично эту проблему решает
добавление групп пользователей, но ведь их число тоже может быть
очень большим. Создатели UNIX придумали более элегантное решение: для
каждого файла задаются три группы прав — права владельца, права
группы владельца и права для всех остальных. Таким
образом, все права на файл занимают лишь несколько байт.

В UNIX существует три основных права доступа: чтение, запись и исполнение.
Если права чтения и записи очевидны и понятны, то право исполнения
трактуется по-разному для разных типов файлов. Для простых файлов оно
определяет возможность запуска содержащейся в нём программы. В
UNIX исполняемые файлы могут иметь не только любое расширение (часто они
вообще не имеют в имени символа точки), но и содержимое — это может быть
откомпилированная для данной архитектуры программа или скрипт на любом из
поддерживаемых языков программирования. А вот для директории право
исполнения означает возможность «войти» в неё.

Рисунок 1. Права доступа в
UNIX

Помимо комбинации из этих девяти прав доступа, каждый файл может иметь
дополнительные флаги доступа: sticky-бит, специфичный для директорий, и
suid-бит, применяемый для исполняемых файлов. Если пометить директорию
sticky-битом, удалять файл в ней смогут только владельцы, а не все те, кто
имеют права записи на эту директорию — это необходимо в «общих
директориях», где создавать и удалять файлы может любой. Suid-бит —
большая головная боль системных администраторов, он нужен для повышения
прав программы на время запуска.

Развитие безопасности Linux

Унаследовав от UNIX традиционную модель доступа, операционная система Linux
столкнулась с давно известными проблемами безопасности. Используемый в ней
дискреционный метод доступа предоставляет слишком широкие возможности:
любая программа, запущенная от имени пользователя, обладает всеми его
правами — может читать конфигурационные файлы, устанавливать сетевые
соединения и т.д.

Другой большой проблемой безопасности таких систем является наличие прав
суперпользователя (или администратора). Как правило, под этим названием
понимается уровень доступа системы, с которым работают все системные
службы. В этом смысле, системные приложения равны в правах, хотя на самом
деле каждому из них требуется «своя» часть прав суперпользователя —
обращение к сетевому интерфейсу, чтение файлов с паролями, запись
сообщений в системный журнал и т.п. Стоит злоумышленнику получить контроль
над одной из таких служб, и ему станет доступна вся система.

Развитие операционных систем не стоит на месте. Немалую роль в достижении
высокого уровня безопасности Linux сыграла открытость исходных текстов и
принципы разработчиков, проповедующих использование только открытых
стандартов. Вокруг Linux возникло множество проектов, предоставляющих
расширенные возможности по управлению доступом. Например, ставшие
стандартном де-факто встраиваемые модули аутентификации (PAM,
Pluggable Authentication Modules) предоставляют гибкий, легко расширяемый
механизм аутентификации пользователей.

Но в первую очередь безопасность операционной системы зависит от её ядра.
Важным этапом развития ядра Linux стало внедрение интерфейса модулей
безопасности (LSM, Linux Security Modules). В рамках этого проекта многие
внутренние структуры ядра были расширены специальными полями, связанными с
безопасностью. В код многих системных процедур были вставлены вызовы
функций управления доступом (так называемые «hooks»), вынесенные во
внешний модуль безопасности. Таким образом, каждый может написать
собственный модуль, реализующий какую-то специфичную политику
безопасности.

Рисунок 2. Модули безопасности в
Linux

Формализация внешнего интерфейса управления доступом позволила многим
исследовательским группам реализовать свои идеи в коде для Linux. При этом
серьёзную роль в улучшении безопасности Linux сыграли и коммерческие
компании. Например, компания IBM активно участвует в совершенствовании
безопасности Linux и других открытых проектов. Также большая заслуга
принадлежит создателям дистрибутивов — как коммерческих (в первую очередь,
Red Hat и Novell), так и некоммерческих, например проект Hardened в рамках
дистрибутива Gentoo.

Существует несколько серьёзных проектов по расширению стандартной модели
безопасности в Linux. Среди них можно выделить SELinux (Security-Enhanced Linux), RSBAC
(Rule Set Base Access Control) и
grsecurity. В этой статье
рассматривается проект SELinux, который не только позволяет повысить
уровень защищённости обычной Linux-системы, но и даёт возможность
реализации более сложных моделей безопасности.

Что такое SELinux

SELinux — это расширение базовой модели безопасности операционной системы
Linux, добавляющее механизм мандатного доступа. С помощью SELinux можно
задать явные правила того, как субъекты (пользователи и программы) могут
обращаться к объектам системы (файлы и устройства). Таким образом, можно
ограничить программы, прописав возможности их поведения в виде
политики, а операционная система обеспечит её соблюдение.

SELinux входит в официальное ядро Linux начиная с версии 2.6. Система
разрабатывается Национальным агентством по безопасности США (NSA, National
Security Agency) при сотрудничестве с другими исследовательскими
лабораториями и коммерческими дистрибутивами Linux. Исходные тексты
проекта доступны под лицензией GPL.

Мандатный доступ в SELinux реализован в рамках модели домен-тип. В
этой модели каждый процесс запускается в определённом домене безопасности
(уровень доступа), а всем ресурсам (файлы, директории, сокеты и т.п.)
ставится в соответствие определённый тип (уровень секретности). Список
правил, ограничивающих возможности доступа доменов к типам, называется
политикой и задаётся один раз в момент установки системы.
Описание политики в SELinux — это набор текстовых файлов, которые могут
быть скомпилированы и загружены в память ядра Linux при старте
системы.

Рисунок 3. Модель доступа в
SELinux

Правила имеют вполне понятный вид. Например, в указанном ниже правиле для
домена http-сервера разрешается чтение неких файлов, содержащих сетевую
конфигурацию.

allow httpd_t net_conf_t:file { read getattr lock ioctl };

Возможности SELinux по управлению доступом значительно превосходят
возможности базовых прав UNIX. Например, можно строго ограничить номер
сетевого порта к которому будет привязываться Ваш сетевой сервер или
разрешить создание и запись в файлы, но не их удаление. Это позволяет
ограничить системные службы с помощью явно заданного набора существующих
прав. Даже если какая-то из таких служб будет взломана, злоумышленник,
имея права суперпользователя, не сможет пробраться дальше заданных
ограничений.

Что получает системный
администратор

SELinux уже давно вышел за рамки исследовательского проекта. Ряд
дистрибутивов GNU/Linux (Red Hat/Fedora, SuSE 9, Gentoo, Debian) включают
преконфигурированный вариант этой системы. Наиболее развита поддержка
SELinux в дистрибутивах Red Hat (чего только стоит созданное ими полноценное руководство по всем аспектам работы и
администрирования SELinux).

В настоящий момент уже разработано несколько готовых политик безопасности,
которые можно использовать по умолчанию на серверах и даже домашних
компьютерах. Всё, что требуется от системного администратора — выбрать
используемую политику и перезагрузить компьютер с включённым SELinux. В
среднем, политика безопасности SELinux для всей системы содержит более ста
тысяч правил, так что её создание и отладка занимает значительное
время.

При попытке создать правила доступа для какой-либо программы, разработчик
или администратор может столкнуться с тем, что она не была написана с
учётом ограничений SELinux. Например, некоторые приложения под UNIX
практикуют частый переход от прав суперпользователя к правам простого
пользователя и обратно (права суперпользователя фактически используются
только там, где это действительно необходимо) — такое поведение в рамках
модели безопасности SELinux описать не просто.

Многие проекты (например, штатный сетевой экран в Linux IPTables) ещё
полноценно не включены в модель доступа SELinux. Так же, как и графическое
окружение KDE — просто из-за объёмности задачи. Сейчас приходится
объединять все такие приложения под общим, типовым «системным» или
«пользовательским» уровнем доступа, что, естественно, противоречит самой
идее полного разделения служб. Однако, проект постоянно совершенствуется —
как с точки зрения создания и развития политик безопасности, так и через
взаимодействие с разработчиками и модификацию программ.

Создание собственной политики
безопасности

Возможности SELinux выходят за рамки обычных задач системного
администратора. В системах со строгим контролем за обрабатываемой
информацией существует необходимость разработки собственной политики
безопасности, полностью соответствующей требованиям предприятия. В первую
очередь, речь идёт о применении SELinux в задачах военных и
спец-служб.

Существующая на бумаге политика безопасности, включающая описание уровней и
классов секретности, права доступа различных субъектов и специфику ввода и
вывода информации из системы, может быть без особенных трудностей
воплощена в виде политики SELinux. Это открывает возможность применения в
информационных технологиях всех тех методов секретности и доступа к
информации, которые были наработаны за многие годы в «бумажных» системах
контроля доступа.

Мандатный доступ

Защита информации всегда очень волновала военных. Именно в недрах
министерств обороны возникли первые критерии и стандарты безопасности
программ и операционных систем. В числе таких изобретений и метод доступа
к информации, именуемый мандатным доступом (MAC, Mandatory Access
Control). Уже привычный нам дискреционный способ (DAC,
Discretionary Access Control) подразумевает установку прав доступа к файлу
его владельцем. Тогда как при мандатном подходе политика доступа к
информации задаётся не зависимо от пользователей системы и не может быть
изменена в ходе работы системы.

Часто понятие мандатного доступа совмещают с понятием многоуровневой
системы доступа
(MLS, Multilevel security). В рамках этой модели
безопасности фигурируют объекты (пассивные сущности) и субъекты (активные
сущности): каждому объекту соответствует уровень секретности
(например, знакомые любому слова «секретно» или «совершенно секретно»), а
субъекту — уровень доступа. Обычно в таких системах присутствует
и классификация информации по её тематике. Система безопасности должна
обеспечивать доступ к соответствующим уровням и классам, а также
невозможность чтения более высоких уровней секретности и запись в объекты
с более низким уровнем секретности (чтобы не допустить утечку информации).
Это подход реализуется в одной из самых распространённых моделей в рамках
многоуровневого доступа — модели Белла-Ла Падула (Bell-La Padula). Важной
задачей при многоуровневом доступе является разработка формального
механизма понижения уровня секретности документа, например по
истечению срока давности.

Рисунок 4. Уровни и
классы доступа в многоуровневых системах
Рисунок5. Чтение и запись
информации в многоуровневых системах

Широко применяемые в военных системах обработки и хранения информации,
методы мандатного и многоуровневого доступа сейчас доступны создателям
коммерческих и других систем, критичных к потере информации. Но за
удовольствие приходится платить — требования к подготовке администраторов
таких систем значительно выше, а архитекторам необходимо заранее и чётко
проработать политику безопасности.

Подробнее про достоинства и недостатки системы многоуровневого доступа и
мандатного метода доступа можно узнать из работы Ричарда Смита — Introduction
to Multilevel Security.

Сертификация безопасности Linux

Одним из важных рыночных требований, выдвигаемых к операционным системам,
является их сертификация в различных организациях и комиссиях. Наиболее
влиятельные международные стандарты информационной безопасности
объединяются под названием Общих критериев (Common Criteria). В
разработке положений Common Criteria принимают участие представители более
чем 20 стран (США, Европа, Япония и другие развитые страны), стандарты
безопасности принимаются в рамках организации ISO.

В стандартах Common Criteria безопасность операционных систем
рассматривается по двум ортогональным шкалам: по функциональным
возможностям (так называемые, профили защиты, Protection
Profiles) и по соответствию спецификации (уровень соответствия,
Assurance Levels).

Существует два профиля защиты — профиль управляемого доступа (CAPP,
Controlled Access Protection Profile) и более продвинутый профиль меток
доступа (LSPP, Labeled Security Protection Profile). CAPP формализует
давно существующие методы организации безопасности операционных систем
(начиная с UNIX и до современных операционных систем) —
многопользовательская работа, дискреционный метод доступа, методы
парольной аутентификации и т.п. LSPP расширяет CAPP, добавляя мандатный
доступ, многоуровневую безопасность и контроль за импортом и экспортом
информации.

В рамках того или иного профиля защиты операционная система может
сертифицироваться на определённый уровней соответствия от 1 до 7 (EAL,
Evaluation Assurance Level). Каждый из уровней выдвигает более жёсткие
требования к методам разработки и тестирования операционной системы,
управлению конфигурацией, дальнейшей поддержке системы и т.п. Начиная с
4-го уровня требуется частичное предоставление исходного кода. На 7-ом
уровне необходимо формальное математическое доказательство безопасности
системы. Сам процесс сертификации заключается в проверке
аппаратно-программной платформы на соответствие указанным требованиям,
проведение тестирования и анализ методов разработки системы.

Многие коммерческие UNIX-системы, а также Windows (начиная с Windows 2000)
сертифицированы на уровень CAPP/EAL4. Благодаря усилиям компании IBM,
операционная система Linux (точнее, дистрибутивы Red Hat Enterprise Linux
и Novell SuSE) также сертифицирована на это уровень. В настоящий момент
ведётся работа по сертификации Linux на уровень LSPP/EAL4, которого ещё
нет ни у одной из широко распространённых операционных систем — это стало
возможно именно благодаря активному развитию проекта SELinux.

Отечественные методы сертификации безопасности операционных систем
постепенно приближаются к западным. С 2004 года введён стандарт ГОСТ Р
ИСО/МЭК 15408 «Общие критерии оценки безопасности информационных
технологий», представляющий собой перевод стандарта Common Criteria. Не за
горами сертификация коммерческих дистрибутивов GNU/Linux по этому
стандарту в России.

RSBAC

Конкуренцию SELinux может составить проект RSBAC, реализующий мандатный и
ролевой механизмы доступа. Начавшись намного раньше, проект RSBAC уже в
2000 году достиг стабильного состояния. Разработчики гордятся тем, что
совершенно не зависят от правительственных организаций и больших компаний,
написав весь код с нуля.

На самом деле, RSBAC — это среда для создания и использования различных
моделей доступа. В её рамках уже разработаны несколько модулей —
продвинутые мандатный и ролевой механизмы и простое расширение списков
доступа. С теоретической точки зрения эта работа основывается на
публикации Абрамса и Ла Падула Обобщённая среда для управления
доступом
(GFAC, Generalized Framework for Access Control).

Помимо привычного администратора в операционную систему добавляется
администратор безопасности, который может ограничить всех
пользователей (в том числе и суперпользователя) в доступе к информации.
Это создаёт лишний уровень привилегий на пути злоумышленника к полному
контролю над системой, но возлагает большую ответственность на
администратора безопасности.

Функциональность RSBAC достаточно велика, с его помощью можно добиться
таких интересных эффектов, как организация доступа к файлу только в
определённые часы. Но явно ощущаются недостаток документации, небольшое
количество разработчиков и пользователей системы.

RSBAC распространяется под лицензией GPL и представляет собой набор патчей
к текущему ядру Linux. В отличие от SELinux, в основную ветку ядра Linux
RSBAC не входит — сказываются меньшие активность и финансирование проекта.
Ряд дистрибутивов GNU/Linux поддерживает RSBAC, можно отметить Hardened
Gentoo и отечественный ALT Linux Castle.

Заключение

Проект SELinux выбрался из пелёнок и уверенно движется в направлении
универсального средства обеспечения безопасности в Linux-системах. Вместе
с другими известными открытыми проектами, SELinux ведёт Linux к получению
высоких уровней безопасности по международным стандартам Common Criteria.
Сейчас уже можно сказать, что уровень безопасности Linux-систем, особенно
в вопросах организации мандатного доступа, достиг возможностей серьёзных
коммерческих систем. Однако, основанные на Linux решения превосходят
коммерческие аналоги не только низкой ценой, но и принципами открытой
разработки и активного участия сообщества.

Ресурсы для скачивания

SELinux (Linux с повышенной безопасностью) в Debian 10 Buster — Linux-подсказка

SELinux — это система маркировки процессов и файлов. Доступ помеченных субъектов к помеченным объектам ограничен политиками формирования правил. Это руководство представляет собой введение в основы SELinux, показывающее, как настроить и включить SELinux в Debian 10 Buster, а также включить его с дополнительной информацией о популярных командах.

Перед тем, как начать, вам необходимо изучить следующие понятия:

Субъекты: процессов или пользователей.
Объекты: файлов или файловых систем.

Применение типа: в SELinux все субъекты и объекты имеют идентификатор типа, заканчивающийся на _t. « Типовое обеспечение — это понятие, согласно которому в системе обязательного контроля доступа доступ регулируется посредством разрешения на основе набора правил субъект-доступ-объект.

В SELinux принудительное применение типов осуществляется на основе меток субъектов и объектов. SELinux сам по себе не имеет правил, которые говорят, что / bin / bash может выполнять / bin / ls .Вместо этого у него есть правила, похожие на «Процессы с меткой user_t могут выполнять обычные файлы с меткой bin_t. ”(источник https://wiki.gentoo.org/wiki/SELinux/Type_enforcement)

Discretionary Access Control (DAC): DAC — это система владения и разрешений, которую мы используем в Linux для управления доступом к таким объектам, как файлы или каталоги. Дискреционный контроль доступа не имеет ничего общего с SELinux и представляет собой другой уровень безопасности. Для получения дополнительной информации о DAC посетите Linux Permissions Explained.

Обязательный контроль доступа (MAC): — это тип контроля доступа, который ограничивает доступ субъектов к взаимодействию с объектами. В отличие от DAC с MAC пользователи не могут изменять политики.
Субъекты и объекты имеют контекст безопасности (атрибуты безопасности), который контролируется SELinux и администрируется в соответствии с политиками безопасности, созданными с помощью правил, которые должны применяться.


Контроль доступа на основе ролей (RBAC): — это тип управления доступом на основе ролей, его можно комбинировать как с MAC, так и с DAC.Политики RBAC упрощают управление многими пользователями в организации в отличие от DAC, которое может быть получено в отдельных назначениях разрешений, что упрощает аудит, настройку и обновление политик.

Принудительный режим: SELinux ограничивает доступ субъектов к объектам на основе политик.

Разрешающий режим: SELinux регистрирует только незаконную активность.

Функции SELinux включают (список Википедии):

  • Чистое отделение политики от принудительного применения
  • Четко определенные интерфейсы политик
  • Поддержка приложений, запрашивающих политику и обеспечивающих контроль доступа (например, crond , выполняющие задания в правильном контексте)
  • Независимость от конкретных политик и языков политик
  • Независимость от конкретных форматов и содержимого защитных этикеток
  • Индивидуальные метки и элементы управления для объектов и служб ядра
  • Поддержка изменений политики
  • Отдельные меры защиты целостности системы (доменного типа) и конфиденциальности данных ( многоуровневая безопасность )
  • Гибкая политика
  • Управляет инициализацией и наследованием процессов, а также выполнением программ
  • Управление файловыми системами, каталогами, файлами и открытыми файловыми дескрипторами
  • Управление сокетами, сообщениями и сетевыми интерфейсами
  • Контроль за использованием «возможностей»
  • Кэшированная информация о решениях доступа через Access Vector Cache (AVC)
  • Default-deny policy (все, что явно не указано в политике, запрещено) .

Источник: https://en.wikipedia.org/wiki/Security-Enhanced_Linux#Features

Примечание : пользователи SELinux и passwd разные.

В моем случае SELinux был отключен в Debian 10 Buster. Включение SELinux — один из основных шагов по обеспечению безопасности устройства Linux. Чтобы узнать статус SELinux на вашем устройстве, выполните команду:

Я обнаружил, что SELinux отключен, чтобы включить его, вам нужно установить некоторые пакеты раньше, после обновления apt , выполните команду:

/ # apt install selinux-basics selinux-policy-default

.

Если требуется, нажмите Y , чтобы продолжить процесс установки.После завершения установки запустите apt update .

Чтобы включить SELinux, выполните следующую команду:

Как видите, SELinux был активирован правильно. Чтобы применить все изменения, вы должны перезагрузить систему в соответствии с инструкциями.

Команда getenforce может использоваться для изучения статуса SELinux, если он находится в разрешающем или принудительном режиме:

Разрешающий режим можно заменить, установив параметр 1 (разрешающий — 0).Вы также можете проверить режим в файле конфигурации, используя команду меньше :

/ # меньше / etc / selinux / config

Выход:

Как видите, файлы конфигурации показывают разрешающий режим. Для выхода нажмите Q .

Чтобы увидеть контекст безопасности файла или процесса, вы можете использовать флаг -Z:

Формат метки: пользователь: роль: тип: уровень .

semanage — инструмент управления политиками SELinux

semanage — это инструмент управления политиками SELinux. Он позволяет управлять логическими значениями (которые позволяют изменять процесс на ходу), ролями и уровнями пользователей, сетевыми интерфейсами, модулями политик и многим другим. Semanage позволяет настраивать политики SELinux без необходимости компилировать исходные коды. Semanage обеспечивает связь между ОС и пользователями SELinux и контекстами безопасности определенных объектов.

Для получения дополнительной информации о semanage посетите страницу руководства по адресу: https: // linux.die.net/man/8/semanage

Заключение и примечания

SELinux — это дополнительный способ администрирования доступа процессов к системным ресурсам, таким как файлы, разделы, каталоги и т. Д. Он позволяет управлять огромными привилегиями в соответствии с ролью, уровнем или типом. Его включение является обязательной мерой безопасности, и при использовании важно помнить об уровне безопасности и перезагружать систему после включения или отключения (отключение не рекомендуется вообще, за исключением специальных тестов).Иногда доступ к файлу блокируется, несмотря на предоставленные разрешения системы или ОС, потому что SELinux запрещает это.

Надеюсь, вы нашли эту статью о SELinux полезной как введение в это решение безопасности. Следите за LinuxHint, чтобы получить больше советов и обновлений по Linux и сети.

Статьи по теме:

.

14,5. Введение в SELinux

SELinux ( Security Enhanced Linux ) — это система обязательного контроля доступа , построенная на интерфейсе Linux LSM ( Linux Security Modules ). На практике ядро ​​запрашивает SELinux перед каждым системным вызовом, чтобы узнать, авторизован ли процесс для выполнения данной операции.

SELinux использует набор правил, известный как политика , для авторизации или запрещения операций. Эти правила сложно создать.К счастью, предусмотрены две стандартные политики ( для и для строгого ), чтобы избежать основной работы по настройке.

В SELinux управление правами полностью отличается от традиционных систем Unix. Права процесса зависят от его контекста безопасности . Контекст определяется идентификатором пользователя, запустившего процесс, ролью и доменом , который пользователь нес в то время.Права действительно зависят от домена, но переходы между доменами контролируются ролями. Наконец, возможные переходы между ролями зависят от личности.

Рисунок 14.1. Контексты безопасности и пользователи Unix

На практике при входе в систему пользователю назначается контекст безопасности по умолчанию (в зависимости от ролей, которые он должен иметь возможность одобрить). Это определяет текущий домен и, следовательно, домен, который будут нести все новые дочерние процессы.Если вы хотите изменить текущую роль и связанный с ней домен, вы должны вызвать newrole -r role_r -t domain_t (обычно для данной роли разрешен только один домен, параметр -t может поэтому часто не учитываются). Эта команда аутентифицирует вас, предлагая ввести пароль. Эта функция запрещает программам автоматически переключаться между ролями. Такие изменения могут произойти, только если они явно разрешены в политике SELinux.

Очевидно, что права распространяются не на все объекты (файлы, каталоги, сокеты, устройства и т. Д.)). Они могут варьироваться от объекта к объекту. Для этого каждый объект связан с типом (это называется маркировкой). Таким образом, права доменов выражаются наборами (запрещенных) операций над этими типами (и, косвенно, со всеми объектами, которые помечены данным типом).

По умолчанию программа наследует свой домен от пользователя, запустившего ее, но стандартные политики SELinux предполагают, что многие важные программы будут выполняться в выделенных доменах. Для этого эти исполняемые файлы помечаются выделенным типом (например, ssh помечен как ssh_exec_t , и при запуске программы она автоматически переключается на домен ssh_t ).Этот автоматический механизм смены домена позволяет предоставлять только права, необходимые для каждой программы. Это фундаментальный принцип SELinux.

Рисунок 14.2. Автоматические переходы между доменами

14.5.2. Настройка SELinux

Поддержка SELinux встроена в стандартные ядра, предоставляемые Debian. Основные инструменты Unix поддерживают SELinux без каких-либо изменений. Таким образом, включить SELinux относительно просто.

Команда apt install selinux-basics selinux-policy-default автоматически установит пакеты, необходимые для настройки системы SELinux.

Пакет selinux-policy-default содержит набор стандартных правил. По умолчанию эта политика ограничивает доступ только к нескольким широко распространенным службам. Пользовательские сеансы не ограничены, поэтому маловероятно, что SELinux заблокирует законные операции пользователя. Однако это повышает безопасность системных служб, работающих на машине. Чтобы настроить политику, эквивалентную старым «строгим» правилам, вам просто нужно отключить неограниченный модуль (управление модулями подробно описано в этом разделе).

После установки политики вы должны пометить все доступные файлы (что означает присвоение им типа). Эта операция должна быть запущена вручную с помощью fixfiles relabel .

Теперь система SELinux готова. Чтобы включить его, вы должны добавить параметр selinux = 1 security = selinux в ядро ​​Linux. Параметр audit = 1 включает ведение журнала SELinux, в котором записываются все запрещенные операции. Наконец, параметр enforcing = 1 вводит правила в приложение: без него SELinux работает в разрешающем режиме по умолчанию, в котором запрещенные действия регистрируются, но все же выполняются.Таким образом, вам следует изменить файл конфигурации загрузчика GRUB, чтобы добавить желаемые параметры. Один из простых способов сделать это — изменить переменную GRUB_CMDLINE_LINUX в / etc / default / grub и запустить update-grub . SELinux будет активен после перезагрузки.

Стоит отметить, что сценарий selinux-activate автоматизирует эти операции и вызывает маркировку при следующей загрузке (что позволяет избежать новых немаркированных файлов, созданных, когда SELinux еще не был активен и пока маркировка продолжалась).

14.5.3. Управление системой SELinux

Политика SELinux представляет собой модульный набор правил, и его установка автоматически определяет и включает все соответствующие модули на основе уже установленных служб. Таким образом, система сразу же готова к работе. Однако, когда служба устанавливается после политики SELinux, вы должны иметь возможность вручную включить соответствующий модуль. Это цель команды semodule . Более того, вы должны иметь возможность определять роли, которые может одобрить каждый пользователь, и это можно сделать с помощью команды semanage .

Таким образом, эти две команды можно использовать для изменения текущей конфигурации SELinux, которая хранится в / etc / selinux / default / . В отличие от других файлов конфигурации, которые вы можете найти в / etc / , все эти файлы нельзя изменять вручную. Вам следует использовать программы, предназначенные для этой цели.

14.5.3.1. Управление модулями SELinux

Доступные модули SELinux хранятся в каталоге / usr / share / selinux / default / .Чтобы включить один из этих модулей в текущей конфигурации, вы должны использовать semodule -i module.pp.bz2 . Расширение pp.bz2 означает пакет политик (сжатый с помощью bzip2).

Удаление модуля из текущей конфигурации выполняется с помощью semodule -r module . Наконец, команда semodule -l перечисляет модули, которые в настоящее время установлены. Он также выводит их номера версий. Модули можно выборочно включить с помощью semodule -e и отключить с помощью semodule -d .

  #    semodule -i /usr/share/selinux/default/abrt.pp.bz2  
  libsemanage.semanage_direct_install_info: модуль abrt будет отключен после установки, так как в системе присутствует отключенный экземпляр этого модуля.
#    semodule -l  
  аккаунтовd
acct
[...] 
  #    semodule -e abrt  
  #    semodule -d accountsd  
  #    semodule -l  
  abrt
acct
[...] 
  #    semodule -r abrt  
  libsemanage.semanage_direct_remove_key: модуль abrt с приоритетом 100 теперь активен.    semodule -l   

semodule немедленно загружает новую конфигурацию, если вы не используете его опцию -n . Стоит отметить, что программа по умолчанию действует в текущей конфигурации (которая указывается переменной SELINUXTYPE в / etc / selinux / config ), но вы можете изменить другую, указав ее с помощью -s Вариант .

14.5.3.2. Управление удостоверениями

Каждый раз, когда пользователь входит в систему, ему назначается идентификатор SELinux. Эта личность определяет роли, которые они смогут поддерживать. Эти два сопоставления (от пользователя к удостоверению и от этого удостоверения к ролям) настраиваются с помощью команды semanage .

Вы обязательно должны прочитать страницу руководства semanage (8). У всех управляемых концепций есть собственная страница руководства; например, semanage-login (8).Даже если синтаксис команды имеет тенденцию быть похожим для всех управляемых концепций, рекомендуется прочитать ее справочную страницу. Вы найдете общие параметры для большинства подкоманд: -a для добавления, -d для удаления, -m для изменения, -l для перечисления и -t для указания типа (или домен).

semanage login -l перечисляет текущее сопоставление между идентификаторами пользователей и идентификаторами SELinux. Пользователи, у которых нет явной записи, получают идентификатор, указанный в записи __default__ .Команда semanage login -a -s user_u user свяжет идентификатор user_u с данным пользователем. Наконец, semanage login -d user удаляет запись сопоставления, назначенную этому пользователю.

  #    semanage логин -a -s user_u rhertzog  
  #    вход в систему semanage -l  
 
Имя для входа Пользователь SELinux MLS / MCS Range Service

__default__ unlimited_u s0-s0: c0.c1023 *
rhertzog user_u s0 *
корень unlimited_u s0-s0: c0.c1023 *
#    semanage логин -d rhertzog   

semanage user -l перечисляет соответствие между идентификаторами пользователей SELinux и разрешенными ролями. Для добавления нового идентификатора необходимо определить как соответствующие роли, так и префикс метки, который используется для присвоения типа личным файлам ( / home / , пользователь / * ).Префикс должен быть выбран среди пользователя , персонала и sysadm . Префикс « staff » приводит к файлам типа « staff_home_dir_t ». Создание нового идентификатора пользователя SELinux выполняется с помощью semanage user -a -R roles -P prefix identity . Наконец, вы можете удалить идентификатор пользователя SELinux с помощью semanage user -d identity .

  #    semanage user -a -R 'staff_r user_r' -P staff test_u  
  #    semanage пользователь -l  
 
                Маркировка MLS / MLS /
Пользовательский префикс SELinux Уровень MCS Диапазон MCS Роли SELinux

корень sysadm s0 s0-s0: c0.c1023 staff_r sysadm_r system_r
Staff_u персонал s0 s0-s0: c0.c1023 staff_r sysadm_r
sysadm_u sysadm s0 s0-s0: c0.c1023 sysadm_r
system_u пользователь s0 s0-s0: c0.c1023 system_r
test_u персонал s0 s0 staff_r user_r
неограниченный_u неограниченный s0 s0-s0: c0.c1023 system_r неограниченный_r
user_u пользователь s0 s0 user_r
#    semanage пользователь -d test_u   
14.5.3.3. Управление контекстами файлов, портами и логическими значениями

Каждый модуль SELinux предоставляет набор правил маркировки файлов, но также можно добавить собственные правила маркировки для конкретного случая. Например, если вы хотите, чтобы веб-сервер мог читать файлы в файловой иерархии / srv / www / , вы можете выполнить semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?" , за которым следует restorecon -R / srv / www / . Первая команда регистрирует новые правила маркировки, а вторая сбрасывает типы файлов в соответствии с текущими правилами маркировки.

Точно так же порты TCP / UDP помечены таким образом, чтобы гарантировать, что только соответствующие демоны могут их прослушивать. Например, если вы хотите, чтобы веб-сервер мог прослушивать порт 8080, вы должны запустить semanage port -m -t http_port_t -p tcp 8080 .

Некоторые модули SELinux экспортируют логические параметры, которые можно настроить, чтобы изменить поведение правил по умолчанию. Утилита getsebool может использоваться для проверки этих параметров ( getsebool boolean отображает одну опцию, а getsebool -a — все).Команда setsebool boolean value изменяет текущее значение логической опции. Параметр -P делает изменение постоянным, это означает, что новое значение становится значением по умолчанию и будет сохраняться при перезагрузках. В приведенном ниже примере веб-серверам предоставляется доступ к домашним каталогам (это полезно, когда у пользователей есть личные веб-сайты в ~ / public_html / ).

  #    getsebool httpd_enable_homedirs  
  httpd_enable_homedirs -> выкл.
#    setsebool -P httpd_enable_homedirs на  
  #    getsebool httpd_enable_homedirs  
  httpd_enable_homedirs -> на  

14.5.4. Адаптация правил

Поскольку политика SELinux является модульной, может быть интересно разработать новые модули для (возможно, пользовательских) приложений, в которых они отсутствуют. Эти новые модули будут дополнять эталонную политику .

Для создания новых модулей требуется пакет selinux-policy-dev, а также selinux-policy-doc. Последний содержит документацию по стандартным правилам ( / usr / share / doc / selinux-policy-doc / html / ) и образцы файлов, которые можно использовать в качестве шаблонов для создания новых модулей.Установите эти файлы и изучите их более внимательно:

  $    cp /usr/share/doc/selinux-policy-doc/Makefile.example Makefile  
  $    cp /usr/share/doc/selinux-policy-doc/example.fc ./  
  $    cp /usr/share/doc/selinux-policy-doc/example.if ./  
  $    cp /usr/share/doc/selinux-policy-doc/example.te ./   

Файл .te — самый важный.Он определяет правила. Файл .fc определяет «контексты файлов», то есть типы, назначенные файлам, связанным с этим модулем. Данные в файле .fc используются на этапе разметки файла. Наконец, файл .if определяет интерфейс модуля: это набор «общедоступных функций», которые другие модули могут использовать для правильного взаимодействия с модулем, который вы создаете.

14.5.4.1. Запись файла .fc

Чтения приведенного ниже примера должно быть достаточно, чтобы понять структуру такого файла.Вы можете использовать регулярные выражения, чтобы назначить один и тот же контекст безопасности нескольким файлам или даже всему дереву каталогов.

Пример 14.2. example.fc file

 # исполняемый файл myapp будет иметь:
# label: system_u: object_r: myapp_exec_t
# Чувствительность MLS: s0
# Категории MCS: <нет>

/ usr / sbin / myapp - gen_context (system_u: object_r: myapp_exec_t, s0)
 
14.5.4.2. Запись файла .if

В приведенном ниже примере первый интерфейс (« myapp_domtrans ») управляет тем, кто может выполнять приложение.Второй (« myapp_read_log ») предоставляет права на чтение файлов журнала приложения.

Каждый интерфейс должен генерировать действительный набор правил, который может быть встроен в файл .te . Таким образом, вы должны объявить все типы, которые вы используете (с макросом gen_require ), и использовать стандартные директивы для предоставления прав. Однако обратите внимание, что вы можете использовать интерфейсы, предоставляемые другими модулями. В следующем разделе дается больше объяснений о том, как выражать эти права.

Пример 14.3. example.if File

 ##  Пример политики Myapp 
## 
## 

## Более подробный текст о myapp. Тег ## может также использовать

,

    и
      ## HTML-теги для форматирования. ##

      ##

      ## Эта политика поддерживает следующие функции myapp: ##

        ##
      • Функция A
      • ##
      • Функция B
      • ##
      • Функция C
      • ##
      ##

      ## # ###################################### ## <резюме> ## Выполните переход домена для запуска myapp.## ## ## Домен разрешен для перехода. ## # интерфейс (`myapp_domtrans ',` gen_require (` введите myapp_t, myapp_exec_t; ') domtrans_pattern ($ 1, myapp_exec_t, myapp_t) ') ###################################### ## <резюме> ## Прочтите файлы журнала myapp. ## ## ## Домен, которому разрешено читать файлы журнала. ## # интерфейс (`myapp_read_log ',` gen_require (` введите myapp_log_t; ') logging_search_logs (1 доллар США) разрешить $ 1 myapp_log_t: file r_file_perms; ')
14.5.4.3. Запись файла .te

Взгляните на файл example.te :

 policy_module (myapp, 1.0.0)

######################################
#
# Объявления
#

введите myapp_t;
введите myapp_exec_t;
domain_type (myapp_t)
файл_ентри_домена (myapp_t, myapp_exec_t)

введите myapp_log_t;
logging_log_file (myapp_log_t)

введите myapp_tmp_t;
files_tmp_file (myapp_tmp_t)

######################################
#
# Локальная политика Myapp
#

разрешить myapp_t myapp_log_t: файл {read_file_perms append_file_perms};

разрешить myapp_t myapp_tmp_t: file manage_file_perms;
files_tmp_filetrans (myapp_t, myapp_tmp_t, файл)
 

Модуль должен быть идентифицирован по его имени и номеру версии.Эта директива обязательна.

Если модуль вводит новые типы, он должен объявить их с помощью таких директив. Не бойтесь создавать столько типов, сколько требуется, вместо того, чтобы предоставлять слишком много бесполезных прав.

Эти интерфейсы определяют тип myapp_t как домен процесса, который должен использоваться любым исполняемым файлом с меткой myapp_exec_t .Неявно это добавляет к этим объектам атрибут exec_type , который, в свою очередь, позволяет другим модулям предоставлять права на выполнение этих программ: например, модуль userdomain разрешает процессы с доменами user_t , staff_t и sysadm_t , чтобы их казнить. Домены других ограниченных приложений не будут иметь права на их выполнение, если правила не предоставят им аналогичные права (например, в случае dpkg с его доменом dpkg_t ).

logging_log_file — это интерфейс, предоставляемый справочной политикой. Это указывает на то, что файлы, помеченные данным типом, являются файлами журналов, для которых должны применяться соответствующие правила (например, предоставление прав logrotate , чтобы он мог ими манипулировать).

Директива allow — это базовая директива, используемая для авторизации операции.Первый параметр — это домен процесса, в котором разрешено выполнение операции. Второй определяет объект, которым может управлять процесс предыдущего домена. Этот параметр имеет вид « тип : класс », где тип — его тип SELinux, а класс описывает природу объекта (файл, каталог, сокет, FIFO и т. Д.). Наконец, последний параметр описывает разрешения (разрешенные операции).

Полномочия определяются как набор разрешенных операций и соответствуют этому шаблону: { operation1 operation2 } .Однако вы также можете использовать макросы, представляющие наиболее полезные разрешения. /usr/share/selinux/devel/include/support/obj_perm_sets.spt перечисляет их.

На следующей веб-странице представлен относительно исчерпывающий список классов объектов и разрешений, которые могут быть предоставлены.

Теперь вам просто нужно найти минимальный набор правил, необходимых для правильной работы целевого приложения или службы. Чтобы достичь этого, вы должны хорошо знать, как работает приложение и какие данные оно управляет и / или генерирует.

Однако возможен эмпирический подход. После того, как соответствующие объекты правильно помечены, вы можете использовать приложение в разрешающем режиме: операции, которые были бы запрещены, регистрируются, но все равно успешны. Теперь, проанализировав журналы, вы можете определить, какие операции разрешить. Вот пример такой записи в журнале:

 avc: denied {read write} для pid = 1876 comm = "syslogd" name = "xconsole" dev = tmpfs ino = 5510 scontext = system_u: system_r: syslogd_t: s0 tcontext = system_u: object_r: device_t: s0 tclass = fifo_file разрешающий = 1
 

Чтобы лучше понять это сообщение, давайте изучим его по частям.

Таблица 14.1. Анализ трассировки SELinux

Сообщение Описание
avc: denied Операция запрещена.
{чтение и запись} Для этой операции требовались разрешения на чтение и на запись .
pid = 1876 Процесс с PID 1876 выполнил операцию (или попытался ее выполнить).
comm = "syslogd" Процесс был экземпляром программы syslogd .
name = "xconsole" Целевой объект был назван xconsole . Иногда вы также можете использовать переменную «путь» с полным путем.
dev = tmpfs Устройство, на котором размещен целевой объект, — это tmpfs (файловая система в памяти). На реальном диске вы можете увидеть раздел, на котором размещен объект (например, «sda3»).
ino = 5510 Объект идентифицируется номером inode 5510.
scontext = system_u: system_r: syslogd_t: s0 Это контекст безопасности процесса, выполнившего операцию .
tcontext = system_u: object_r: device_t: s0 Это контекст безопасности целевого объекта.
tclass = fifo_file Целевой объект — файл FIFO.

Наблюдая за этой записью в журнале, можно создать правило, разрешающее эту операцию. Например, разрешить syslogd_t device_t: fifo_file {читать запись} . Этот процесс можно автоматизировать, и это именно то, что предлагает команда audit2allow (из пакета policycoreutils). Этот подход полезен только в том случае, если различные объекты уже правильно помечены в соответствии с тем, что должно быть ограничено. В любом случае вам нужно будет внимательно просмотреть сгенерированные правила и проверить их в соответствии с вашими знаниями о приложении.По сути, такой подход дает больше прав, чем действительно требуется. Правильным решением часто является создание новых типов и предоставление прав только на эти типы. Также бывает, что запрещенная операция не фатальна для приложения, и в этом случае может быть лучше просто добавить правило « dontaudit », чтобы избежать записи в журнал, несмотря на действующий отказ.

14.5.4.4. Компиляция файлов

После того, как 3 файла ( example.if , example.fc и example.te ) соответствуют вашим ожиданиям от новых правил, переименуйте их в myapp. extension и запустите make NAME = devel , чтобы сгенерировать модуль в файле myapp.pp (вы можете сразу загрузить его с помощью semodule -i myapp.pp ). Если определено несколько модулей, make создаст все соответствующие файлы .pp .

.

Как включить SELinux в Debian «Stretch» ​​9 — Давид Джунчи

Рассел Кокер объявил об этом в феврале, а три дня назад это действительно произошло: GNU / Linux Debian версии 9.0 с кодовым именем «Stretch» ​​отсутствует и поддерживает SELinux!

Когда вы устанавливаете Debian 9.0, SELinux не устанавливается по умолчанию, чтобы установить и включить его, вы можете выполнить несколько простых шагов:

Войдите в систему с правами root на вашем хосте debian, затем установите базовые утилиты selinux и auditd (это полезно для отладки нарушений SELinux):

# apt-get install selinux-basic auditd

Теперь вам нужно изменить конфигурацию grub, чтобы включить selinux при каждой загрузке.

# selinux-activate

Активация SE Linux
Создание файла конфигурации grub…
Обнаружен образ Linux: / boot / vmlinuz-4.9.0-3-amd64
Обнаружен образ initrd: /boot/initrd.img-4.9.0-3-amd64
done
SE Linux активирован. Возможно, вам потребуется перезагрузка сейчас.

Эта команда создаст файл «/.autorelabel», который проинструктирует систему выполнить полную перемаркировку файловой системы selinux при следующей загрузке.

Теперь можно перезагрузить систему:

# перезагрузка

Подождите несколько минут, чтобы произошла надежная работа, затем вы можете войти в свою систему и проверить, включен ли SELinux

# sestatus

Статус SELinux: включен
SELinuxfs mount: / sys / fs / selinux
Корневой каталог SELinux: / etc / selinux
Имя загруженной политики: по умолчанию
Текущий режим: принудительный режим
из файла конфигурации: разрешающий
MLS политик статус: включен
Политика deny_unknown статус: разрешен
Максимальная версия политики ядра: 30

Как вы можете прочитать, SELinux включен в разрешающем режиме, в этом режиме вы можете использовать SELinux по своему усмотрению, но он ничего не будет блокировать, он будет только регистрировать свою активность, чтобы вы могли протестировать ее, не повреждая систему или не блокируя любую активность.

Обратите внимание, что в то время, когда я пишу эту статью, selinux на debian будет регистрировать много отказов, даже с конфигурацией по умолчанию и без какой-либо конкретной активности пользователя, поэтому на самом деле я советует вам включить selinux на debian только для тестирование и в разрешающем режиме .

Я напишу другие сообщения об использовании SELinux, советы и т. Д.

.

Как отключить SELinux в Ubuntu Server / Desktop

В этом руководстве я объясню, как настроить SELinux в операционной системе Ubuntu. SELinux или Security Enhanced Linux — это дополнительный уровень служб безопасности поверх стандартного механизма Linux DAC, обеспечивающий дополнительную защиту вашей операционной системы Linux, запрещая все, что не было специально разрешено.

Security Enhanced Linux — это реализация механизма обязательного контроля доступа ядра Linux.Обязательный контроль доступа — это дополнительный уровень безопасности, добавленный к стандартному дискреционному контролю доступа (разрешения на основе пользователей / групп).

Несмотря на то, что он был добавлен для обеспечения дополнительной безопасности операционной системы Linux, большинство администраторов предпочитают отключать SELinux, потому что без правильной настройки некоторые приложения не будут работать, когда SELinux включен.

Итак, как нам отключить SELinux в Ubuntu?

Нет необходимости. SELinux не установлен по умолчанию в Ubuntu.Security Enhanced Linux в основном используется дистрибутивами Linux на основе Red Hat, включая Red Hat Enterprise Linux, CentOS и Fedora.

Дистрибутивы на основе Debian

, включая Ubuntu, по умолчанию не поставляют SELinux, вместо этого они используют систему под названием AppArmor для обязательного контроля доступа (AppArmor по умолчанию отключен в Ubuntu).

Установите SELinux на Ubuntu

Следующие шаги описывают, как установить и настроить SELinux в Ubuntu / Debian.

  1. Установите selinux-policy-default и связанные пакеты:

      sudo apt-get update
    sudo apt-get install selinux-basics selinux-policy-default auditd  

    .

  2. Запустите команду selinux-activate:

      судо selinux-активировать  
  3. Откройте файл / etc / default / rcS и установите FSCKFIX = yes:

      FSCKFIX = да  
  4. Перезагрузите компьютер (перезагрузка займет некоторое время):

      sudo systemctl перезагрузка  

После перезагрузки системы запустите команду check-selinux-installation, чтобы убедиться, что установка прошла успешно.

Включение и отключение SELinux в Ubuntu

По умолчанию SELinux в Ubuntu работает в разрешающем режиме. Чтобы включить SELinux, откройте файл / etc / selinux / config и установите SELINUX = enforcing:

  SELINUX = принудительное применение  

Затем сохраните файл конфигурации и перезагрузите компьютер:

  sudo systemctl перезагрузка  

Если вы хотите навсегда отключить SELinux, установите SELINUX = disabled и перезагрузите компьютер.

Вам необходимо перезапускать систему Ubuntu каждый раз, когда вы постоянно переключаетесь между принудительным и отключенным режимами.

Чтобы просмотреть статус SELinux в Ubuntu, введите:

  состояние  

Чтобы проверить текущий режим работы, введите:

  getenforce  

Запустите команду setenforce, чтобы переключиться между принудительным и разрешающим режимами без перезагрузки компьютера (принудительное = 1, разрешающее = 0).

  setenforce 0  

Сводка

  • SELinux — это усовершенствованная система безопасности для ядра Linux. Первоначально она была разработана Управлением информационной безопасности Агентства национальной безопасности в качестве усовершенствования системы безопасности Linux.
  • Если вы используете CentOS, Fedora или RHEL, SELinux включен по умолчанию.
  • Apparmor — это способ по умолчанию для реализации обязательного контроля доступа в дистрибутивах Linux на основе Debian / Ubuntu.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *