Termux предоставляет полноценную среду Linux на Android‑устройствах, однако по умолчанию она работает без механизмов обязательного контроля доступа (MAC). Интеграция SELinux и AppArmor позволяет ограничить привилегии приложений, предотвратить эскалацию прав и защитить данные от вредоносных действий.
Что такое SELinux и AppArmor?
SELinux (Security‑Enhanced Linux) – реализация MAC, основанная на политике, описывающей, какие действия могут выполнять процессы относительно файлов, сокетов и других ресурсов. Политика формулируется в виде правил type enforcement.
AppArmor – более простой механизм, использующий профили, привязывающие процесс к набору разрешений на файловую систему, сетевые операции и возможности ядра. Профили могут быть в режиме complain (только логирование) или enforce (реальное ограничение).
Подготовка среды Termux
Для начала убедитесь, что ваш Android‑устройство поддерживает SELinux в режиме enforcing. По умолчанию большинство современных прошивок работают в режиме permissive, что ограничивает эффективность контроля.
# Проверка текущего режима SELinux
getenforce
Если вывод Permissive, переключите в Enforcing (требуется root‑доступ):
# Переходим в режим Enforcing (только для отладки, в продакшн рекомендуется использовать постоянные настройки)
su -c 'setenforce 1'
Установите необходимые пакеты:
# Обновляем репозитории и устанавливаем базовые инструменты
pkg update && pkg upgrade -y
pkg install root-repo
pkg install selinux apparmor busybox -y
Включение и настройка SELinux в Termux
После установки SELinux необходимо загрузить политику и активировать её в пользовательском пространстве Termux.
# Создаём директорию для политики SELinux
mkdir -p $HOME/.selinux
# Копируем базовую политику (пример из репозитория)
cp /data/data/com.termux/files/usr/share/selinux/policy.30 $HOME/.selinux/policy
# Загружаем политику в ядро (требуется root)
su -c 'semodule -i $HOME/.selinux/policy'
Для ограниченного использования в Termux удобно создать собственный домен termux_t и привязать к нему нужные процессы.
# Пример простого модуля SELinux (termux_mod.te)
module termux_mod 1.0;
require {
type untrusted_app;
class process { transition execve };
}
# Определяем домен для приложений Termux
type termux_t, domain;
# Разрешаем запуск из untrusted_app в termux_t
allow untrusted_app termux_t:process transition;
# Разрешаем базовый доступ к файловой системе
allow termux_t self:file { read write execute open };
# Компилируем и загружаем модуль
checkmodule -M -m -o termux_mod.mod termux_mod.te
semodule_package -o termux_mod.pp -m termux_mod.mod
su -c 'semodule -i termux_mod.pp'
После загрузки модуля запустите процесс в новом домене:
# Запуск Python в домене termux_t
runcon -t termux_t -- python3 my_script.py
Настройка профилей AppArmor в Termux
AppArmor в Termux работает через пользовательскую утилиту aa-exec, позволяющую запускать процессы с привязанным профилем.
# Создаём директорию для профилей
mkdir -p $HOME/.apparmor
# Пример профиля для Node.js (node_profile)
# Файл: $HOME/.apparmor/node_profile
profile node_profile flags=(attach_disconnected) {
# Разрешаем чтение файлов в домашней директории
@{HOME} r,
@{HOME}/ rw,
# Разрешаем сетевые соединения только к 127.0.0.1
network inet stream,
network inet dgram,
deny network inet6,
# Ограничиваем доступ к системным вызовам
capability net_bind_service,
capability setuid,
# Логируем нарушения в режиме complain
audit deny /,
}
Зарегистрируйте профиль и переключите в режим enforce:
# Устанавливаем профиль
sudo aa-enforce $HOME/.apparmor/node_profile
# Запускаем приложение с профилем
aa-exec -p node_profile -- node server.js
Для отладки используйте режим complain и просматривайте журнал:
# Переключаем в режим complain
sudo aa-complain $HOME/.apparmor/node_profile
# Просмотр логов (logcat или dmesg)
adb logcat | grep apparmor
Практические примеры защиты приложений
1. Ограничение доступа к камере для скриптов Python
# Профиль camera_restrict (appended to $HOME/.apparmor/camera_restrict)
profile camera_restrict {
@{HOME}/ rw,
deny /dev/video rw,
audit deny /dev/video rw,
}
sudo aa-enforce $HOME/.apparmor/camera_restrict
aa-exec -p camera_restrict -- python3 capture.py
Теперь попытка открыть /dev/video0 будет блокирована и зафиксирована в журнале.
2. Защита базы данных SQLite от неавторизованного чтения
# Профиль sqlite_secure
profile sqlite_secure {
@{HOME}/myapp/db.sqlite rw,
deny @{HOME}/ r,
audit deny @{HOME}/** r,
}
sudo aa-enforce $HOME/.apparmor/sqlite_secure
aa-exec -p sqlite_secure -- ./myapp_binary
Только процесс, запущенный с этим профилем, сможет читать/записывать файл db.sqlite.
Отладка и мониторинг
Для контроля работы SELinux и AppArmor в Termux удобно использовать системные журналы:
# SELinux – просмотр сообщений AVC
ausearch -m avc -ts recent
# AppArmor – просмотр сообщений audit
dmesg | grep apparmor
# Или через logcat (Android)
adb logcat | grep -E "selinux|apparmor"
При обнаружении блокировок проанализируйте сообщения и при необходимости скорректируйте политику или профиль, добавив необходимые разрешения.
Заключение
Интеграция SELinux и AppArmor в Termux предоставляет мощный набор средств для изоляции процессов, ограничения доступа к ресурсам и предотвращения эксплуатации уязвимостей. Благодаря гибкой системе правил и профилей вы можете адаптировать политику безопасности под конкретные задачи: от простых скриптов до сложных серверных приложений.
Если вам требуется профессиональная настройка среды Termux, разработка кастомных SELinux‑модулей или AppArmor‑профилей, а также аудит безопасности мобильных решений, обратитесь к специалистам RybinskLab. Мы поможем построить надёжную защиту ваших приложений и обеспечить соответствие отраслевым требованиям.