Как включить selinux на Android

Обновлено: 24.09.2022

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

Мы не несем ответственности за любые убытки, возникшие в результате следования этой статье. на момент написания эти шаги работали нормально для тестового телефона Android, который мы использовали, и мы смогли успешно изменить selinux с помощью пользовательского ядра.

Как мы уже упоминали в этой статье, пользовательские ядра доступны не для всех версий всех когда-либо созданных телефонов Android. однако популярные телефоны должны быть защищены. Всегда заботьтесь и делайте резервную копию устройства на всех этапах и правильно выбирайте ядро ​​для номера модели андроида телефона, с которым вы работаете.

Изменение SELinux с принудительного на разрешающий не будет работать на телефонах Samsung Android с включенным Samsung Knox, а также может не работать на других телефонах Android других производителей в зависимости от установленной версии ОС Sndroid.

Что такое SELinux?

SELinux или Linux с повышенной безопасностью – это модуль ОС Android, предназначенный для выявления и устранения критических брешей в системе безопасности операционной системы Android. Он используется для защиты операционной системы Android от вредоносного кода или программ, устанавливаемых и наносящих ущерб телефону.

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

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

Как SELinux влияет на приложения?

Когда компания Samsung выпустила ОС Android 4.3, они изменили параметр SELinux с Permissive, который нужен многим приложениям, на Enforced, что означает, что хотя большинство приложений будут работать, некоторые функции не будут работать.

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

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

Как проверить настройки SELinux

На телефоне выберите «Настройки» > «Дополнительно» > «Об устройстве», а затем прокрутите вниз, где вы увидите статус SE для Android

Легко изменить режим Android SELinux на Permissive

В Play Store есть программа (ссылка ниже), которая может изменить режим SELinux на телефонах с Android, отличных от Samsung, и на телефонах Samsung с Android под управлением ОС 4.4.2 и ниже, но все, что выше этого, и программное обеспечение не будет работать — мы упоминать о проблемах с OS 4.3 и выше здесь

Все, что вам нужно сделать, это загрузить приложение на телефон Android, запустить его и нажать кнопку "Разрешить". больше не работает.

  • Загрузите и установите SELinux Mode Changer из Play Store на свой телефон.
  • Запустите приложение и установите для SELinux режим Permissive
  • Перезагрузите телефон
  • Проверьте статус SELinux в меню "Об устройстве", чтобы узнать, не изменился ли он. Примечание. Этот процесс не только понизит версию ОС, но и УДАЛИТ ВСЕ ДАННЫЕ С ТЕЛЕФОНА.

Не сработало? | Установите собственное ядро

Один из способов обойти режим Enforced для SELinux – изменить ядро ​​на отредактированное, чтобы для SELinux был установлен режим Permissive, что теоретически должно позволить вашим приложениям или FlexiSPY работать в полном режиме.

Эти ядра могут не существовать или их может быть трудно найти для каждого телефона Android.

Любой телефон Android, а не только Samsung, чей статус SELinux установлен на Permissive, может запускать FlexiSPY в ПОЛНОМ РЕЖИМЕ.

Прежде всего вам нужно выяснить, настроен ли SELinux на вашем Android-телефоне на разрешающий или нет, как мы объясняли ранее.

SELinux не всегда можно так легко изменить в зависимости от марки и режима телефона Android.

И именно поэтому мы должны установить специальное ядро, если приложение SELinux Mode Changer не может решить проблему.

Обратите внимание, что пользовательские ядра с разрешенным параметром selinux доступны не для всех телефонов Android, независимо от того, произведены они Samsung или нет.

Где можно скачать кастомное ядро?

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

Лучшее место для поиска кастомных ядер — это форум XDA Developers.

Как я могу установить пользовательское ядро, в котором SELinux настроен на разрешающий?

В этом примере мы используем Samsung Galaxy S4, поэтому для начала мы идем на форумы XDA.

Первое, что нужно сделать, это ввести модель телефона Android.

Скриншот страницы xda, на которой вы ищете свою модель телефона

Убедитесь, что вы выбрали правильный телефон из списка, так как многие одинаковые телефоны Android имеют варианты для разных стран с разными номерами моделей.

Вы можете найти номер модели для поиска на телефоне Android, перейдя в меню «Об устройстве» (также может называться «О телефоне»), и он будет указан в списке.

Например, номер модели нашего Samsung Galaxy S4 — GT-I9505, так что это то, что нам нужно для нашего пользовательского ядра.

После того, как вы введете номер модели для поиска, вы попадете на главную страницу этого телефона Android.

Нам нужно специальное ядро, поэтому мы открываем вкладку "Ядра".

Снимок экрана вкладка ядра xda

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

Для нашей версии Samsung Galaxy S4 мы нашли его довольно легко.

скриншот ядра SELinux с активным разрешительным состоянием

Как вы можете видеть, он соответствует номеру модели нашего Samsung Galaxy S4, имеет разрешающий режим SELinux и работает на ОС Android 4.3.

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

Руководство по установке пользовательского ядра

Первое, что нужно сделать, это полностью создать резервную копию телефона. Это жизненно важно. В этой статье мы объясним, как полностью сделать резервную копию телефона Android.

После того, как вы полностью создали резервную копию телефона, загрузите файл ROM отсюда.

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

Теперь, когда вы создали резервную копию телефона Android и рутировали его для установки восстановления Clockworkmod, пришло время установить настроенное ядро.

Сначала вам нужно подключить телефон Android к компьютеру.

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

  1. Убедитесь, что телефон Android полностью выключен.
  2. Удерживайте нажатыми кнопку увеличения громкости, кнопку "Домой" и питание, пока не появится номер модели.
  3. Отпустите комбинацию клавиш, и восстановление Clockworkmod должно загрузиться.
  4. Из списка вариантов выберите «Установить ZIP-файл с SD-карты».
  5. Перейдите к ZIP-файлу ядра, скопированному на телефон, и выберите его.
  6. Установите ядро ​​и дождитесь его завершения.
  7. Выберите «Перезагрузить систему сейчас», чтобы перезагрузить телефон.

Теперь, когда вы установили собственное ядро ​​и перезагрузили телефон, пришло время проверить состояние SELinux.

скриншот раздел о телефоне, который показывает новый статус SELinux

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

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

Чтобы включить SELinux, интегрируйте последнюю версию ядра Android, а затем включите файлы из каталога system/sepolicy.При компиляции эти файлы включают политику безопасности ядра SELinux и охватывают вышестоящую операционную систему Android.

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

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

  1. Нам нужно изменить статус службы в файле /etc/selinux/config. …
  2. Теперь вы можете изменить режим SELinux на принудительный или разрешительный. …
  3. Затем нажмите CTRL + X, чтобы сохранить изменения и выйти из режима редактирования. …
  4. Для перезагрузки введите: sudo reboot.

Как изменить режим SELinux на Android?

Легко изменить режим Android SELinux на Permissive

  1. Загрузите и установите SELinux Mode Changer из Play Store на свой телефон.
  2. Запустите приложение и установите для SELinux значение Permissive.
  3. Перезагрузите телефон.
  4. Проверьте статус SELinux в меню "Об устройстве", чтобы узнать, не изменился ли он.

Включен ли SELinux?

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

Что произойдет, если SELinux отключен?

И да, отключение функций безопасности, например отключение SELinux, позволит запустить программное обеспечение. … Для тех, кто не использует Linux, SELinux — это улучшение безопасности, поддерживающее принудительный контроль доступа. Поддержка SELinux может принимать форму любого количества дистрибутивов Linux, например Red Hat Enterprise Linux (RHEL).

Как включить разрешающую способность SELinux?

<р>2.2. Переход в разрешающий режим

Как включить SELinux без перезагрузки?

  1. Изменение режима SELinux во время выполнения. Если SELinux отключен, его нельзя включить без перезагрузки. …
  2. Чтобы определить текущий режим SELinux. В командной строке используйте следующие команды: …
  3. Постоянное изменение режима SELinux. В файле /boot/grub/grub.conf добавьте строку: selinux=0.
  4. Или измените /etc/sysconfig/selinux.

Как изменить режим SELinux?

Как изменить режим SELinux на Android с помощью приложения SELinux Switch

  1. Шаг 1. Установите приложение «SELinux Switch». Чтобы изменить режим SELinux и установить SELinux Permissive, вам сначала нужно загрузить и установить приложение «SELinux Switch». …
  2. Шаг 2. Установите разрешение SELinux с помощью приложения.

Разрешительный SELinux опасен?

В Android 5.0 и более поздних версиях SELinux полностью реализован на основе разрешенного выпуска Android 4.3 и частичного применения Android 4.4.

Как исправить разрешения SELinux?

restorecon означает восстановление контекста SELinux. Команда restorecon сбросит контекст безопасности SELinux для файлов и каталогов до значений по умолчанию. Это приведет только к сбросу атрибута типа контекста SELinux.

Для чего используется SELinux?

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

Включен ли SELinux в Ubuntu?

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

Каковы 3 разные политики SELinux?

вот краткий обзор каждого из них:

  • целевые – этот тип политик используется чаще всего во всем мире.
  • минимум — это урезанная версия целевой политики. …
  • mls — это гораздо более усовершенствованная версия таргетинга, которая иногда используется правительствами.

Почему SELinux отключен в Hadoop?

Одной из распространенных причин отключения брандмауэра является то, что HDFS поддерживает репликацию в разных узлах/стойках, но для этого не требуется дополнительного времени. Установка брандмауэра с использованием SElinux может нарушить это (или) привести к проблемам с производительностью. Поэтому общая рекомендация — отключить брандмауэр.

Что такое Sepolicy в Android?

В Android 8.0 политика SELinux разделена на компоненты платформы и поставщика, что позволяет обновлять политику независимой платформы/поставщика при сохранении совместимости. Разделение политики платформы дополнительно разделено на частную и общедоступную части платформы для экспорта определенных типов и атрибутов авторам политик поставщиков.

 Установить разрешение SELinux на Android

Изменение режима SELinux на вашем устройстве Android больше не проблема.В этом руководстве мы покажем вам, как легко настроить SELinux Permissive на устройстве Android с корневым доступом с помощью приложения SELinux Switch.

Что такое SELinux? — Security-Enhanced Linux, сокращенно «SELinux» — это модуль безопасности в ядре Linux. Он обеспечивает безопасный механизм для регулирования политик безопасности управления доступом. Говоря простым языком, это мера безопасности, которая ограничивает объем и тип информации, к которой могут получить доступ пользовательские программы/приложения в случае Android.

SELinux был представлен широкой публике с Android 4.3, который тогда можно было легко переключать в настройках. Позже, в Android 4.4 KitKat, статус SELinux был навсегда изменен с «Разрешающий» на «Принудительный». Теперь, если вы хотите установить SELinux Permissive (изменить режим SELinux) на устройствах Android, вы должны прочитать инструкции ниже.

Установите разрешение SELinux с помощью переключателя SELinux

SELinux Switch – это служебное приложение для опытных пользователей Android, помогающее переключать режим SELinux на своих устройствах. Поскольку Android изначально поставляется с SELinux Enforcing, вы можете использовать этот простой, но очень эффективный инструмент/приложение для установки SELinux Permissive. Он был разработан старшим членом XDA — Ибупрофеном, который ранее представил общественности SELinuxToggler.

Почему новое приложение? SELinuxToggler был самодостаточен и хорошо справлялся со своей задачей.

Основной причиной создания нового приложения было то, что SELinuxToggler использовал то же имя пакета (com.mrbmic.selinux), что и SELinuxModeChanger (разработано MrBIMC). И теперь, поскольку последний больше не находится в стадии активной разработки, Ибупрофен решил поддержать сообщество своей собственной работой с нуля.

В последнее время разработчик потратил много времени на обновление приложения и обеспечение его совместимости с последними версиями Android, включая Android Pie.

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

Зачем менять режим SELinux на Permissive?

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

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

Если одно из ваших любимых корневых приложений не работает должным образом или не работает, вы можете настроить SELinux Permissive.

Как изменить режим SELinux на Android с помощью приложения SELinux Switch

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

Шаг 1. Установите приложение «SELinux Switch»

Чтобы изменить режим SELinux и установить разрешение SELinux, сначала необходимо загрузить и установить приложение «SELinux Switch». К сожалению, это приложение недоступно в Play Маркете.

Вы можете установить приложение двумя разными способами: вручную установив APK, что является самым простым. Или, прошив установщик zip через TWRP. Последний доступен в случае, если метод установки APK по какой-либо причине не работает.

Через APK

Для начала необходимо включить параметр «Неизвестные источники» (Nougat и более ранние версии) или «Установить неизвестные приложения» (Android Oreo и Android Pie) в настройках. Это необходимо, если вы устанавливаете приложение не из Play Store, а из других источников.

После включения этой опции загрузите последнюю версию APK «SELinux Switch»: ссылка для скачивания

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

Через TWRP (архив ZIP-архива)

Маловероятно, что установка APK завершится ошибкой. Но в случае сбоя вы можете установить приложение «SELinux Switch», запустив установочный файл *.zip.

Поэтому сначала загрузите ZIP-файл установщика (например, The.SELinux.Switch.ver.6.2.7.build.627.zip) и поместите его в хранилище вашего устройства. Затем перезагрузите устройство Android в режиме восстановления TWRP.

Set SELinux Permissive — установка SELinux Switch TWRP

Установите разрешение SELinux — установка SELinux Switch TWRP

После того, как ваше устройство находится в TWRP, нажмите кнопку «Установить». Затем просмотрите внутреннюю память / SD-карту вашего устройства и выберите ZIP-файл установщика. После выбора файла просто проведите пальцем по кнопке «Проведите, чтобы подтвердить вспышку» внизу.

Установка не займет больше нескольких секунд. По завершении нажмите кнопку «Перезагрузить систему».

Шаг 2. Установите разрешение SELinux с помощью приложения

Теперь, когда приложение установлено на вашем устройстве Android, вы можете легко использовать его для включения разрешительного режима SELinux. Итак, перейдите в панель приложений и запустите приложение SELinux Switch. Как только интерфейс запустится, вы увидите запрос на получение прав root. Обязательно предоставьте доступ.

 Установить разрешение SELinux — приложение SELinux Switch

Установить разрешение SELinux — приложение SELinux Switch

Теперь вы увидите экран приложения. Чтобы установить SELinux Permissive, просто нажмите кнопку «PERMISSIVE» один раз. Чтобы изменить режим обратно, вы можете просто запустить приложение в любое время и нажать кнопку «ПРИНЯТИЕ». Для дополнительного удобства вы также можете выбрать параметр «Выбрать для уведомления об изменении режима SELinux».

Вот оно! Вы легко установили приложение SELinux Switch на свой Android и использовали его для настройки SELinux Permissive. В конечном итоге это избавило вас от многих проблем с установкой измененных загрузочных сценариев или других обходных путей.

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

hero

SELinux — это дополнительная функция ядра Linux, обеспечивающая поддержку применения политик безопасности управления доступом для принудительного применения MAC-адресов. Он основан на платформе LSM.

История SELinux

SELinux изначально был разработан АНБ для демонстрации ценности MAC и того, как его можно применить к Linux. Он был объединен с Linux 2.6 в августе 2003 года. Red Hat и McAfee Corp. внесли значительный вклад в разработку SELinux. Позже АНБ возглавило отдельный проект под названием Security Enhancements (SE) for Android по интеграции SELinux в Android. В результате этого проекта SELinux стал основной частью Android. В Android 4.3 он был представлен по умолчанию в режиме Permissive, а в Android 4.4 – принудительно принудительном. Согласно требованиям CTS Google, этот режим должен быть принудительным в Android 5.0 и более поздних версиях.

Как работает SELinux?

SELinux может работать в двух режимах: принудительном и разрешительном. Режим по умолчанию — Принудительный.

В режиме Enforcing SELinux активно применяет заданную политику, которая указывает, что разрешено (разрешения в целом). Если инициатор хочет выполнить действие, SELinux проверит, разрешено ли ему это в установленной политике, и, если разрешено, разрешит выполнение запрошенного действия. В случае отказа он будет зарегистрирован в буфере журнала ядра вместе с logcat на Android.

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

Ниже приведен пример отказа SELinux, напечатанного в лог-каталоге Android:

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

Кратко о политике SELinux

Политика SELinux — это набор правил (разрешений), в которых указано, какие инициаторы могут выполнять какие действия. Если определенное действие, которое процесс хочет выполнить, явно не разрешено в установленной политике, SELinux отклонит его. Поэтому на производственных устройствах крайне важно иметь полный набор правил в политике SELinux, чтобы избежать поломок/ошибок из-за отказов SELinux. При этом SELinux также должен быть максимально строгим. Хорошее эмпирическое правило, которое следует помнить при написании политики SELinux: «Если это не сломано, не чините это».

По умолчанию Android предоставляет политику SELinux для компонентов, характерных для платформы AOSP. Вы можете найти их в репозитории platform/system/sepolicy AOSP. Поставщики нижнего уровня, модифицирующие AOSP и добавляющие дополнительные функции, должны написать свои собственные политики SELinux.Например, Qualcomm предоставляет sepolicy для устройств, использующих свои SoC, в репозитории device/qcom/sepolicy CAF (форум Code Aurora). LineageOS предоставляет разработчикам sepolicy для своих дополнений/функций в AOSP в репозитории устройства/lineage/sepolicy, размещенном в организации LineageOS GitHub.

Все эти различные правила политики SELinux скомпилированы вместе для создания политики SELinux для разделов устройств. Например, правила политики SELinux, относящиеся к системному разделу, попадут в образ системы, правила, относящиеся к разделу поставщика, попадут в образ поставщика и т. д. Эти политики, относящиеся к разделу устройства, объединяются в одну политику SELinux, когда Система Android загружается, и это последняя политика, по которой SELinux проверяет процессы.

Как написать политику SELinux?

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

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

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

Совет: если вам нужно проверить существующую метку файла (скажем, на стандартном ПЗУ для сравнения), это так же просто, как запустить ls -alZ /path/to/file .

Пометка инициатора (не приложения)

Схема: /path/to/initiator u:object_r:context_name_you_want:s0

Пример правила для маркировки службы NFC может выглядеть примерно так: /(vendor|system/vendor)/bin/hw/android\.hardware\[email protected]\.2-service\.sec u:object_r:hal_nfc_default_exec :s0

Для обозначения инициатора следует использовать регулярное выражение. Например, см. раздел platform/system/sepolicy/private/file_contexts.

Присвоение ярлыка инициатору (приложение для Android)

Схема: user=user_of_app seinfo=info name=name_of_app domain=scontext_to_assign type=type_of_file

Пример правила для маркировки приложения qtidataservices может выглядеть примерно так: user=radio seinfo=platform name=.qtidataservices domain=qtidataservices_app type=radio_data_file

Все метки для приложений помещаются в один файл с именем seapp_contexts, отформатированный в соответствии с требованиями раздела. Например, проверьте платформу/систему/sepolicy/private/seapp_contexts.

Маркировка файловых систем

genfscon – это тип метки, используемый для выделения контекстов файловым системам, которые не поддерживают никакие другие типы операторов маркировки. Схема такова: genfscon имя_системы_файла частичный_путь контекст_системы_файла

Пример правила для маркировки /proc/hwmodel может выглядеть примерно так: genfscon proc /hwmodel u:object_r:proc_fih:s0

Все операторы genfscon помещаются в один файл с именем genfs_contexts. Например, проверьте платформу/систему/sepolicy/private/genfs_contexts.

Свойства маркировки

Свойства — это строки, которые можно использовать для управления поведением определенной функции или рекламы функций устройства. Они находятся в файлах .prop, которые анализируются init при загрузке системы. Эти свойства также требуют действительного контекста SELinux относительно инициатора, который будет к ним обращаться.

Схема: имя_свойства u:object_r:тип_свойства:s0

Пример журнала отказа, связанного с свойством камеры:

avc: запрещено for property=camera.tunning.live pid=756 uid=1047 gid=1005 scontext=u:r:hal_camera_default:s0 tcontext=u:object_r:default_prop:s0 tclass=property_service permissive=0

Это следует решить, пометив это конкретное свойство как camera_prop, поскольку оно связано с камерой, например. camera.tunning.live u:object_r:camera_prop:s0

Все ярлыки свойств помещаются в один файл с именем property_contexts. Например, проверьте платформу/систему/sepolicy/master/private/property_contexts.

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

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

Разрешение

Если вы хотите разрешить инициатору какое-либо действие, вы можете использовать оператор allow. Это используется для предоставления разрешения. Схема такова: разрешить разрешение scontext tcontext:tclass;

Пример в отношении этого конкретного случая:

avc: запрещено <чтение и запись>для pid=4565 comm="init.qcom.post_" name="read_ahead_kb" dev="sysfs" ino=52742 scontext=u:r:qti_init_shell:s0 tcontext=u:object_r :sysfs_dm:s0 tclass=файл

Указанное разрешение будет следующим: разрешить qti_init_shell sysfs_dm:file <чтение запись>;

Подавление отказа

Если ваши журналы содержат какие-либо отказы, которые вы хотите скрыть/подавить по какой-либо причине, вы можете использовать оператор dontaudit. Схема такова: разрешение dontaudit scontext tcontext:tclass;

Пример в отношении этого конкретного случая:

avc: запрещено < читать >для comm="thermal-engine" name="kgsl" dev="sysfs" ino=29020 scontext=u:r:thermal-engine:s0 tcontext=u:object_r:sysfs:s0 tclass=dir разрешающий=0

Правило для подавления этого журнала будет следующим: dontaudit thermo-engine sysfs:dir read;

AOSP рекомендует хранить все правила (разрешения, запреты, подавление журналов, разрешающий режим) в отношении конкретного инициатора в отдельном файле в формате .te с его контекстом в качестве имени. Например, все правила, касающиеся инициатора, имеющего контекст hal_power_default, будут храниться в файле с именем hal_power_default.te. Например, проверьте платформу/систему/sepolicy/public/vold.te.

Концепция Neverallow

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

Пример правила: neverallow my_gallery my_secret_passwords: < dir file >< read write open >

В Android вы можете найти neverallows внутри репозитория system/sepolicy, ссылки на который были указаны выше в этом посте. Android помечает несколько правил как neverallow, что потенциально может ослабить безопасность системы. Например, каждый файл в системе имеет тип, называемый файл_системных_данных. Теперь предположим, что у вас есть инициатор, который хочет получить доступ к определенному файлу, имеющему тип файл_системных_данных. Теперь, если вы предоставляете ему такое разрешение, это означает, что вы разрешаете инициатору читать и записывать каждый файл в системе (поскольку каждый файл в системе имеет один и тот же тип файла). Это значительно ослабляет безопасность. Следовательно, он должен быть помечен как neverallow. Решением этой проблемы было бы пометить файл другим, более конкретным контекстом, а затем предоставить инициатору необходимые разрешения. Стоит отметить, что если вы используете устаревшее устройство, например. любой набор микросхем QCOM до msm8996 (семейство UM), который форк устройства/qcom/sepolicy-legacy от Lineage игнорирует NeverAllows, поскольку проприетарные двоичные файлы устаревших устройств не могут соответствовать требованиям Android NeverAlls, которые становятся все более строгими.

Хотя по умолчанию многие правила уже помечены как neverallows, охватываются не все возможные исключения. От разработчика зависит тщательность предоставления разрешений с учетом всех возможных сценариев. Для справки см. платформу/систему/sepolicy/public/vold.te.

Макросы

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

Пример использования макросов при написании политики SELinux для разрешения разрешений:

Пример 1. Используемые макросы: r_file_perms

Без макросов: разрешить hal_power_default sysfs:file ;

С макросами: разрешить hal_power_default sysfs:file r_file_perms;

Пример 2. Используемые макросы: r_dir_file

Без макросов: разрешить ueventd файл_прошивки:каталог <открыть поиск>; и разрешить ueventd firmware_file:file ;

С макросами: r_dir_file(ueventd, firmware_file)

Обратите внимание, что использование макросов сокращает объем кода и по-прежнему предоставляет необходимые разрешения. Вы можете проверить доступные макросы в global_macros и te_macros, присутствующих в репозитории платформы/системы/sepolicy AOSP.

Куда должна идти моя sepolicy?

С момента появления Project Treble политика sepolicy переместилась из одного файла в загрузочном образе в различные файлы раздела, относящиеся к этим политикам.Например, в папке device/lineage/sepolicy в папке «common» есть папки system, vendor, public, private и dynamic.

  • система: хранит раздельные политики для любых системных модулей.
  • vendor: хранит политики для любых модулей поставщиков.
  • public: хранит политики, доступные как системе, так и поставщику.
  • private: хранит разделы, специфичные для платформы, доступные системным модулям.
  • динамический: хранит раздельные политики, которые будут включены в образ поставщика, если целевое устройство выполняет встроенную сборку (/system)/vendor, в противном случае попадает в образ системы, например. наш собственный Trust HAL

Стандартная политика SELinux для справки

Каждая стандартная прошивка/ПЗУ имеет политику SELinux внутри определенных образов разделов. Общее расположение политики — имя_раздела/etc/selinux/ . Это означает, что если вы ищете политику SELinux, связанную с образом системы, она будет доступна в /system/etc/selinux , для образа поставщика она будет в /vendor/etc/selinux и так далее. Помните, что путь к разделу сильно различается в зависимости от устройства. Разработчик при написании политики SELinux для своего конкретного устройства может использовать эту стандартную политику в качестве справочной. Это помогает не только ускорить задачу написания правил, но также служит ссылкой на то, какое правило должно быть предоставлено, а какое нет, как решать конкретные случаи и т. д.

Некоторые полезные инструменты

Полезные ссылки

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

Читайте также: