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

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

Применение SELinux и AppArmor в Termux для усиления защиты приложений

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. Мы поможем построить надёжную защиту ваших приложений и обеспечить соответствие отраслевым требованиям.

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

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю IT-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса.

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