Как заставить sudo сохранять переменные среды?

Использование sudo 1.7.4p4 на Solaris 5.10 и sudo 1.6.7p5 на RHEL4 u6 Я не вижу, как сохранить мои переменные среды, например $ PYTHONPATH. Я добавил эту строку в sudoers, но это не имеет никакого значения:

Defaults !env_reset 

Я что-то делаю неправильно, или установка sudo просто не уважает флаг env_reset?

Изменить: по крайней мере, на Solaris мы обнаружили, что эта проблема зависит от оболочки! Стандартная корневая оболочка – Bourne, если мы запустим bash под sudo ( sudo bash ), то! Env_preset сохранит среду (включая PATH и LD_LIBRARY_PATH). Должен сказать, что это довольно запутанное поведение.

4 Solutions collect form web for “Как заставить sudo сохранять переменные среды?”

Используйте осторожно, есть проблемы безопасности с sudo и переменными.

Из man sudoers я обнаружил, что вы должны использовать

 По умолчанию env_reset
 По умолчанию env_keep + = "PYTHONPATH OTHERVARABLE YETANOTHER"

В Ubuntu sudo сохраняет некоторые переменные. sudo -i больше похоже на вход в систему с правами root, а затем запуск команды. Оба могут быть неудобными, первый для sudo nano myfile оставляет корневые файлы внутри вашего дома, а второй для sudo -i nano myfile будет пытаться открыть / root / myfile.


Бег

 sudo printenv PATH 

И посмотреть, что он дает. Здесь он дает

 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin 

например. Теперь запустите sudo visudo и добавьте строку

 Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin 

Заменив то, что вы нашли раньше. При необходимости добавьте новый путь к нему.

О библиотеках:

 sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/library your command 

В дистрибутивах Linux много внимания PATH , и вы действительно должны быть осторожны, прежде чем играть с ним. Будьте особенно осторожны при добавлении таких путей, как « . » Или /home/username , это небезопасно.

Одна из опасностей добавления путей заключается в том, что она открывает возможность для файлов на этих путях запускаться root , открывая окна в системе безопасности, которые могут быть использованы вредоносным программным обеспечением. Могут быть и другие опасности. Просто убедитесь, что вы знаете, что делаете. Обход мер безопасности sudo может сделать вашу Solaris безопасной, как Windows XP.

Как говорится в других, проделывать sudoers следует с осторожностью.

Более простой подход для более простых случаев, когда есть особые переменные среды, которые вы хотите сохранить, – это просто передать переменную среды, которую вы хотите напрямую через sudo (это показано как [VAR=value] в справке sudo cmdline).

См. Этот небольшой пример, где я также продемонстрировал его для нескольких переменных.

 $ export MY_V1=1 $ export MY_V2=2 $ printenv | grep MY_V MY_V2=2 MY_V1=1 $ sudo MY_V1=$MY_V1 MY_V2=$MY_V2 printenv | grep MY_V MY_V2=2 MY_V1=1 

Для исходного примера PYTHONPATH в вопросе используйте только следующее:

 $ sudo PYTHONPATH=$PYTHONPATH python some_script.py <script_output_here> 

Создание псевдонима для этого типа вещей удобно. Вот так:

 $ alias sudopy='sudo PYTHONPATH=$PYTHONPATH' 

Ваши значения по Defaults !env_reset выглядит нормально, предполагая, что вы также не вызываете sudo с параметром -E .

Вы можете полностью удалить эту запись.

Вы подтвердили, что редактируете правильный файл sudoers? Я предполагаю, что это может быть /etc/sudoers или /usr/local/etc/sudoers зависимости от того, как он был установлен. Вы отредактировали его с помощью visudo ?

Как вы используете sudo? sudo python , sudo su , sudo su - , sudo -s , что-то еще? Только sudo python и sudo su сохранили бы вашу среду.

Что такое env | grep PYTHONPATH env | grep PYTHONPATH говорят? Если ничего, убедитесь, что PYTHONPATH экспортирован, выполнив export PYTHONPATH и повторите попытку.

Что такое sudo env | grep PYTHONPATH sudo env | grep PYTHONPATH говорят? Если он печатает ожидаемое значение, то что-то еще перезаписывает значение PYTHONPATH. Возможно, это root .bashrc или .bash_profile или общесистемные файлы конфигурации.

Согласно документации Ubuntu для LD_LIBRARY_PATH :

Вы должны использовать файлы конфигурации /etc/ld.so.conf.d/*.conf

Затем:

  1. Добавьте ld.so конфигурации ld.so в /etc/ld.so.conf.d/ с ld.so пути к вашему LD_LIBRARY_PATH

  2. Обновите кеш с помощью:

     sudo ldconfig -v 
  • Почему strace sudo командует бомбами, когда команда sudo работает?
  • Почему wget дает ошибку при выполнении с sudo, но отлично работает без?
  • Разрешить пользователям определенной группы запускать команду без sudo
  • Команда TC через веб-страницу как sudo
  • Запустить rsync с правами root на удаленной машине
  • Открытие оболочки Explorer с правами администратора на XP (с установленным IE7)
  • Как я могу запускать команды в PowerShell с разрешениями администратора?
  • Напишите мне, когда кто-нибудь запустит sudo
  • npm / yoman установить генератор-угловой без sudo
  • Как установить путь для команд sudo
  • Почему sudo меняет PATH?
  • Interesting Posts

    Ошибки CloneZilla при попытке клонирования и создания таблицы разделов пропорционально

    Timer & TimerTask против темы + спать в Java

    Обновление Windows 8 – Google Chrome в полноэкранном режиме

    Получить ServletContext в ресурсе JAX-RS

    Применение classаName / onClick / onChange не работает с компонентом Custom React

    Конструкторы против заводских методов

    Перемещение и исчезновение строк кода; проблема с XML-редактором Eclipse

    Могу ли я обновить свой ноутбук

    Как получить доступ к разделам EXT2, EX3 и EXT4 в Windows 7?

    Не удается запустить «показ» после установки ImageMagick на Ubuntu

    Бесплатный инструмент для проверки исходного кода C / C ++ на основе набора стандартов кодирования?

    Поддержка CentOS и / dev / midi

    Visual Studio 2015 или 2017 не обнаруживает модульные тесты

    Почему максимальная глубина рекурсии я могу достичь недетерминированной?

    Почему USB-накопители намного медленнее, чем твердотельные диски?

    Давайте будем гением компьютера.