
Ich verwende Ubuntu 14.04. Ich habe Probleme, einen Befehl mit sudo in meinem $PATH abzurufen. Ich habe dies zu meiner /root/.profile-Datei hinzugefügt
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
export PATH=$PATH:/usr/local/rvm/rubies/default/bin
mesg n
Ich habe mich abgemeldet und als mein Benutzer mit Sudo-Berechtigungen wieder angemeldet. Dann versuche ich, den Befehl innerhalb von $PATH auszuführen, aber ich erhalte die Meldung „Befehl nicht gefunden“ …
daveuser@mymachine:/home/rails/myproject$ sudo gem pristine --all
sudo: gem: command not found
daveuser@mymachine:/home/rails/myproject$ sudo echo $PATH
/usr/local/rvm/gems/ruby-2.3.0/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/ bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/rvm/bin
daveuser@mymachine:/home/rails/myproject$ sudo which gem
daveuser@mymachine:/home/rails/myproject$ which gem
/usr/local/rvm/rubies/ruby-2.3.0/bin/gem
Beachten Sie, dass ich beim Echo von $PATH genau den Pfad erhalte, in dem sich der Befehl „gem“ befindet. Was muss ich sonst noch tun, damit mein Befehl „gem“ erkannt wird, wenn ich ihn als Sudo-Benutzer ausführe?
Bearbeiten:Die Preserve-Umgebung hat nicht funktioniert. Folgendes ist passiert …
remoteuser@remotemachine:/home/rails/myproject$ sudo --preserve-env gem pristine --all
[sudo] password for remoteuser:
sudo: gem: command not found
Bearbeitung 2:Ausgabe von sudo -l
remoteuser@rtemotemachine:/home/rails/myproject$ sudo -l
Matching Defaults entries for remoteuser on rtemotemachine:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User remoteuser may run the following commands on rtemotemachine:
(ALL : ALL) ALL
Antwort1
Standardmäßig setzt sudo Umgebungsvariablen aus Sicherheitsgründen zurück. Suchen Sie in /etc/sudoers nach der folgenden Zeile
Defaults env_reset
Die PATH-Variable wird auf den Wert „secure_path“ zurückgesetzt.
e.g. Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Du kannst es versuchen
sudo env "PATH=$PATH" [command]
zum Beibehalten des Pfads von sudo -E hat nicht funktioniert.
Eine bessere Erklärung findet sichHier
Antwort2
verwenden
sudo --preserve-env
-E, --preserve-env Gibt der Sicherheitsrichtlinie an, dass der Benutzer seine vorhandenen Umgebungsvariablen beibehalten möchte. Die Sicherheitsrichtlinie gibt möglicherweise einen Fehler zurück, wenn der Benutzer nicht über die Berechtigung zum Beibehalten der Umgebung verfügt.