Назад | Перейти на главную страницу

Как настроить sudoers, чтобы всегда сохранять переменную среды LD_LIBRARY_PATH?

Что бы я ни старался, кажется, что 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.

Чтобы заставить это работать, мне пришлось сделать следующее:

  1. Добавить Defaults env_keep += "LD_LIBRARY_PATH" судьям
  2. Добавьте этот псевдоним в мой файл .bashrc: 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) файл, а затем открыть новый сеанс терминала.