Назад | Перейти на главную страницу

Проблемы с sudo в пути

С помощью:

Linux nomemory 2.6.32-24-generic #43-Ubuntu SMP Thu Sep 16 14:17:33 UTC 2010 i686 GNU/Linux

У меня есть папка в моем $HOME называется ~/.scriptfarm/scripts где я храню некоторые свои собственные скрипты.

nomemory@nomemory:~$ ls -l /home/nomemory/.scriptfarm/script
total 20
-rwxr-xr-x 1 nomemory nomemory 10 2010-09-21 01:31 aaa
-rwxr-xr-x 1 nomemory nomemory 31 2010-09-21 00:47 pt.chc
-rwxr-xr-x 1 nomemory nomemory 35 2010-09-21 00:47 pt.int
-rwxr-xr-x 1 nomemory nomemory 34 2010-09-21 00:47 pt.rem
-rwxr-xr-x 1 nomemory nomemory 54 2010-09-21 00:47 pt.up

Проблема в том, что в Ubuntu ни один из скриптов не работает с префиксом sudo. В Arch, где скрипты работают, поведение другое.

Позвольте мне привести Вам пример (aaa скрипт типа foobar):

nomemory@nomemory:~$ aaa
aaa
nomemory@nomemory:~$ sudo aaa
sudo: aaa: command not found
nomemory@nomemory:~$

И если эхо $ PATH:

nomemory@nomemory:~$ sudo echo $PATH
/home/nomemory/.scriptfarm/script:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Вы знаете, почему мои скрипты не работают, если я ставлю перед ними префикс sudo. Какие-нибудь решения?

Позже отредактируйте: Обходной путь, который я нашел, заключался в добавлении псевдонима для sudo: sudo env PATH=$PATH $@ .

Ваш тест вводит в заблуждение, потому что PATH раскрывается перед вызовом sudo. Вместо этого сделайте:

sudo sh -c 'echo $PATH'

и вы увидите, что есть другой путь.

Включать /home/nomemory/.scriptfarm/scripts в вашей общесистемной PATH вы можете изменить /etc/profile:

PATH="$PATH:/home/nomemory/.scriptfarm/scripts"

Похоже, проблема в том, что Ubuntu компилирует sudo с SECURE_PATH вариант, что делает невозможным передачу среды PATH. Вы можете увидеть это, указав -V вариант при запуске от имени root. Таким образом, команда sudo sudo -V выводит список значений по умолчанию. Похоже, единственный обходной путь - перекомпилировать sudo.

В Ubuntu (по крайней мере, 10.04) есть опция в sudoers файл для сброса среды.

Defaults    env_reset

Вы можете удалить его или использовать SETENV для каждого пользователя, чтобы сохранить старую среду.

На странице руководства говорится о env_reset:

Если установлено, sudo сбросит среду, чтобы она содержала только LOGNAME, SHELL, USER, USERNAME и переменные SUDO_ *. Затем добавляются любые переменные в среде вызывающего абонента, соответствующие спискам env_keep и env_check. Содержимое по умолчанию списков env_keep и env_check отображается, когда sudo запускается от root с параметром -V. Если установлена ​​опция secure_path, ее значение будет использоваться для переменной среды PATH. По умолчанию этот флаг установлен.

Вы могли бы использовать which aaa чтобы узнать, где находится aaa, затем запустите его оттуда. В противном случае вы сможете

 sudo 'export PATH='$PATH'; aaa'

Замена nomemory для имени вашей учетной записи эти файлы находятся в:

sudo ~nomemory/.scriptfarm/scripts/aaa

Абсолютные пути = ♥