
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.