9

Рабочий screen в bash стирает переменную LD_LIBRARY_PATH. Я немного почитал, и похоже, что это ожидаемое поведение, но мне нужно обойти это.

Обходной путь - добавить объявление LD_LIBRARY_PATH в ~/.bashrc . В моем случае LD_LIBRARY_PATH сильно изменяется между запуском оболочки и при запуске экрана, поэтому мне нужно получить текущее значение LD_LIBRARY_PATH в сеансе screen .

3 ответа3

12

screen не сбрасывает переменную окружения; он удален самой Linux.

В большинстве систем исполняемый файл /usr/bin/screen устанавливается с битом setgid для группы utmp , чтобы иметь возможность изменять базу данных utmp . Он также использует setgid для управления доступом к каталогу сокетов (/var/run/screen/).

В Linux, когда запускается программа setuid (или setgid), она не получает определенные переменные среды (включая LD_LIBRARY_PATH , несколько других переменных LD_* и HOSTALIASES), чтобы уменьшить возможные точки атаки: в противном случае вы можете написать небольшую библиотека и трюк su или sudo вызова ваших "улучшенных" функций таким образом.


Вы можете удалить бит setgid с screen , но вам придется сделать каталог сокетов полностью доступным для всех (режим 0777). Это не должно быть угрозой безопасности, поскольку screen также проверяет сам UID атакующего.

Однако вы не должны делать базу данных utmp доступной для записи.

4

В вашем .screenrc вы можете использовать команду setenv для установки значения в окружении экрана.

setenv LD_LIBRARY_PATH $LD_LIBRARY_PATH_SCREEN

Это устанавливается до запуска вашей оболочки. Очевидно, что LD_LIBRARY_PATH_SCREEN необходимо установить перед запуском экрана.

1

Попробуйте export интересующую вас переменную среды.

export LD_LIBRARY_PATH

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .