Это - раздражающий функциональный функция из sudo на многих дистрибутивах.
Для работы вокруг этой "проблемы" над ubuntu I делают следующее в моем вышеупомянутом Примечания ~/.bashrc
alias sudo='sudo env PATH=$PATH'
будет работать на команды, которые не сбрасывают $PATH сами. Однако 'su' сбрасывает, это - $PATH, таким образом, необходимо использовать-p для сообщения его не. Т.Е.:
sudo su -p
Er, это не действительно тест, если Вы не добавляете что-то к своему пути:
bill@bill-desktop:~$ ls -l /opt/pkg/bin total 12 -rwxr-xr-x 1 root root 28 2009-01-22 18:58 foo bill@bill-desktop:~$ which foo /opt/pkg/bin/foo bill@bill-desktop:~$ sudo su root@bill-desktop:/home/bill# which foo root@bill-desktop:/home/bill#
PATH
переменная среды, и как таковой значением по умолчанию, сброшенным sudo.
Вам нужны специальные полномочия, которым разрешат сделать это.
От man sudo
-E The -E (preserve environment) option will override the env_reset option in sudoers(5)). It is only available when either the match- ing command has the SETENV tag or the setenv option is set in sudo- ers(5).
Environment variables to be set for the command may also be passed on the command line in the form of VAR=value, e.g. LD_LIBRARY_PATH=/usr/local/pkg/lib. Variables passed on the command line are subject to the same restrictions as normal environment vari- ables with one important exception. If the setenv option is set in sudoers, the command to be run has the SETENV tag set or the command matched is ALL, the user may set variables that would overwise be for- bidden. See sudoers(5) for more information.
Пример использования:
cat >> test.sh
env | grep "MYEXAMPLE" ;
^D
sh test.sh
MYEXAMPLE=1 sh test.sh
# MYEXAMPLE=1
MYEXAMPLE=1 sudo sh test.sh
MYEXAMPLE=1 sudo MYEXAMPLE=2 sh test.sh
# MYEXAMPLE=2
man 5 sudoers : env_reset If set, sudo will reset the environment to only contain the LOGNAME, SHELL, USER, USERNAME and the SUDO_* vari- ables. Any variables in the caller's environment that match the env_keep and env_check lists are then added. The default contents of the env_keep and env_check lists are displayed when sudo is run by root with the -V option. If sudo was compiled with the SECURE_PATH option, its value will be used for the PATH environment variable. This flag is on by default.
Так, возможно, должно проверить, что это не компилируется в.
Это находится по умолчанию в хинду
# ( From the build Script )
....
ROOTPATH=$(cleanpath /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin${ROOTPATH:+:${ROOTPATH}})
....
econf --with-secure-path="${ROOTPATH}"
Похож на эту ошибку, был вокруг долгое время! Вот некоторые ссылки ошибки, которые можно найти полезным (и может хотеть подписаться на / голосование, подсказка, подсказка...):
<час>ошибка Debian № 85123 ("sudo: SECURE_PATH все еще не может быть переопределен") (с 2001!)
кажется, что Bug#20996 все еще присутствует в этой версии sudo. Журнал изменений говорит, что может быть переопределен во времени выполнения, но я еще не обнаружил как.
Они упоминают, что поместили что-то вроде этого в Ваш sudoers файл:
Defaults secure_path="/bin:/usr/bin:/usr/local/bin"
, но когда я делаю это в Ubuntu 8.10, по крайней мере, она дает мне эту ошибку:
visudo: unknown defaults entry `secure_path' referenced near line 10
<час> ошибка Ubuntu № 50797 ("sudo созданный с - with-secure-path проблематичен")
Что еще хуже, насколько я могу сказать, невозможно повторно указать secure_path в sudoers файле. Таким образом, если, например, Вы хотите предложить свой пользовательский легкий доступ к чему-то под/, выбирают, необходимо перекомпилировать sudo.
<час>Да. Там потребности , чтобы быть способом переопределить эту "функцию", не имея необходимость перекомпилировать. Ничто худшее затем фанатики безопасности, говорящие Вам, что является лучшим для Вашей среды и затем не предоставления Вам способ выключить его.
<час>Это является действительно раздражающим. Могло бы быть мудро держать поведение в курсе по умолчанию из соображений безопасности, но должен быть способ переопределить его кроме перекомпиляции от исходного кода! Многие люди НУЖДАЮТСЯ в наследовании ПУТИ. Интересно, почему никакие специалисты по обслуживанию не изучают его, который кажется легким предложить приемлемое решение.
<час>я работал вокруг этого как это:
mv /usr/bin/sudo /usr/bin/sudo.orig
затем создают файл/usr/bin/sudo содержащий следующее:
#!/bin/bash /usr/bin/sudo.orig env PATH=$PATH "$@"
затем Ваши регулярные работы sudo точно так же, как не безопасный путь <час> sudo
ошибка Ubuntu № 192651 ("sudo путь всегда сбрасывается")
<час>, Учитывая, что дубликат этой ошибки был первоначально зарегистрирован в июле 2006, я не ясен, сколько времени неэффективный env_keep был в действии. Безотносительно достоинств вынудить пользователей использовать приемы, такие как упомянутый выше, конечно, страницы справочника для sudo и sudoers должны отразить то, что опции изменить ПУТЬ эффективно избыточны.
документация Изменения для отражения фактического выполнения не дестабилизирует и очень полезная.
ошибка Ubuntu № 226595 ("невозможный сохранить/указать ПУТЬ")
я должен смочь выполнить sudo с дополнительными двоичными папками нестанд. в ПУТИ. Уже добавив мои требования к/etc/environment, я был удивлен, когда я получил ошибки о пропавших без вести команд при выполнении их под sudo.....
я попробовал следующее для фиксации этого без успеха:
Используя"
sudo -E
" опция - не работала. Мой существующий ПУТЬ был все еще сброшен sudo, Изменяющимся"
Defaults env_reset
" к"Defaults !env_reset
" в/etc/sudoers - также не работал (даже когда объединено с sudo-E), Некомментарий
env_reset
(например,"#Defaults env_reset
") в/etc/sudoers - также не работал.Добавление'
Defaults env_keep += "PATH"
' к/etc/sudoers - также не работало.Очевидно - несмотря на документацию человека - sudo полностью hardcoded относительно ПУТИ и не позволяет гибкости относительно сохранения пользовательского ПУТИ. Очень раздражающий, поскольку я не могу запустить программное обеспечение не по умолчанию в соответствии с корневыми полномочиями с помощью sudo.
Теперь работает с использованием sudo из кармических репозиториев. Подробности из моей конфигурации:
root@sphinx:~# cat /etc/sudoers | grep -v -e '^$' -e '^#'
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/grub-1.96/sbin:/opt/grub-1.96/bin"
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
root@sphinx:~# cat /etc/apt/sources.list
deb http://au.archive.ubuntu.com/ubuntu/ jaunty main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ jaunty main restricted universe
deb http://au.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted universe
deb http://security.ubuntu.com/ubuntu jaunty-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu jaunty-security main restricted universe
deb http://au.archive.ubuntu.com/ubuntu/ karmic main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ karmic main restricted universe
deb http://au.archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe
deb-src http://au.archive.ubuntu.com/ubuntu/ karmic-updates main restricted universe
deb http://security.ubuntu.com/ubuntu karmic-security main restricted universe
deb-src http://security.ubuntu.com/ubuntu karmic-security main restricted universe
root@sphinx:~#
root@sphinx:~# cat /etc/apt/preferences
Package: sudo
Pin: release a=karmic-security
Pin-Priority: 990
Package: sudo
Pin: release a=karmic-updates
Pin-Priority: 960
Package: sudo
Pin: release a=karmic
Pin-Priority: 930
Package: *
Pin: release a=jaunty-security
Pin-Priority: 900
Package: *
Pin: release a=jaunty-updates
Pin-Priority: 700
Package: *
Pin: release a=jaunty
Pin-Priority: 500
Package: *
Pin: release a=karmic-security
Pin-Priority: 450
Package: *
Pin: release a=karmic-updates
Pin-Priority: 250
Package: *
Pin: release a=karmic
Pin-Priority: 50
root@sphinx:~# apt-cache policy sudo
sudo:
Installed: 1.7.0-1ubuntu2
Candidate: 1.7.0-1ubuntu2
Package pin: 1.7.0-1ubuntu2
Version table:
*** 1.7.0-1ubuntu2 930
50 http://au.archive.ubuntu.com karmic/main Packages
100 /var/lib/dpkg/status
1.6.9p17-1ubuntu3 930
500 http://au.archive.ubuntu.com jaunty/main Packages
root@sphinx:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/grub-1.96/sbin:/opt/grub-1.96/bin
root@sphinx:~# exit
exit
abolte@sphinx:~$ echo $PATH
/home/abolte/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/grub-1.96/sbin:/opt/grub-1.96/bin:/opt/chromium-17593:/opt/grub-1.96/sbin:/opt/grub-1.96/bin:/opt/xpra-0.0.6/bin
abolte@sphinx:~$
Замечательно, что наконец эта проблема решена без использования взлома.
# cat .bash_profile | grep PATH
PATH=$HOME/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
export PATH
# cat /etc/sudoers | grep Defaults
Defaults requiretty
Defaults env_reset
Defaults env_keep = "SOME_PARAM1 SOME_PARAM2 ... PATH"
Просто закомментируйте "Defaults env_reset" в / etc / sudoers
Secure_path - ваш друг, но если вы хотите освободить себя от secure_path, просто выполните
sudo visudo
и добавьте
Defaults exempt_group=your_goup
Если вы хотите исключить группу пользователей, создайте группу, добавьте в нее всех пользователей и используйте ее в качестве вашей exc_group. man 5 sudoers для большего.