Используя 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). Я должен сказать, что это довольно запутанное поведение.
Ответы:
Используйте внимательно, есть проблемы безопасности с sudo и переменными.
Из того, что
man sudoers
я обнаружил, что вы должны использоватьВ Ubuntu
sudo
действительно сохраняет некоторые переменные.sudo -i
больше похоже на вход в систему как root и затем запуск команды. И то, и другое может быть неудобно, первый из нихsudo nano myfile
оставляет корневые файлы внутри вашего дома, а второйsudo -i nano myfile
попытается открыть / root / myfile.Бегать
и посмотрим, что это даст. Здесь это дает
например. Теперь запустите
sudo visudo
и добавьте строкузаменив тем, что вы нашли прямо перед этим. Добавьте новый путь к нему, если вам нужно.
О библиотеках:
В дистрибутивах Linux очень много заботы
PATH
, и вы действительно должны быть осторожны, прежде чем играть с ним. Будьте особенно осторожны при добавлении путей типа ".
" или/home/username
, это небезопасно.Одной из опасностей добавления путей является то, что они открываются для возможности выполнения файлов по этим путям
root
, открывая окна в системе безопасности, которые могут быть использованы вредоносным программным обеспечением. Могут быть и другие опасности. Просто убедитесь, что вы знаете, что делаете. Обходsudo
мер безопасности может сделать ваш Solaris таким же безопасным, как Windows XP.источник
sudo
писатели старались помешать вам сделать это. Вы не хотите загружать вредоносную библиотеку, потому что они были найдены в пути, используемом sudo Так вот почему он сбрасывается. Если вы кодируете материал, предназначенный для запуска пользователем root, скопируйте его в соответствующий системный каталог.Возиться с
sudoers
осторожностью следует, как уже говорили другие.Более простой подход для более простых случаев, когда есть определенные переменные окружения, которые вы хотите сохранить, состоит в том, чтобы просто передать нужную переменную окружения непосредственно через sudo (это показано, как
[VAR=value]
в справке sudo cmdline).Посмотрите этот небольшой пример, где я также продемонстрировал его для более чем одной переменной.
Для исходного
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
говорит? Если ничего, убедитесь, что PYTHONPATH экспортирован, запустивexport PYTHONPATH
и попробуйте снова.Что
sudo env | grep PYTHONPATH
говорит? Если он печатает ожидаемое значение, то что-то еще перезаписывает ваше значение PYTHONPATH. Может быть root .bashrc или .bash_profile или общесистемные файлы конфигурации.источник
editor
или,passprompt
чтобы проверить, есть ли у вас правильный файл. Или используйте strace, dtrace, truss или подобное и посмотрите, какие файлы он открывает.Согласно документации Ubuntu для LD_LIBRARY_PATH :
Затем:
Добавьте
ld.so
файл конфигурации/etc/ld.so.conf.d/
с указанием пути вашегоLD_LIBRARY_PATH
Обновите кеш:
источник