Esta es la PATH
variable sin sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
Esta es la PATH
variable con sudo:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Por lo que puedo decir, sudo
se supone que debe dejarlo PATH
intacto. ¿Que esta pasando? ¿Cómo cambio esto? (Esto está en Ubuntu 8.04).
ACTUALIZACIÓN: por lo que puedo ver, ninguno de los scripts comenzó como cambio de raíz PATH
de ninguna manera.
De man sudo
:
Para evitar la suplantación de comandos, sudo comprueba ``. '' Y `` '' (ambos denotan el directorio actual) al buscar un comando en la RUTA del usuario (si uno o ambos están en la RUTA). Sin embargo, tenga en cuenta que la variable de entorno PATH real no se modifica y se pasa sin cambios al programa que ejecuta sudo.
path
environment-variables
sudo
Michiel de Mare
fuente
fuente
Respuestas:
Esto es
una función molestaUna característica de sudo en muchas distribuciones.Para solucionar este "problema" en ubuntu, hago lo siguiente en mi ~ / .bashrc
Tenga en cuenta que lo anterior funcionará para los comandos que no restablecen los $ PATH ellos mismos. Sin embargo, 'su' restablece su $ PATH, por lo que debe usar -p para decirle que no lo haga. ES DECIR:
fuente
En caso de que alguien más se encuentre con esto y quiera deshabilitar todos los cambios de variables de ruta para todos los usuarios.
Acceder a su archivo sudoers con el comando:
visudo
. Debería ver la siguiente línea en alguna parte:que debe agregar lo siguiente en la siguiente línea
secure_path está habilitado de forma predeterminada. Esta opción especifica qué hacer $ PATH al sudoar. El signo de exclamación desactiva la función.
fuente
Defaults env_keep = "PATH"
PATH
es una variable de entorno y, como tal, se restablece de forma predeterminada por sudo.Necesita permisos especiales para poder hacerlo.
De
man sudo
Un ejemplo de uso:
actualizar
Por lo tanto, es posible que deba verificar que esto esté / no esté compilado.
Es por defecto en Gentoo
fuente
¡Parece que este error ha existido por bastante tiempo! Aquí hay algunas referencias de errores que puede encontrar útiles (y puede que desee suscribirse / votar, pista, pista ...):
Error de Debian # 85123 ("sudo: SECURE_PATH todavía no se puede anular") (¡desde 2001!)
Mencionan poner algo como esto en su archivo sudoers:
pero cuando hago eso en Ubuntu 8.10 al menos, me da este error:
Error de Ubuntu # 50797 ("sudo construido con --with-secure-path es problemático")
Error de Ubuntu # 192651 ("la ruta de sudo siempre se restablece")
Error de Ubuntu # 226595 ("imposible de retener / especificar RUTA")
fuente
Esto pareció funcionar para mí.
que toma el no-sudo
PATH
fuente
Creo que, de hecho, es deseable que sudo restablezca la RUTA: de lo contrario, un atacante que haya comprometido su cuenta de usuario podría poner versiones de todo tipo de herramientas en la RUTA de sus usuarios, y se ejecutarían al usar sudo.
(por supuesto, sudo reset the PATH no es una solución completa para este tipo de problemas, pero ayuda)
De hecho, esto es lo que sucede cuando usas
en / etc / sudoers sin usar
exempt_group
oenv_keep
.Esto también es conveniente porque puede agregar directorios que solo son útiles para root (como
/sbin
y/usr/sbin
) a la ruta sudo sin agregarlos a las rutas de sus usuarios. Para especificar la ruta que utilizará sudo:fuente
Funciona ahora usando sudo de los repositorios kármicos. Detalles de mi configuración:
Es maravilloso finalmente resolver esto sin usar un truco.
fuente
fuente
Solo comente "Valores predeterminados env_reset" en / etc / sudoers
fuente
Solo edita
env_keep
en/etc/sudoers
Se parece a esto:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
Simplemente agregue PATH al final, para que después del cambio se vea así:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
Cierre la terminal y luego ábrala nuevamente.
fuente
Secure_path es tu amigo, pero si quieres eximirte de secure_path solo hazlo
Y anexar
Si desea eximir a un grupo de usuarios, cree un grupo, agréguelo a todos los usuarios y úselo como su grupo exento. Hombre 5 sudoers para más.
fuente
La solución recomendada en los comentarios sobre la distribución de OpenSUSE sugiere cambiar:
a:
y presumiblemente comentar la siguiente línea que no es necesaria:
fuente
comentar tanto "Default env_reset" como "Default secure_path ..." en el archivo / etc / sudores me funciona
fuente
También puede mover su archivo en un directorio usado de sudoers:
fuente
Er, no es realmente una prueba si no agregas algo a tu camino:
fuente
La RUTA se restablecerá cuando se use su o sudo según la definición de ENV_SUPATH y ENV_PATH definida en /etc/login.defs
fuente
$ PATH es una variable de entorno y significa que el valor de $ PATH puede diferir para otros usuarios.
Cuando inicie sesión en su sistema, la configuración de su perfil decidirá el valor de $ PATH .
Ahora, echemos un vistazo: -
Suponga que estos son los valores de $ PATH para diferentes usuarios. Ahora, cuando está ejecutando cualquier comando con sudo, entonces, en el sentido real, el usuario root ejecuta ese comando.
Puede confirmar ejecutando estos comandos en la terminal: -
Esta es la razón. Creo que está claro para ti.
fuente