Termux предоставляет полноценную Linux‑среду на Android‑устройствах, но по умолчанию работает в контексте SELinux в режиме permissive. Это открывает возможности для приложений выполнять действия, которые могут привести к эскалации привилегий. Точная настройка SELinux‑политик позволяет ограничить доступ приложений к системным ресурсам и снизить риск эксплуатации.
Почему важно start (запускать) политику правильно
Понимание термина start в контексте «начало действия» помогает осознать, что каждый запуск процесса в Termux сопровождается проверкой SELinux‑правил. По определению, start – «to begin or come into being, activity, or operation»[merriam-webster.com](https://www.merriam-webster.com/dictionary/start). Точно так же, когда мы start‑им SELinux‑модуль, мы инициируем новую политику, которая будет контролировать дальнейшие действия приложений.
Проверка текущего режима SELinux в Termux
getenforce
Если вывод Permissive, значит политика не ограничивает действия. Для начала работы переключимся в Enforcing (только после создания тестовой политики).
Установка необходимых пакетов
pkg install root-repo
pkg install selinux policycoreutils checkpolicy
Пакет selinux содержит утилиты semodule, audit2allow и другие, а checkpolicy позволяет компилировать модули.
Создание собственного SELinux‑модуля
1. Создайте рабочий каталог:
mkdir -p ~/selinux/myapp
cd ~/selinux/myapp
2. Напишите файл политики myapp.te:
module myapp 1.0;
require {
type untrusted_app;
type termux_app;
class file { read open };
class process { execmem };
}
# Разрешаем только чтение конфигурационных файлов из /data/data/com.myapp/files
allow termux_app untrusted_app:file { read open };
# Запрещаем выполнение памяти (execmem) для приложений Termux
neverallow termux_app self:process execmem;
3. Скомпилируйте модуль:
checkpolicy -M -o myapp.pp myapp.te
4. Установите модуль в SELinux:
semodule -i myapp.pp
После установки SELinux будет проверять, что процессы Termux не могут использовать execmem, а доступ к файлам ограничен указанными правилами.
Отладка и аудит
Для анализа отклонённых запросов используйте журнал аудита:
audit2allow -w -a
Команда выводит рекомендации, какие разрешения можно добавить, если они действительно нужны. Важно не «разрешать всё», а тщательно оценить каждый запрос.
Автоматический запуск политики при старте Termux
Чтобы модуль загружался каждый раз при запуске Termux, добавьте команду в .bashrc:
if [ "$(getenforce)" = "Permissive" ]; then
setenforce 1
semodule -i ~/selinux/myapp/myapp.pp
fi
Это гарантирует, что политика будет активна даже после перезагрузки устройства.
Практические рекомендации
- Всегда тестируйте новые модули в режиме
Permissiveперед переходом вEnforcing. - Регулярно проверяйте журнал
/var/log/audit/audit.logна предмет новых отклонённых запросов. - Не используйте
allowбез чёткой причины – предпочтительно использоватьneverallowдля запрещения опасных действий. - Обновляйте пакеты
selinuxиpolicycoreutilsпосле каждой версии Android, так как набор доступных классов может измениться.
Заключение
Точная настройка SELinux‑политик в Termux позволяет ограничить привилегии приложений, предотвратить эскалацию прав и повысить общую безопасность мобильного Linux‑окружения. Используя описанные выше шаги – проверку режима, создание собственного модуля, отладку через audit2allow и автоматический запуск – вы получаете надёжный контроль над тем, что может и чего не может делать каждый процесс.
Если вам требуется профессиональная поддержка в области SELinux, разработка кастомных политик, аудит безопасности мобильных Linux‑сред или настройка Termux под специфические задачи, обратитесь к сервисам RybinskLab. Мы предоставляем консалтинг, написание и интеграцию SELinux‑модулей, а также обучение персонала для поддержания вашего окружения в безопасном состоянии.