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

16

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.htmlsi recibiera un error sudo: vim: command not found, puedo ejecutarlo sudo suy vim /var/www/html/index.htmlfunciona de la manera esperada.

echo $PATHy sudo echo $PATHambos 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/.bashrccual se solucionó el problema al usar sudo supero no solo sudo <command>.

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

JaredMcAteer
fuente
¿Ya ha agregado ese usuario a los sudoers en el sistema operativo Centos?
AAlvz

Respuestas:

18

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_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 cuando sudoing.


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


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 SETENVen el sudoersarchivo, por ejemplo:

%wheel  ALL=(ALL)       SETENV: ALL

Esto le permite anular los valores predeterminados del entorno de esta manera: sudo PATH=$PATH which vimya que la variable es interpretada por su shell antes de que se ejecute el comando, lo que da como resultado una herencia PATH(que probablemente no incluirá, /sbinetc.).

Daniel Beck
fuente
Gracias. Usaré el trabajo de Dennis hasta que logre que el propietario modifique el archivo sudoers.
JaredMcAteer
6
sudo echo $PATH

No hace lo que piensas. $PATHes reemplazado por (su) shell antes de ejecutar el comando.

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

Del hombre sudo :

-yo ordeno]

La opción -i ( simular inicio de sesión inicial ) ejecuta el shell especificado en la entrada passwd (5) del usuario objetivo como un shell de inicio de sesión. Esto significa que los archivos de recursos específicos de inicio de sesión como .profileo .loginserán leídos por el shell. Si se especifica un comando, se pasa al shell para su ejecución.

Dennis
fuente
1
Esta es una solución adecuada hasta que pueda hacer que el propietario ajuste el archivo sudoers.
JaredMcAteer
1

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

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

  sudo /usr/local/bin/vim /var/www/html/index.html
RedGrittyBrick
fuente
55
No voy a downvote usted, pero estoy no aficionado a sólo trabajar alrededor de los problemas en lugar de obtener directamente al punto de calcular hacia fuera y la fijación de ellos.
Nicole Hamilton