Habe einen Befehl in meinem $PATH, aber er wird nicht erkannt, wenn ich sudo verwende

Habe einen Befehl in meinem $PATH, aber er wird nicht erkannt, wenn ich sudo verwende

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.

verwandte Informationen