5

Читая man pages я ожидал, что sudo -E передаст все переменные окружения в подоболочку, но я не получаю ожидаемых результатов.

Как и ожидалось, потрясающе:

$ export LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/
$ env | grep LD
LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/

Больше удивительности:

$ env -i LD_LIBRARY_PATH=/tmp/no/where env | grep LD
LD_LIBRARY_PATH=/tmp/no/where

Не то, что ожидалось

$ env -i LD_LIBRARY_PATH=$LD_LIBRARY_PATH sudo -E /usr/bin/env | grep LD
$
$ env -i LD_LIBRARY_PATH=/tmp/no/where sudo -E /usr/bin/env | grep LD
$

Итак, как мне получить sudo -E для передачи LD_LIBRARY_PATH без редактирования /etc/sudoers?

Редактировать:

В соответствии с Как я могу заставить sudo сохранять переменные окружения? OP указывает, что оболочка может играть роль в сочетании с !env_reset . Я использую Arch Linux и оболочкой по умолчанию является BASH . Еще раз, я не хочу редактировать /etc/sudoers , это возможно?

1 ответ1

6

Некоторые переменные окружения, в том числе LD_LIBRARY_PATH или HOSTALIASES (полный список находится в sysdeps/generic/unsecvars.h), автоматически сбрасываются glibc при выполнении привилегированной программы (т. Е. С битом setuid или с возможностями файловой системы). Это функция безопасности, поскольку в противном случае пользователи могут загружать свои собственные библиотеки в su или sudo и обманывать их, принимая любой пароль.

Вам нужно будет использовать sudo env LD_LIBRARY_PATH=$LD_LIBRARY_PATH yourcommand , чтобы передать переменную командам, запускаемым через sudo.

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