LINUX.ORG.RU

Прикрепить переменную окружения к бинарнику/пути на уровне ядра/ld.so

 


0

1

Есть бинарник «/bin/foo». Запускаться может руками, автоматически из скриптов, как угодно. Его надо принудительно запускать с переменной окружения «foo=bar» всегда. Заменить файл «/bin/foo» на другой нельзя. Изменять файл «/bin/foo» нельзя. Изменять скрипты, из которых «/bin/foo» запускается, нельзя.

Варианты?

ЗЫ Устанавливать «foo=bar» глобально для всех процессов тоже нельзя.



Последнее исправление: suuaq (всего исправлений: 1)

В cmdline ядра прописать foo=bar, емнип, ядро глобально экспортирует как переменную окружения (если конечно foo не пересекается с каким-либо параметром самого ядра.

anonymous
()
Ответ на: комментарий от anonymous

Ставить «foo=bar» для всех процессов нельзя.

suuaq
() автор топика
Ответ на: комментарий от Kuzz

Написать либу с установкой переменной в attribute((constructor)) и LD_PRELOAD ее.

Остаётся та же проблема, только LD_PRELOAD вместо foo=bar.

suuaq
() автор топика

опиши изначальную проблему, которую ты пытаешься решить таким дурацким способом

с такими требованиями тебе только отладочными апи перехватывать запуск всех процессов и редактировать память процесса если бинарь==/bin/foo

anonymous
()
Ответ на: комментарий от anonymous

опиши изначальную проблему, которую ты пытаешься решить таким дурацким способом

Избыток свободного времени. Жениться не предлагать.

suuaq
() автор топика
Ответ на: комментарий от anonymous

с такими требованиями тебе только отладочными апи перехватывать запуск всех процессов и редактировать память процесса если бинарь==/bin/foo

Интересно, этот ваш новомодный ebpf так умеет?

suuaq
() автор топика
Ответ на: комментарий от suuaq

LD_PRELOAD можно и на всю систему натянуть (/etc/ld.so.preload).

В либе же чекать имя исполняемого файла и ставить только для нужного, если вдруг нельзя всем эту переменную ставить.

Kuzz ★★★
()
Ответ на: комментарий от Kuzz

В либе же чекать имя исполняемого файла и ставить только для нужного, если вдруг нельзя всем эту переменную ставить.

Хотелось бы не трогать ни в чём не повинные процессы, но вообще костыль годен.

suuaq
() автор топика
Ответ на: комментарий от anonymous

Не сработает, если какой-то скрипт запускает /bin/foo по абсолютному пути.

suuaq
() автор топика
Ответ на: комментарий от suuaq

Еще костыль)

Если есть поддержка оверлейных ФС, то корень (или где там этот бинарь) перенести на оверлей, оригинальный бинарь перезаписать скриптом, который установит переменную и вызовет оригинал по абсолютному пути из lower-а.

Kuzz ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.