Tengo un comando en mi $PATH, pero no se reconoce cuando uso sudo

Tengo un comando en mi $PATH, pero no se reconoce cuando uso sudo

Estoy usando Ubuntu 14.04. Tengo problemas para recoger un comando en mi $PATH usando sudo. He añadido esto a mi archivo /root/.profile

# ~/.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

Cerré la sesión y volví a iniciarla como mi usuario con privilegios sudo. Luego intento ejecutar el comando dentro de $PATH pero aparece un "comando no encontrado"...

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

Observe que cuando hago eco de $PATH obtengo exactamente la RUTA donde se encuentra el comando "gema". ¿Qué más debo hacer para que se reconozca mi comando "gema" cuando ejecuto el comando como usuario sudo?

Editar:El preserve-env no funcionó. esto es lo que pasó...

remoteuser@remotemachine:/home/rails/myproject$ sudo --preserve-env gem pristine --all
[sudo] password for remoteuser: 
sudo: gem: command not found

Edición 2:salida de 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

Respuesta1

De forma predeterminada, sudo restablece las variables de entorno por razones de seguridad, verifique la siguiente línea en /etc/sudoers

Defaults    env_reset

La variable PATH se restablece al valor "secure_path".

e.g. Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Puedes probar

sudo env "PATH=$PATH" [command]para preservar la ruta de sudo -E no funcionó.

Se puede encontrar una mejor explicación.aquí

Respuesta2

usar

sudo --preserve-env

-E, --preserve-env Indica a la política de seguridad que el usuario desea preservar sus variables de entorno existentes. La política de seguridad puede devolver un error si el usuario no tiene permiso para preservar el medio ambiente.

información relacionada