Служба selinux в командной строке. Настройка SELinux, включение, отключение

SELinux (англ. Security-Enhanced Linux — Linux с улучшенной безопасностью) — реализация системы принудительного контроля доступа, которая может работать параллельно с классической дискреционной системой контроля доступа. Входит в стандартное ядро Linux. Также для функционирования SELinux требуются модифицированные версии некоторых утилит (ps, ls, и тд), которые обеспечивают поддержку новых функций ядра, и поддержка со стороны файловой системы.

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

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

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

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

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

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

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

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

# cat /boot/grub/grub.conf 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 selinux=0 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 selinux=0 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 httpd_disable_trans=1 httpd_enable_cgi=1 httpd_enable_homedirs=1 httpd_ssi_exec=1 httpd_tty_comm=0 httpd_unified=1 Установите переменную также используя команду setsebool. После этого перезапустите httpd для вступления изменений в силу.

# setsebool httpd_disable_trans 1 # service httpd restart

В версии Android 5.0 Lollipop компания Google по умолчанию активировала функцию SeLinux по умолчанию, что сильно усложнило возможность модификацию системного раздела! Как отключить? Читайте на !

Для тех кто любит модифицировать прошивку или необходимо встроить приложение компания Google крепко постаралась чтобы этого недопустить — активирована технология selinux , которая «ломает» файлы которые попадают в системный раздел, а также заимствованная у Samsung и модифицированная система безопасности на основе Knox . Все это создано для того чтобы мы простые пользователи не могли изменять системный раздел! Пора это исправить!

Что необходимо чтобы отключить защиту в Android?

1. Компьютер с ОС UBUNTU

2. Ядро boot.img от вашего смартфона или планшета Android

Инструкция как в ядре Android отключить защиту

Подготовка

Установим пакет встраивающий открытие терминала в файловом менеджере

1. Открываем терминал и вводим следующую команду

Для 32х разрядных систем:

sudo apt-get install nautilus-open-terminal:i386

Для 64х разрядных систем:

sudo apt-get install nautilus-open-terminal

2. После чего выполнить команду перезапуска файлового менеджера

3. Установить пакет необходимый для работы с ядром Android

sudo apt-get install abootimg

Работа с ядром

1. Создайте в папке home (Домашняя папка) папку с любым удобным именем и переместите туда ядро Android — boot.img . (В примере будет указана папка kernel)

2. Перейдите в папку kernel , в любом пустом месте нажмите правую кнопку мыши и выбрать «Открыть в терминале»

3. В открывшемся терминале введите команду:

abootimg -x boot.img

После чего в папке kernel вы увидите что появились новые папке (ядро распаковано)

4. Создадим новую папку (назовем ее rw ) внутри папки kernel , в терминале пишем

5. Пишем команду в терминале для дальнейшей распаковки раздела initrd.img

zcat ../initrd.img | cpio -i

6. После чего в папке rw вы обнаружите множество файлов

7. Найдите и откройте файл default.prop

8. В файле измените строку

и сохраните файл и выйдете с него

9. В терминале выполняем сборку файла initrd.img, пишем команду

find . | cpio -o -H newc | gzip > ../initrd.img

10. Возвращаемся обратно в папку kernel, для этого в терминале пишем

11. Собираем ядро Android с внесенными изменениями

abootimg --create boot.img -k zImage -r initrd.img

и после еще одну команду

abootimg --create boot.img -f bootimg.cfg -k zImage -r initrd.img

Ядро Android с поддержкой init.d собрано! Далее вам необходимо прошить!

На этом все! Оставайтесь с и подписывайтесь в социальные группы! Дальше будет интересней!

О SELinux написано довольно много, но у большинства этих материалов есть два недостатка. Либо это короткие практические советы как сделать что-то конкретное, но без объяснений того как это устроено и работает. А если статья (или глава в книге) описывает теоретические вопросы, то как-то длинно и запутанно.

Поэтому я и предпринял попытку кратко и доступно описать что такое SELinux. Доступно для тех, кто еще не сталкивался с системами безопасности. В силу стремления к краткости некоторые аспекты я пропустил, для того чтобы не перегружать - в этой статье только самая суть. В частности я не буду тут описывать что из себя представляет "старая" система безопасности Linux - DAC (discretionary access control, избирательное управление доступом). Или в чем отличия между DAC, MAC и RBAC. Желающие, могут об этом почитать например в википедии.

Что такое SELinux?

SELinux (Security Enhanced Linux) это система безопасности основанная на моделях мандатного и ролевого доступа. Была разработана в начале нулевых (2000-х) годов для того, чтобы исправить недостатки традиционной системы безопасности UNIX (DAC). SELinux реализована как компонент ядра Linux начиная с версии ядра 2.6. То есть SELinux можно использовать в любом дистрибутиве Linux с ядром 2.6 или более поздним. Конечно не во всех дистрибутивах использование SELinux облегчено до максимума, но в принципе можно установить почти в любом.

В нескольких дистрибутивах SELinux устанавливается "из коробки" - это RHEL, CentOS, Fedora. Так, что для реального использования нужно только перевести SELinux в режим enforced. Еще в нескольких дистрибутивах SELinux включен в репозитарий, так что его установка дело нескольких минут - например Debian, Ubuntu. В этих дистрибутивах SELinux устанавливается одной командой "sudo apt-get install selinux " с последующей перезагрузкой.

SELinux и DAC

SELinux работает "после" DAC. То есть операции, запрещенные в DAC не могут быть разрешены в SELinux.
Иными словами SELinux дополняет и конкретизирует действия разрешенные через DAC. При этом SELinux работает независимо от DAC.

Субъекты и объекты

Когда говорят о SELinux всегда упоминаются субъекты и объекты. То есть SELinux это разрешения и запреты которые применяются в действиях между субъектами и объектами.

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

Объекты это то, над чем действия выполняются. Чаще всего под объектами подразумеваются файлы данных. Но это могут быть и устройства и даже программы. Пример:
cat /var/log/syslog | grep SELinux
в этой команде программа grep объект для программы cat . И соответственно программа cat субъект по отношению к программе grep.

Как включить или выключить SELinux

Включение или выключение SELinux выполняется командой selinuxenabled с параметром 1 (включить SELinux) или 0 (выключить SELinux). Если нужно чтобы SELinux был включен/выключен при запуске системы, тогда редактировать файл /etc/selinux/config (параметр SELinux=disable).

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

Permissive - разрешается нарушение политики безопасности. Такие нарушения только регистрируются в системном журнале. То есть по сути SELinux не работает, а только лишь фиксирует нарушения политики безопасности.

Enforced - нарушения политики безопасности блокируются. SELinux работает полностью.

Переключение режимов работы выполняется командой setenforce с параметром 1 (включить enforced) или 0 (включить permissive). Но если нужно чтобы режим работы устанавливался сразу при загрузке системы, тогда редактировать файл /etc/selinux/config (параметр SELinux=) который может принимать одно из трех значений - permissive, enforced, disable (SELinux отключен).

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

Журналирование SELinux (аудит)

  • настройка auditallow - журналировать события.
  • настройка dontaudit - не журналировать события.

Логика работы:

  • если операция allow, то она журналируется лишь в случае auditallow;
  • если операция disallow, то она НЕ журналируется лишь в случае dontaudit.

Контекст безопасности (метка, label) SELinux

Это набор данных состоящий из:

  1. типа пользователя
  2. типа данных или домена процесса
  3. уровней и категорий (используется только в специальных политиках MLS/MCS, в общих политиках эти значения установлены в полный доступ)

Контекст безопасности записывается в атрибуты файла (в файловой системе) и создается при установке SELinux (операция labeling). Уже присвоенный контекст безопасности может быть впоследствии изменен - операция transition.

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

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

Узнать контексты SELinux можно используя стандартные команды с ключом -Z:

  • ps -eZ [| gerp имя_программы] : контекст SELinux для работающих программ (или для конкретной программы).
  • ls -Z : контекст SELinux для файлов.
  • id -Z : контекст SELinux для текущего пользователя.

Пользователь SELinux

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

Роль

Перечень разрешенных действий. Возможен переход из одной роли в другую, для изменения полномочий. При этом идентичность пользователя не изменяется (в отличии от команд su/sudo). Роли не совмещаются, они заменяют одна другую.

Политика безопасности определяет допустимые переходы из одной роли в другую. То есть невозможно перейти из любой роли в любую роль. Поскольку роли всегда связаны с типами (доменами), то часто говорят не о смене ролей, а о смене домена (Domain Transition).

Типы (домены) SELinux

Также известны как SELinux sandbox. Объединяют субъекты и объекты в группы, внутри этих групп определяют разрешенные действия субъектов над объектами. Для субъектов вместо термина тип используется термин домен.
Упрощенно можно сказать так:
тип SELinux - для данных;
домен SELinux - для процессов.
В SELinux, в общих политиках, используется механизм принудительного присвоения типов - Type Enforcement. То есть каждый объект и субъект должен быть обязательно приведен к какому-либо типу (или домену).

Политика SELinux (SELinux Policy)

Совокупность всех описанных в системе соотношений пользователь - роль - тип (домен) - уровень и категория. Все типы пользователей, все роли, все типы/домены. Используется два типа политик:

  • Type Enforcment (TE) - Roles Based Access Control (RBAC). Targeted и strict - наиболее широко используемые TE - RBAC политики SELinux.
  • Bell-La Padula Model Multi-Level Security (MLS) - Multi-Category Security (MCS).

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

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

Политика MLS/MCS

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

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

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

Эту особенность нужно понимать при присвоении меток уровней доступа.

Помимо уровней, доступ дополнительно регулируется категориями. Субъект не имеющий права доступа к категории "ВМС", не может получить доступ к данным которые имеют метку этой категории. Даже если этот субъект имеет самый высокий уровень доступа.
В контексте SELinux запись об уровнях и категориях выглядит так: "s0-s0:c0.c1023 " где "s0-s0 " допустимые уровни, а "c0.c1023 " допустимые категории. Конкретно такая запись - "s0-s0:c0.c1023 " означает высший уровень доступа к любой категории объектов.

Эта часть контекста используется только в специальных политиках MLS/MCS. В общих политиках типа targeted или strict эта часть контекста просто установлена в максимальный уровень разрешений и таким образом не влияет на доступ.

Резюме

Максимальную защиту SELinux дает когда переключен в режим enforced и при этом используется политика strict или политика MLS/MCS.

Если SELinux работает в режиме permissive, то фактически никакой защиты нет - только лишь фиксируются нарушения текущей политики.

Если SELinux переключен в режим enforced, но используется политика targeted, то защита осуществляется только применительно к "известным" программам, для которых в политике определены разрешения и запреты. "Неизвестная" программа фактически имеет административные привилегии.

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

Если вам оказалась полезна или просто понравилась эта статья, тогда не стесняйтесь - поддержите материально автора. Это легко сделать закинув денежек на Яндекс Кошелек № 410011416229354 . Или на телефон +7 918-16-26-331 .

Даже небольшая сумма может помочь написанию новых статей:)

Сопутствующие статьи

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

Статус SELinux

Команды /usr/sbin/getenforce и /usr/sbin/sestatus используются для проверки текущего статуса SELinux. Команда getenforce возвращает значение Enforcing , Permissive , или Disabled . Команда getenforce возвращает Enforcing когда SELinux активирован (правила политики SELinux принудительные):

# /usr/sbin/getenforce Enforcing

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

Команда sestatus возвращает статус SELinux и используемой политики SELinux:

# /usr/sbin/sestatus

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

Управление SELinux

В операционных системах с отключенным SELinux, сконфигурирована опция SELINUX=disabled в /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

Также, команда getenforce возвращает значение Disabled :

# /usr/sbin/getenforce Disabled

Для включения SELinux:

Если это не так, то выполните команду от root пользователя для исправления ошибок в отображениях пользователей. Безопаснее проигнорировать предупреждения SELinux-user username is already defined , если они появляются, где username может быть unconfined_u , guest_u , или xguest_u.

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

Как временно отключить-деактивировать SELinux

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

# getenforce Enforcing #

Использование другого метода командой, которая приводит к тому же:

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

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

# echo 0 > /selinux/enforce

Другой метод

# setenforce 0

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

# setenforce Permissive

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

Как отключить-отключить SELinux навсегда

Для того, чтобы отключить его навсегда, измените значение параметра “SELinux ” на “disabled ” в файле “/etc/sysconfig/SELinux “, как показано ниже

Наконец перепроверьте с помощью команды ниже:

# sestatus SELinux status: disabled