fragen stichworte

Probleme mit Sudo im Pfad

Verwenden von:

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

Ich habe in meinem $HOME einen Ordner mit dem Namen ~/.scriptfarm/scripts, in dem ich einige meiner benutzerdefinierten Skripts aufbewahre.

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

Das Problem ist, dass in Ubuntu keines der Skripts funktioniert, wenn sudo vorangestellt ist. In Arch, wo die Skripte arbeiten, ist das Verhalten anders.

Lassen Sie mich ein Beispiel geben (aaa ist ein foobar-Skript):

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

Und wenn ein Echo $ PATH:

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

Wissen Sie, warum meine Skripts nicht funktionieren, wenn ich ihnen sudo voranstelle. Irgendwelche Lösungen?

Später bearbeiten: Die Lösung, die ich gefunden habe, war das Hinzufügen eines Alias ​​für sudo: sudo env PATH=$PATH $@.

antworten

Ihr Test ist irreführend, da PATH vor dem Aufruf von sudo erweitert wird. Tun Sie stattdessen:

sudo sh -c 'echo $PATH'

und Sie werden sehen, dass es einen anderen Pfad gibt.

Um /home/nomemory/.scriptfarm/scripts in Ihren systemweiten PATH aufzunehmen, können Sie /etc/profile ändern:

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

In Ubuntu (mindestens 10.04) gibt es eine Option in der Datei sudoers, um die Umgebung zurückzusetzen.

Defaults    env_reset

Sie können es entfernen oder sollten SETENV auf Benutzerbasis verwenden, um die alte Umgebung beizubehalten.

Die Manpage sagt über env_reset:

If set, sudo will reset the environment to only contain the LOGNAME, SHELL, USER, USERNAME and the SUDO_* variables. 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 the secure_path option is set, its value will be used for the PATH environment variable. This flag is on by default.

Es scheint, dass das Problem darin besteht, dass Ubuntu Sudo mit der Option SECURE_PATH kompiliert, wodurch es unmöglich wird, Ihre PATH-Umgebung zu übergeben. Sie können dies sehen, indem Sie die Option -V angeben, wenn Sie als Root ausgeführt werden. Daher gibt der Befehl sudo sudo -V eine Liste von Standardwerten aus. Es scheint, dass die einzige Problemumgehung darin besteht, Sudo neu zu kompilieren.

Ersetzen Sie nomemory durch den Namen Ihres Benutzerkontos, in dem sich diese Dateien befinden:

sudo ~nomemory/.scriptfarm/scripts/aaa

Absolute Pfade = ♥

Sie können mit which aaa herausfinden, wo sich aaa befindet, und dann von dort aus ausführen. Andernfalls können Sie möglicherweise

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