При настройке VPN-сервера через OpenVPN в Termux многие сталкиваются с необходимостью запуска утилиты easyrsa с правами суперпользователя. Однако переход в окружение root через sudo -u root часто приводит к ошибкам вроде «No such file or directory» или отсутствию OpenSSL, даже если пакеты установлены.
Проблема возникает из-за особенностей работы Termux: при смене пользователя сбрасываются переменные среды и пути, что нарушает работу скриптов. Разберёмся, как это исправить без переустановки пакетов и сложных манипуляций.
Почему окружение root «ломает» easyrsa
Termux, в отличие от стандартных Linux-дистрибутивов, хранит пользовательские данные в изолированном каталоге /data/data/com.termux
. Когда вы выполняете команду через sudo -u root
, система пытается найти бинарные файлы и библиотеки в стандартных путях вроде /usr/bin
, которые в Termux не существуют. Например, OpenSSL здесь расположен в /data/data/com.termux/files/usr/bin
, но root-окружение об этом не знает.
Дополнительная сложность возникает, если easyrsa пытается прочитать конфигурационные файлы (например, vars
) или создать папку pki
. Скрипт может ссылаться на относительные пути, которые в root-сессии ведут в несуществующие директории. Отмечу, что даже явное указание пути к easyrsa не всегда помогает — если скрипт внутри вызывает другие программы (вроде openssl
), они тоже будут недоступны.
Пошаговое решение: настройка PATH и параметров easyrsa
Чтобы заставить easyrsa работать в root-окружении, нужно вручную задать корректные пути для переменных среды и параметров скрипта. Вот как это сделать:
1. Укажите правильный PATH
Переменная PATH
определяет, где система ищет исполняемые файлы. В Termux она включает пути вроде /data/data/com.termux/files/usr/bin
, но при переходе в root это сбрасывается. Исправьте это, добавив PATH прямо в команду через env
:
env PATH=/data/data/com.termux/files/usr/bin sh /путь/к/easyrsa
2. Явно задайте каталог pki
Даже если в файле vars
прописан путь к pki
, root-окружение может его игнорировать. Используйте параметр --pki
:
env PATH=... sh /путь/к/easyrsa --pki=/полный/путь/к/pki
Например:
env PATH=/data/data/com.termux/files/usr/bin sh /data/data/com.termux/files/home/openvpn/easy-rsa/easyrsa3/easyrsa --pki=/data/data/com.termux/files/home/openvpn/easy-rsa/easyrsa3/pki
3. Проверьте права доступа
Убедитесь, что root имеет доступ к файлам Termux. Иногда папки в /data/data/com.termux
защищены правами доступа, которые запрещают чтение или запись другим пользователям. Выполните:
chmod -R 755 /data/data/com.termux/files/home/openvpn
Дополнительные рекомендации
- Абсолютные пути везде — в скриптах и командах всегда используйте полные пути, включая вызовы внутри easyrsa (например,
./easyrsa
замените на/полный/путь/к/easyrsa
). - Проброс переменных — если easyrsa требует другие переменные (например,
EASYRSA_ROOT
), добавьте их черезenv
:
env PATH=... EASYRSA_ROOT=/путь/к/корню sh /путь/к/easyrsa ...
- Альтернатива sudo — вместо
sudo -u root
попробуйтеtsu
(аналог sudo для Termux), который может сохранять часть переменных среды.
Если после всех действий скрипт по-прежнему выдаёт ошибки, проверьте, установлены ли зависимости в Termux:
pkg install openssl-tool easy-rsa
И не забудьте — работа с root-правами в Termux требует осторожности. Любая ошибка в путях или командах может повредить данные приложения. Смело рекомендую тестировать команды в обычном окружении (без sudo), а затем адаптировать их для root, добавляя env PATH=...
и абсолютные пути.
Готово! Теперь вы можете интегрировать easyrsa в автоматизированные панели управления или скрипты, работающие от имени root, без ошибок о пропавших файлах. Если столкнётесь с проблемами — напишите в комментарии, постараюсь помочь.