Мне нужно запустить command под userx используя sudo, который обычно недоступен в PATH . Command доступна в bash под userx из-за HOME/.bashrc .

Просто если я запускаю в bash под userx

echo $PATH
/opt/sw-python/extra/pythonbrew/bin:/opt/sw-python/extra/pythonbrew/pythons/Python-2.7.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Я получаю правильный PATH и command доступна.

Но если я бегу с sudo:

sudo -u userx echo $PATH
/home/curuser/.pythonbrew/bin:/home/curuser/.pythonbrew/pythons/Python-2.7.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

sudo -H -u userx echo $PATH
/home/curuser/.pythonbrew/bin:/home/curuser/.pythonbrew/pythons/Python-2.7.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

sudo su python -c 'echo $PATH'
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

sudo su python -c 'bash -c "echo $PATH"'
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Переменная PATH не устанавливается с помощью userx .bashrc .

Как запустить с sudo, чтобы PATH был обычным PATH под userx?

1 ответ1

2

Запустите sudo с -i чтобы он запустил новую интерактивную оболочку (и загрузите все пользовательские конфигурации).

  -i [command]
               The -i (simulate initial login) option runs the shell specified by the password database entry of the target user as a
               login shell.  This means that login-specific resource files such as .profile or .login will be read by the shell.  If
               a command is specified, it is passed to the shell for execution via the shell's -c option.  If no command is
               specified, an interactive shell is executed.  sudo attempts to change to that user's home directory before running the
               shell.  The security policy shall initialize the environment to a minimal set of variables, similar to what is present
               when a user logs in.  The Command Environment section in the sudoers(5) manual documents how the -i option affects the
               environment in which a command is run when the sudoers policy is in use.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .