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‑среды.