¿Por qué no puedo sudo algunos comandos? (por ejemplo, vim)

¿Por qué no puedo sudo algunos comandos? (por ejemplo, vim)

Tengo acceso sudo en el servidor de mis amigos, ejecutando centos-6.3, pero cuando intento ejecutar algunos comandos, sudo vim /var/www/html/index.htmlaparece un error sudo: vim: command not found, pero puedo ejecutar sudo suy luego vim /var/www/html/index.htmlfunciona como se esperaba.

echo $PATHy sudo echo $PATHambos dan:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vimsin embargo produce:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

He intentado agregar

export PATH=$PATH:/usr/local/bin

a lo /root/.bashrccual se solucionó el problema al usar, sudo supero no solo sudo <command>.

¿Cómo llego sudo <command>al trabajo?

Respuesta1

Cuando se ejecuta sudo, muchos sistemas están configurados para borrar del entorno todos los valores no incluidos en la lista blanca y restablecer la variable PATH a un valor desinfectado.

Encontrarás los primeros como Defaults env_resety varios Defaults env_keep += "SOME_VARIABLE_NAME"en /etc/sudoers. La última PATHanulación "segura" se especifica como Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin: elimine esta línea para eliminar este comportamiento al sudorealizar ing.


La forma en que se maneja qué variable de entorno se imprime cuando se ejecuta  sudo -Vcomo root.


Si no desea deshacerse de estos valores predeterminados, siempre puede especificar los programas utilizando su ruta completa ( sudo /usr/local/bin/vim).

Alternativamente, puede permitir que su cuenta esté SETENVen el sudoersarchivo, por ejemplo:

%wheel  ALL=(ALL)       SETENV: ALL

Esto le permite anular los valores predeterminados del entorno como este: sudo PATH=$PATH which vim, ya que su shell interpreta la variable antes de ejecutar el comando, lo que da como resultado un valor heredado PATH(que probablemente no incluirá, /sbinetc.).

Respuesta2

sudo echo $PATH

no hace lo que piensas. $PATHes reemplazado por (tu) caparazónantesejecutando el comando.

Para lograr el comportamiento deseado, puede utilizar sudo -i.

Dehombre sudo:

-yo ordeno]

El-i(simular el inicio de sesión inicial) la opción ejecuta el shell especificado en elcontraseña(5) entrada del usuario objetivo como shell de inicio de sesión. Esto significa que el shell leerá los archivos de recursos específicos de inicio de sesión, como .profileo . .loginSi se especifica un comando, se pasa al shell para su ejecución.

Respuesta3

¿Cómo llego sudo <command>al trabajo?

Hasta que resuelva el problema con las rutas, utilice un nombre de ruta completo

  sudo /usr/local/bin/vim /var/www/html/index.html

información relacionada