Команда getenforce в терминале Android возвращает одно из двух значений — Enforcing или Permissive, и именно от этого статуса зависит, блокирует ли система подозрительные действия приложений на уровне ядра. Если вы прошивали кастомную прошивку, устанавливали root или заметили в параметрах разработчика строку «Состояние SELinux», эта статья объяснит, что скрывается за статусом Enforcing и когда его изменение оправдано.
SELinux (Security-Enhanced Linux) — это модуль принудительного контроля доступа, встроенный в ядро Android. Он работает поверх стандартных Linux-разрешений и проверяет каждое обращение процесса к файлам, сокетам и системным ресурсам по заранее заданной политике. Понимание режимов SELinux особенно важно при работе с root-доступом, кастомными ROM и диагностике проблем с запуском приложений.
Что такое SELinux и зачем он нужен в Android
SELinux реализует модель мандатного управления доступом: даже процесс с правами root не может выполнить действие, если оно запрещено политикой безопасности. В Android каждый процесс и файл получает метку безопасности (контекст), а ядро сверяет каждую операцию с базой правил.
Такой подход ограничивает ущерб от вредоносного ПО. Даже если зловредное приложение получит повышенные привилегии, SELinux не позволит ему читать данные других приложений или модифицировать системные разделы — если, конечно, режим установлен в Enforcing.
- 🛡️ Enforcing — политика применяется принудительно, нарушения блокируются и записываются в журнал.
- 📝 Permissive — нарушения только фиксируются в логах, но не блокируются; защита фактически отключена.
- 🚫 Disabled — SELinux полностью выключен (в современных версиях Android встречается редко и требует пересборки ядра).
Как проверить состояние SELinux на устройстве
Самый надёжный способ — выполнить команду в терминале. Подойдёт приложение-эмулятор терминала на самом устройстве или оболочка ADB с компьютера. Права root для простой проверки не требуются.
getenforce
Ответ Enforcing означает штатное защищённое состояние. Ответ Permissive на стоковом устройстве — повод насторожиться: стоковые прошивки официальных производителей поставляются с режимом Enforcing, и его смена обычно указывает на вмешательство в систему.
Альтернативный вариант — просмотреть файл:
cat /sys/fs/selinux/enforce
Значение 1 соответствует Enforcing, 0 — Permissive. На некоторых устройствах статус также отображается в разделе «О телефоне» или в параметрах разработчика, но наличие и расположение этого пункта зависят от оболочки производителя.
Чем Enforcing отличается от Permissive на практике
Разница между режимами напрямую влияет на безопасность и совместимость. Таблица ниже суммирует ключевые отличия.
| Критерий | Enforcing | Permissive |
|---|---|---|
| Блокировка нарушений политики | Да | Нет, только логирование |
| Защита данных приложений | Полная | Ослабленная |
| Совместимость со старыми root-утилитами | Иногда конфликтуют | Выше |
| Требование SafetyNet / банковских приложений | Обычно проходит проверку | Часто вызывает отказ |
| Статус на стоковых прошивках | Стандарт | Признак модификации |
На стоковом устройстве режим Enforcing является нормой, и его смена на Permissive снижает защиту всех данных, включая банковские и платёжные приложения. Многие сервисы проверки целостности устройства реагируют на Permissive как на признак компрометации системы.
Когда и зачем переводят SELinux в Permissive
Несмотря на риски, существуют легитимные сценарии временного отключения принудительного режима. Разработчики кастомных прошивок используют Permissive на этапе портирования, чтобы собрать логи отказов (denials) и на их основе написать корректные правила политики.
Также в Permissive иногда переводят систему для работы устаревших root-инструментов, отдельных модулей Magisk или утилит модификации системного раздела, которые не обновлялись под современные политики SELinux. Это компромисс: функциональность достигается ценой отключения защитного барьера.
⚠️ Внимание: постоянная работа в режиме Permissive оставляет устройство без защиты мандатного контроля доступа. Любое приложение с root-доступом сможет обращаться к чужим данным без ограничений политики. Возвращайте Enforcing сразу после завершения отладочных задач.
Как переключить режим: доступные способы и ограничения
На устройстве с root-доступом временное переключение выполняется командой (действует до перезагрузки):
su -c "setenforce 0"
Здесь 0 — Permissive, 1 — Enforcing. После перезагрузки система вернётся к режиму, заданному в конфигурации ядра и загрузочного образа.
Постоянная смена режима сложнее: она требует модификации boot-образа (параметры командной строки ядра) или правки инициализационных скриптов. Некоторые инструменты вроде Magisk позволяют управлять этим через модули, но конкретный механизм зависит от версии Android и устройства.
☑️ Безопасная работа с режимом SELinux
⚠️ Внимание: модификация boot-образа и параметров ядра может привести к bootloop — устройство перестанет загружаться. Перед любыми изменениями сделайте резервную копию разделов через кастомное recovery и убедитесь, что знаете способ восстановления конкретно для вашей модели.
Влияние на банковские приложения и проверки целостности
Сервисы проверки безопасности устройства (включая механизмы Play Integrity) косвенно учитывают состояние системы. Режим Permissive, разблокированный загрузчик и модифицированный boot-образ часто идут вместе, и банковские приложения могут отказываться работать на таком устройстве.
Если после экспериментов с SELinux перестали запускаться банковские или платёжные приложения, первым делом верните режим Enforcing и перезагрузите устройство. Если проблема сохраняется, возможная причина — другие следы модификации системы, а не сам статус SELinux.
Почему на некоторых кастомных прошивках стоит Permissive по умолчанию
Некоторые неофициальные сборки поставляются с Permissive, потому что разработчик не написал полный набор правил SELinux для конкретного устройства. Это упрощает совместимость, но считается признаком недоработанной прошивки. Зрелые кастомные ROM стремятся поставляться в режиме Enforcing.
Типичные проблемы и их диагностика
Частая ситуация: после установки root или модуля какое-то приложение вылетает или не может получить доступ к файлам. При работающем Enforcing проверьте логи отказов — возможно, политика блокирует легитимное действие, и решением будет обновление модуля, а не отключение защиты.
Обратный случай: устройство с кастомной прошивкой показывает Permissive, хотя владелец ничего не менял. Здесь статус унаследован от самой прошивки, и вернуть Enforcing обычной командой не получится — после перезагрузки режим снова сбросится. Потребуется обновление прошивки до версии с корректной политикой или правка boot-образа.
- 🔍 Сначала соберите логи
avc: deniedи определите, что именно блокируется. - 🔄 Проверьте, сохраняется ли проблема после перезагрузки в чистом режиме Enforcing.
- 📦 Обновите модуль или прошивку — свежие версии часто содержат исправленные правила SELinux.
- 🧩 Не используйте Permissive как «универсальное лекарство» от вылетов приложений.
FAQ: частые вопросы о состоянии SELinux
Опасен ли режим Enforcing для обычного пользователя?
Нет. Enforcing — это штатный защитный режим Android. Именно в нём система работает с завода, и отключать его обычному пользователю не нужно.
Почему getenforce показывает Permissive на новом телефоне?
На стоковой прошивке официального производителя такого быть не должно. Возможные причины: устройство уже модифицировано (root, кастомный boot-образ), установлена неофициальная прошивка либо используется сомнительный продавец. Проверьте состояние загрузчика и происхождение прошивки.
Можно ли переключить SELinux без root-прав?
Нет. Команда setenforce требует привилегий суперпользователя. Просмотр статуса через getenforce доступен без root.
Сбросится ли Permissive после перезагрузки?
Да, если режим был изменён командой setenforce 0 — после перезагрузки система вернётся к значению, заданному в конфигурации загрузки. Постоянный Permissive сохраняется только при модификации boot-образа или прошивки.
Влияет ли режим SELinux на производительность?
Проверки политики выполняются на уровне ядра и в обычном использовании не дают заметной разницы в скорости работы. Переход в Permissive ради «ускорения» устройства не имеет практического смысла.