Tengo acceso a sudo en el servidor de mis amigos, ejecutando centos-6.3, pero cuando intento ejecutar algunos comandos como sudo vim /var/www/html/index.html
si recibiera un error sudo: vim: command not found
, puedo ejecutarlo sudo su
y vim /var/www/html/index.html
funciona de la manera esperada.
echo $PATH
y sudo echo $PATH
ambos producen:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
sin embargo produce:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
He intentado agregar
export PATH=$PATH:/usr/local/bin
al /root/.bashrc
cual se solucionó el problema al usar sudo su
pero no solo sudo <command>
.
¿Cómo llego sudo <command>
al trabajo?
Respuestas:
Cuando se ejecuta
sudo
, muchos sistemas están configurados para borrar el entorno de todos los valores no incluidos en la lista blanca y restablecer la variable PATH a un valor desinfectado.Encontrará el primero como
Defaults env_reset
y variosDefaults env_keep += "SOME_VARIABLE_NAME"
en/etc/sudoers
. La últimaPATH
anulación "segura" se especifica comoDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
: elimine esta línea para eliminar este comportamiento cuandosudo
ing.La forma en que se maneja la variable de entorno se imprime cuando se ejecuta
sudo -V
comoroot
.Si no desea deshacerse de estos valores predeterminados, siempre puede especificar programas utilizando su ruta completa (
sudo /usr/local/bin/vim
).Alternativamente, puede permitir que su cuenta
SETENV
en elsudoers
archivo, por ejemplo:Esto le permite anular los valores predeterminados del entorno de esta manera:
sudo PATH=$PATH which vim
ya que la variable es interpretada por su shell antes de que se ejecute el comando, lo que da como resultado una herenciaPATH
(que probablemente no incluirá,/sbin
etc.).fuente
No hace lo que piensas.
$PATH
es reemplazado por (su) shell antes de ejecutar el comando.Para lograr el comportamiento deseado, puede usar
sudo -i
.Del hombre sudo :
fuente
Hasta que resuelva el problema con las rutas, use un nombre de ruta completo
fuente