Cómo configurar la ruta para los comandos sudo

37

Si emito

sudo my-command

¿Cómo busca Linux eso my-command?

El my-commandestá en mi camino. Puedo invocarlo sin ningún problema. Sin embargo, cuando lo invoque sudo, lo obtendré command not found. Interesante, nunca experimentes esto antes. ¿Como sobrellevar?

EDIT: Esto "duplicado Posible" 's respuesta seleccionada está mal, bueno, al menos no hasta el punto. Esta respuesta, de terdon, es la correcta.

xpt
fuente

Respuestas:

48

Esto normalmente se establece mediante la secure_pathopción en /etc/sudoers. De man sudoers:

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

Para ejecutar comandos que no están en el valor predeterminado $PATH, puede

  1. Utilice la ruta completa: sudo ~/bin/my-command; o

  2. Agregue el directorio que contiene el comando a secure_path. Ejecute sudo visudoy edite la línea de ruta segura:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    Guarde el archivo y la próxima vez que lo ejecute sudo, el directorio ~/binestará en su $PATH.

terdon
fuente
2
O simplemente comente toda la línea si esta no es una máquina de producción y no nos importa. Luego usará la RUTA de los usuarios. Dice que no está configurado de forma predeterminada, pero eso puede no ser siempre cierto ...
Nagev
2

Esto es lo que usé para una solución alternativa:

sudo cp $(which my-command) /usr/bin
...

El whichcomando se ejecuta en una subshell que no es root, por lo que puede encontrar my-command, luego, sudo copia el ejecutable en una ruta a la que el rootusuario puede acceder. No es bueno para la seguridad, pero estaba bien para mí ejecutar una imagen de acoplador que se estaba destruyendo justo después de ejecutar el comando.

Brenden Smith
fuente