We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Применение SELinux в Termux: ограничение прав приложений и повышение уровня изоляции

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

Termux предоставляет полноценную Linux‑среду на Android‑устройствах, однако без должного контроля доступа приложения могут получить доступ к чувствительным ресурсам системы. SELinux (Security‑Enhanced Linux) – механизм мандатного контроля доступа, встроенный в Android, позволяет задать строгие политики, ограничивая действия процессов даже при наличии прав root.

Что такое SELinux и почему он важен в Termux

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

Проверка текущего состояния SELinux в Termux

Для начала необходимо убедиться, что SELinux активен и находится в нужном режиме (enforcing или permissive). Выполните следующие команды:

termux-info | grep -i "selinux"
getenforce

Если getenforce возвращает Enforcing, политики применяются строго. В режиме Permissive нарушения лишь логируются, но не блокируются – полезно для отладки.

Базовая настройка режима SELinux

Переключение режима требует прав root. В Termux это можно сделать через tsu (если установлен) или используя su в оболочке:

tsu -c "setenforce 1"   # включить строгий режим
tsu -c "setenforce 0"   # перейти в permissive

После изменения режима проверьте статус повторно командой getenforce.

Создание и редактирование пользовательских политик

Стандартные политики Android покрывают большинство системных процессов, но для приложений в Termux часто требуется добавить собственные правила. Для этого используют инструменты sepolicy и semanage, доступные в пакете policycoreutils (устанавливается через apt).

apt update && apt install policycoreutils

Пример добавления разрешения для доступа к каталогу /data/data/com.example.app/files процессом termux:

semanage fcontext -a -t termux_data_file_t "/data/data/com.example.app/files(/.*)?"
restorecon -R -v /data/data/com.example.app/files

После применения контекста система будет проверять доступ в соответствии с новыми правилами.

Ограничение прав конкретных приложений в Termux

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

# Пример политики myapp.te
module myapp 1.0;

require {
    type termux_t;
    type myapp_t;
    class file { read write execute open };
    class dir { search };
}

# Разрешаем termux_t запускать myapp_t
allow termux_t myapp_t:process transition;

# Ограничиваем myapp_t только чтение из /sdcard и запись в /data/data/com.myapp
allow myapp_t sdcard_t:file { read open };
allow myapp_t myapp_data_t:dir { search };
allow myapp_t myapp_data_t:file { read write create };

Скомпилировать и загрузить политику можно через checkpolicy и semodule:

checkpolicy -M -o myapp.mod myapp.te
semodule -i myapp.mod

После загрузки процесса, запущенного в Termux, необходимо изменить его тип:

runcon -t myapp_t myapp_executable

Теперь процесс работает в изолированном домене myapp_t и может выполнять только те действия, которые явно разрешены в политике.

Практические примеры применения

  • Ограничение доступа к камере: запретить процессу Termux использовать camera_device, тем самым защищая конфиденциальные изображения.
  • Изоляция скриптов загрузки: скрипты, скачивающие файлы из сети, могут быть ограничены только доступом к /sdcard/Download, без возможности записать что‑то в /data.
  • Контроль над сетевыми сокетами: разрешить только outbound‑соединения к определённым портам, блокируя попытки открыть прослушивающие сокеты.

Для каждого из примеров достаточно добавить соответствующие правила в пользовательскую политику и пересобрать её.

Отладка и мониторинг нарушений

В режиме Permissive все нарушения записываются в журнал dmesg. Для быстрого просмотра используйте:

dmesg | grep avc

В режиме Enforcing сообщения об отказах также появляются в журнале, но процесс будет остановлен. Для более удобного анализа можно установить auditd:

apt install auditd
service auditd start
ausearch -m avc -ts recent

Возможные проблемы и их решение

  • Недостаток прав root: без root‑доступа изменить режим SELinux невозможно. Решение – использовать tsu или получить root‑права через Magisk.
  • Конфликты с OEM‑модификациями: некоторые производители отключают SELinux или используют кастомные политики. В таких случаях рекомендуется проверять совместимость через getenforce и dmesg.
  • Сложные политики: при ошибках компиляции политики (checkpolicy) убедитесь, что все типы и классы объявлены в секции require.

Заключение

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

Если вы хотите внедрить SELinux‑защиту в свои проекты, провести аудит безопасности мобильных приложений или получить профессиональную поддержку по настройке Termux, команда RybinskLab готова помочь. Мы предоставляем услуги по разработке кастомных SELinux‑политик, обучению персонала и интеграции безопасных решений в Android‑среды.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект