Почему sudo изменяет ПУТЬ?

279
задан Jaime Hablutzel 6 November 2018 в 16:41
поделиться

8 ответов

Это - раздражающий функциональный функция из sudo на многих дистрибутивах.

Для работы вокруг этой "проблемы" над ubuntu I делают следующее в моем вышеупомянутом Примечания ~/.bashrc

alias sudo='sudo env PATH=$PATH'

будет работать на команды, которые не сбрасывают $PATH сами. Однако 'su' сбрасывает, это - $PATH, таким образом, необходимо использовать-p для сообщения его не. Т.Е.:

sudo su -p
235
ответ дан Braiam 23 November 2019 в 02:02
поделиться

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# 
0
ответ дан 23 November 2019 в 02:02
поделиться

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}" 
32
ответ дан Kent Fredric 23 November 2019 в 02:02
поделиться

Похож на эту ошибку, был вокруг долгое время! Вот некоторые ссылки ошибки, которые можно найти полезным (и может хотеть подписаться на / голосование, подсказка, подсказка...):

<час>

ошибка 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.....

я попробовал следующее для фиксации этого без успеха:

  1. Используя" sudo -E" опция - не работала. Мой существующий ПУТЬ был все еще сброшен sudo

  2. , Изменяющимся" Defaults env_reset" к" Defaults !env_reset" в/etc/sudoers - также не работал (даже когда объединено с sudo-E)

  3. , Некомментарий env_reset (например," #Defaults env_reset") в/etc/sudoers - также не работал.

  4. Добавление' Defaults env_keep += "PATH"' к/etc/sudoers - также не работало.

Очевидно - несмотря на документацию человека - sudo полностью hardcoded относительно ПУТИ и не позволяет гибкости относительно сохранения пользовательского ПУТИ. Очень раздражающий, поскольку я не могу запустить программное обеспечение не по умолчанию в соответствии с корневыми полномочиями с помощью sudo.

17
ответ дан Tyler Rick 23 November 2019 в 02:02
поделиться

Теперь работает с использованием 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:~$ 

Замечательно, что наконец эта проблема решена без использования взлома.

7
ответ дан 23 November 2019 в 02:02
поделиться
# 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"
4
ответ дан 23 November 2019 в 02:02
поделиться

Просто закомментируйте "Defaults env_reset" в / etc / sudoers

3
ответ дан 23 November 2019 в 02:02
поделиться

Secure_path - ваш друг, но если вы хотите освободить себя от secure_path, просто выполните

sudo visudo

и добавьте

Defaults exempt_group=your_goup

Если вы хотите исключить группу пользователей, создайте группу, добавьте в нее всех пользователей и используйте ее в качестве вашей exc_group. man 5 sudoers для большего.

2
ответ дан 23 November 2019 в 02:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: