Добрый день.
Вопрос, собственно, в заголовке: можно ли (а главное-как) корректно запустить приложение, которому выдали привилегии, используя не дефолтные переменные среды.
Ситуация следующая: имеется ПК с ОС Смоленск 1.6. С него управляется другой ПК в составе удалённого устройства. В функционал указанного устройства входит выключение и включение по сети. Выключение делается через установленное на нём ПО, включение - через достаточно стандартный wake on lan.
Для отправки сигнала WoL приложению выдана привилегия cap_net_bind_service, через команду
Приложение разрабатывается сторонними товарищами, поэтому быстрого доступа к коду и сборке, к сожалению, нет. В первых версиях всё было нормально т.к. для работы не требовались сторонние библиотеки. Недавно они были добавлены вместе с новым функционалом по ТЗ и требуют дополнительных переменных окружения, которые добавляются пользователю через файл ~/.bashrc. Без привилегии всё работает нормально (но без WoL), после её добавления - приложение перестаёт видеть библиотеки и не запускается.
Судя по руководству Астры это штатное поведение:
Можно ли обойти указанное ограничение?
На ПК не обрабатывается секретная информация, (фактически он играет роль "пульта" с кнопками) поэтому серьёзная безопасность не требуется, всё работает на уровне 0, Смоленск поставлен исключительно для соответствия ТЗ.
Пробовал выдать указанную привилегию пользователю, программа (без собственной привилегии) запускается, но WoL не работает, если выдать файлу тоже - перестаёт стартовать.
Добавлял нужные переменные в /etc/environment как написано в одной из ссылок в данном вопросе: https://forum.astralinux.ru/threads/1884/ , но всё равно не работает т.к. LD_LIBRARY_PATH в таком сценарии тоже игнорируется.
На данный момент у меня только одно рабочее решение - запускать всё через скрипт от имени суперпользователя с передачей переменных окружения, но, мне кажется, что это неправильно и переусложнено.
Единственный вариант, который я могу пока придумать: попробовать внести LD_LIBRARY_PATH в список системных, чтобы загрузчик поддтягивал её в "стандартном" наборе, это возможно?
Сомневаюсь, что можно отключить подобное поведение в системном загрузчике, так что идея только с переменной.
Вопрос, собственно, в заголовке: можно ли (а главное-как) корректно запустить приложение, которому выдали привилегии, используя не дефолтные переменные среды.
Ситуация следующая: имеется ПК с ОС Смоленск 1.6. С него управляется другой ПК в составе удалённого устройства. В функционал указанного устройства входит выключение и включение по сети. Выключение делается через установленное на нём ПО, включение - через достаточно стандартный wake on lan.
Для отправки сигнала WoL приложению выдана привилегия cap_net_bind_service, через команду
sudo setcap 'cap_net_bind_service=+ep' application
.Приложение разрабатывается сторонними товарищами, поэтому быстрого доступа к коду и сборке, к сожалению, нет. В первых версиях всё было нормально т.к. для работы не требовались сторонние библиотеки. Недавно они были добавлены вместе с новым функционалом по ТЗ и требуют дополнительных переменных окружения, которые добавляются пользователю через файл ~/.bashrc. Без привилегии всё работает нормально (но без WoL), после её добавления - приложение перестаёт видеть библиотеки и не запускается.
Судя по руководству Астры это штатное поведение:
Из руководства по КСЗ№1, глава 3.2.
Все привилегии пользователя наследуются запущенными от имени его учетной записи процессами. При запуске процесса с установленными привилегиями загрузчик динамических библиотек осуществляет сброс переменных среды окружения, позволяющих осуществлять загрузку динамических библиотек из нестандартных каталогов LD_LIBRARY_PATH и LD_PRELOAD. Таким образом, установка Linux-привилегий для пользователя может привести к невозможности запуска приложений, использующих динамическую загрузку библиотек из нестандартных каталогов
Все привилегии пользователя наследуются запущенными от имени его учетной записи процессами. При запуске процесса с установленными привилегиями загрузчик динамических библиотек осуществляет сброс переменных среды окружения, позволяющих осуществлять загрузку динамических библиотек из нестандартных каталогов LD_LIBRARY_PATH и LD_PRELOAD. Таким образом, установка Linux-привилегий для пользователя может привести к невозможности запуска приложений, использующих динамическую загрузку библиотек из нестандартных каталогов
На ПК не обрабатывается секретная информация, (фактически он играет роль "пульта" с кнопками) поэтому серьёзная безопасность не требуется, всё работает на уровне 0, Смоленск поставлен исключительно для соответствия ТЗ.
Пробовал выдать указанную привилегию пользователю, программа (без собственной привилегии) запускается, но WoL не работает, если выдать файлу тоже - перестаёт стартовать.
Добавлял нужные переменные в /etc/environment как написано в одной из ссылок в данном вопросе: https://forum.astralinux.ru/threads/1884/ , но всё равно не работает т.к. LD_LIBRARY_PATH в таком сценарии тоже игнорируется.
На данный момент у меня только одно рабочее решение - запускать всё через скрипт от имени суперпользователя с передачей переменных окружения, но, мне кажется, что это неправильно и переусложнено.
Единственный вариант, который я могу пока придумать: попробовать внести LD_LIBRARY_PATH в список системных, чтобы загрузчик поддтягивал её в "стандартном" наборе, это возможно?
Сомневаюсь, что можно отключить подобное поведение в системном загрузчике, так что идея только с переменной.
Последнее редактирование: