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 превращает Android‑устройство в полноценную Linux‑среду, однако по умолчанию большинство команд работает в контексте пользователя u0_aXXX с широкими правами доступа к файловой системе и сети. Для повышения безопасности необходимо задействовать механизмы контроля доступа, предоставляемые SELinux (Security‑Enhanced Linux) и AppArmor.

Почему SELinux и AppArmor важны в Termux

Android уже использует SELinux в режиме enforcing, но приложения часто работают в режиме permissive из‑за ограничений OEM. Это открывает путь для злоумышленников к эскалации привилегий через уязвимости терминального окружения. AppArmor, хотя и не включён в ядро Android по умолчанию, может быть добавлен через termux-modules и позволяет описывать профили доступа на уровне отдельного процесса.

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

getenforce

Если вывод Permissive, система не будет блокировать нарушения политик, а лишь записывать их в журнал. Чтобы увидеть текущие контексты процессов Termux, выполните:

ps -Z | grep termux

Переключение в режим Enforcing (только для отлаженных устройств)

Для большинства пользователей рекомендуется оставить SELinux в режиме Permissive и использовать AppArmor для более гибкого контроля. Однако на отлаженных ROM можно переключить режим:

su -c "setenforce 1"

После переключения проверьте статус:

getenforce

Создание пользовательской политики SELinux для Termux

1. Установите необходимые инструменты:

pkg install -y selinux-tools sepolicy

2. Сгенерируйте базовый шаблон политики:

sepolicy generate -t u:object_r:app_data_file:s0 -n termux_app

3. Отредактируйте файл termux_app.te, добавив правила ограничения. Пример – запрет доступа к /sdcard:

deny termux_app self:file { read write execute };

4. Скомпилируйте и загрузите политику:

checkmodule -M -m -o termux_app.mod termux_app.te
semodule_package -o termux_app.pp -m termux_app.mod
su -c "semodule -i termux_app.pp"

После загрузки новых правил любые попытки доступа к запрещённым ресурсам будут фиксироваться в dmesg и logcat.

Включение AppArmor в Termux

AppArmor не входит в стандартный образ Android, но его можно добавить через модуль termux-modules:

pkg install -y termux-modules
termux-modules install apparmor

После установки создайте профиль для нужного скрипта или бинарника. Пример – ограничить доступ к сети:

# /data/data/com.termux/files/usr/etc/apparmor.d/termux_myapp
profile termux_myapp flags=(attach_disconnected) {
    # Разрешаем только чтение файлов в домашней директории
    file,
    # Запрещаем любые сетевые соединения
    network deny,
    # Разрешаем только стандартные системные вызовы
    capability,
}

Активируйте профиль:

aa-enforce /data/data/com.termux/files/usr/etc/apparmor.d/termux_myapp

Практический пример: ограничение доступа к камере и микрофону

Для скриптов, работающих с медиа‑данными, часто требуется строгий контроль. Добавьте в SELinux‑политику:

# Разрешаем только чтение из /dev/video0 и /dev/snd/*
allow termux_app self:chr_file { read };

И в AppArmor‑профиле:

profile termux_camera_app {
    # Доступ к видеоустройству только для чтения
    /dev/video0 r,
    # Доступ к аудио‑устройствам только для чтения
    /dev/snd/** r,
    # Запрещаем любые сетевые запросы
    network deny,
}

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

Для SELinux используйте:

dmesg | grep avc
logcat | grep avc

Для AppArmor:

aa-logprof
journalctl -k | grep apparmor

Эти журналы помогут быстро определить, какие правила необходимо скорректировать.

Автозапуск пользовательских политик при старте Termux

Для постоянного применения политик рекомендуется добавить их в скрипт ~/.termux/boot.sh (пакет termux-boot):

# ~/.termux/boot.sh
#!/data/data/com.termux/files/usr/bin/sh
# Применяем SELinux‑политику
su -c "semodule -i /data/data/com.termux/files/usr/termux_app.pp"
# Включаем AppArmor‑профиль
aa-enforce /data/data/com.termux/files/usr/etc/apparmor.d/termux_myapp

Не забудьте сделать скрипт исполняемым:

chmod +x ~/.termux/boot.sh

Связанные команды «start» в контексте Termux

Для запуска фоновых сервисов в Termux часто используют команду termux-services start <service>. Слово start имеет широкое значение в английском языке – «начинать, запускать», как описано в словарях [dictionary.cambridge.org](https://dictionary.cambridge.org/us/dictionary/english/start) и [dictionary.com](https://www.dictionary.com/browse/start). Это подчёркивает важность правильного управления процессом start в безопасной среде.

Заключение

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

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

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом РыбинскЛАБ.

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

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

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

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