Почему sudo меняет путь? - PullRequest
278 голосов
/ 03 ноября 2008

Это переменная PATH без sudo:

$ echo 'echo $PATH' | sh 
/opt/local/ruby/bin:/usr/bin:/bin

Это переменная PATH с sudo:

$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Насколько я могу судить, sudo должен оставить PATH нетронутым. В чем дело? Как мне это изменить? (Это на Ubuntu 8.04).

ОБНОВЛЕНИЕ: насколько я вижу, ни один из сценариев никоим образом не запускался с корневым изменением PATH.

С man sudo:

Чтобы предотвратить подделку команд, sudo проверяет ``. '' и `` '' (оба обозначают текущий каталог) последний при поиске для команды в ПУТИ пользователя (если один или оба в ПУТИ). Примечание, однако, что фактический ПУТЬ переменная окружения не изменена и передается без изменений в программу это sudo выполняется.

Ответы [ 17 ]

2 голосов
/ 29 июня 2010

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

sudo visudo

и добавить

Defaults exempt_group=your_goup

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

1 голос
/ 25 марта 2015

Вы также можете переместить свой файл в каталог, используемый sudoers:

    sudo mv $HOME/bash/script.sh /usr/sbin/ 
1 голос
/ 10 мая 2014

закомментируйте и "Default env_reset", и "Default secure_path ..." в файле / etc / sudores, которые мне подходят

1 голос
/ 08 июля 2011

рекомендуемое решение в комментариях к дистрибутиву OpenSUSE предлагает изменить:

Defaults env_reset

до:

Defaults !env_reset

и затем предположительно закомментировать следующую строку, которая не нужна:

Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE    MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L    ANGUAGE LINGUAS XDG_SESSION_COOKIE"
0 голосов
/ 12 июня 2017

$ PATH - переменная среды, и это означает, что значение $ PATH может отличаться для других пользователей.

Когда вы входите в свою систему, настройки вашего профиля определяют значение $ PATH .

Теперь давайте посмотрим: -

User       |        Value of $PATH
--------------------------
root                /var/www
user1               /var/www/user1
user2               /var/www/html/private

Предположим, что это значения $ PATH для другого пользователя. Теперь, когда вы выполняете любую команду с помощью sudo, в действительном смысле root пользователь выполняет эту команду.

Вы можете подтвердить, выполнив эти команды на терминале: -

user@localhost$ whoami
username
user@localhost$ sudo whoami
root
user@localhost$ 

Это причина. Я думаю, вам ясно.

0 голосов
/ 05 января 2017

PATH будет сброшен при использовании su или sudo по определению ENV_SUPATH и ENV_PATH, определенных в /etc/login.defs

0 голосов
/ 23 января 2009

Э-э, это не совсем тест, если вы не добавили что-то к своему пути:

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# 
...