Что бы я ни старался, кажется, что LD_LIBRARY_PATH переменная среды не сохраняется после того, как я запустил команду с помощью sudo. Единственный способ, которым мне удалось это закрепить, - это поставить перед моим sudo
команда с LD_LIBRARY_PATH=/the/path
всякий раз, когда я вызываю его из командной строки, но мне бы не хотелось делать это каждый раз.
Кажется, что опция env_keep игнорирует эту переменную, как и опция exc_group.
Моя группа% в настоящее время имеет ALL=(ALL) NOPASSWD:ALL
как его доступ в sudoers. Я бы хотел, чтобы эта конкретная переменная среды сохранялась для любой выполняемой мной команды.
Как я могу это сделать?
На моем сервере работает Red Hat Enterprise Linux 5.7.
Вы можете ожидать, что это можно сделать, используя
Defaults env_keep += "LD_LIBRARY_PATH FRED"
но быстрый тест на CentOS 6.2
с участием Sudo version 1.7.4p5
не проходит LD_LIBRARY_PATH
но проходит FRED
. На странице руководства sudoers есть следующее:
Note that the dynamic linker on most operating systems will remove variables that can control dynamic linking from the environment of setuid executables, including sudo. Depending on the operating system this may include _RLD, DYLD_, LD_, LDR_, LIBPATH, SHLIB_PATH, and others. These type of variables are removed from the environment before sudo even begins execution and, as such, it is not possible for sudo to preserve them
Получается, что система удаляет LD_LIBRARY_PATH
из среды до того, как его увидит sudo.
Чтобы заставить это работать, мне пришлось сделать следующее:
Defaults env_keep += "LD_LIBRARY_PATH"
судьямalias sudo='sudo LD_LIBRARY_PATH=/mypath'
Теперь любая команда, которую я вызываю с помощью sudo, будет иметь настройку переменной.
Это происходит не только с LD_LIBRARY_PATH, но и с некоторыми другими переменными среды, которые могут зависеть от вашей среды сборки. В моем случае sudo стал:
sudo -HE env PATH=${PATH} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} PYTHONPATH=${PYTHONPATH} my_command
Похоже, ты еще не сделал export LD_LIBRARY_PATH
все же. Это сделает переменную окружения доступной для всех и решит эту проблему.
В качестве альтернативы, если вам нужна надежная постоянная переменная среды, рассмотрите возможность добавления ее в свой bashrc
(~/.bashrc
) файл, а затем открыть новый сеанс терминала.