Necesito ejecutar un programa instalado en / opt / godi / sbin (un directorio personalizado). Si agrego ese directorio a mi RUTA, agregando la siguiente línea a mi archivo .bashrc
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
entonces puedo intentar ejecutar el comando bien (excepto que falla porque necesita sudo). Sin embargo, cuando trato de usar sudo:
sudo godi_console
Obtuve el siguiente error
sudo: godi_console: command not found
La inspección de la variable PATH después de usar sudo revela que no incluye la misma PATH que tengo como usuario normal:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
¿Por qué la RUTA no es la misma? ¿Estoy haciendo algo mal? Estoy en Debian Jessie y desafortunadamente no puedo evitar el problema pasando sudo el enlace absoluto a godi_console porque godi_console en sí también depende de que la RUTA esté configurada correctamente.
sudo -E godi_console
.-E
significa "preservar el medio ambiente".secure_path
y / o env_reset están configurados como es el caso en muchassudo
implementaciones como en Debian.su
nosudo
, es unix.stackexchange.com/questions/460478 .Respuestas:
Siempre puedes hacer:
Como medida de seguridad en Debian,
/etc/sudoers
tiene lasecure_path
opción establecida en un valor seguro.Tenga en cuenta que:
Donde
sudo
trata los argumentos principales que contienen=
caracteres como asignaciones de variables de entorno por sí mismo, también funcionaría al ejecutarsegodi_console
con su$PATH
(a diferencia delsecure_path
) en su entorno, pero no afectaríasudo
la ruta de búsqueda del ejecutable, por lo que no ayudaríasudo
a encontrarlogodi_console
.fuente
sudo "PATH=$PATH" godi_console
Por cierto, no funcionó en CentOs7. Necesitaba el ambientesudo "PATH=$PATH" godi_console
Realmente alguna vez funcionó?sudo
aceptaVAR=value
argumentos, que afectan el entorno del comando que ejecuta, pero a diferencia deenv
obash
,sudo
no parece permitir que esto afecte la forma en que se ve el comando. Solo probé esto (recientemente) en Ubuntu 16.04. Pero intenté agregar laexempt_group
opciónsudoers
(solo para probar, ¡no lo considero una solución!) Y los resultados fueron esclarecedores. Los comandos del formularioPATH="$PATH" sudo some-command
comenzaron a funcionar, pero los del formulariosudo PATH="$PATH" some-command
todavía no.También puede establecer la RUTA predeterminada en
/etc/sudoers
edite el archivo usando
visudo
y actualiza la línea a lo que quieras:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
fuente
SUDO está reiniciando las variables env por defecto.
Consulte su manual y la opción llamada env_reset.
Solo necesita deshabilitarlo en / etc / sudoers.
fuente
env_reset
parece no afectarsudo
el comportamiento de w / r / t PATH.Esto funciona :
Ejemplo llamando a mi
gps
script que enumera los procesos de Nvidia GPU:Explicacion:
fuente
esto sobrevuela secure_path de mi lado
fuente
Esto funcionó:
No cambie $ PATH con su valor de ruta, simplemente escríbalo de esta manera
ejemplo:
$ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
fuente
Tal vez no sea precisamente lo que OP pide, pero esto podría ayudar:
Esto cambia la RUTA dentro del comando sudoed.
Editar: No estoy seguro de lo que quise decir con esto, ya que lo anterior no tiene sentido. Use lo siguiente en su lugar:
fuente