¿Qué entorno obtengo con sudo?

15

Cuando ejecuto sudo, ¿qué sucede exactamente con mi entorno?

Cuando ejecuto sudo command, no parece ver mi entorno o el de la raíz. Por ejemplo, mi ruta para ambos incluye /usr/local/bin, pero si intento ejecutar uno de los programas sin la ruta completa, falla.

Pensé que sudo se ejecutaba como root y, por lo tanto, obtuve el entorno de root. ¿Hay alguna manera diferente de que bash se ejecute bajo sudo que bajo root o mi usuario normal?

EDITAR:

He estado usando sudo -iúltimamente, pero recientemente ha estado causando problemas porque mi directorio de trabajo actual está configurado en /root. Esto es como se esperaba (más o menos), pero todavía no entiendo por qué sudo no reconoce mis ejecutables /usr/local/bin.

EDITAR:

Estoy ejecutando Fedora 15.

beatgammit
fuente
¿Qué sistema operativo está utilizando (si es Linux, qué distribución)? Hay (también) muchas formas de configurar PATH, y a veces no es fácil encontrar quién lo anula en último lugar. Podría ser alguna configuración del sistema (por ejemplo, en PAM), sudo o una secuencia de comandos de perfil posterior.
Gilles 'SO- deja de ser malvado'
@ Gilles- Buen punto. Agregué mi sistema operativo. Realmente solo me di cuenta de esto en Fedora (solía usar Ubuntu), pero pensé que era porque no agregaban mucha configuración conveniente.
beatgammit 05 de

Respuestas:

6

No sé acerca de los valores predeterminados en Fedora, pero en Debian los sudovalores predeterminados para usar la secure_pathopción con un valor predeterminado de /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Esto significa que la ruta cambia a ese valor cada vez que la usa sudo; pero cuando lo usa sudo -i, la ruta cambia después de eso por los archivos RC del usuario raíz.

Arrowmaster
fuente
No sabía sobre la secure_pathopción. El valor predeterminado no se incluyó /usr/local/binen mi instalación. ¡Gracias, esto realmente ayudó a aclarar las cosas!
beatgammit
4

Puedes comprobar esto bastante fácil con cosas como

Compare la salida de

sudo env 
env

Y cosas como

sudo whoami 
whoami

De esa manera, puede intentar averiguar qué falta en su configuración.

Johan
fuente
Genial, no sabía sobre eso. De todos modos, /usr/local/binno está en mi sudo env, pero está en mi root env y usuario env. ¿Por qué es esto?
beatgammit 05 de
sudo whoami regresa root, como se esperaba. ¿Qué podría estar causando que mi sudo env sea diferente a mi raíz env?
beatgammit 05 de
No lo sé, pero debe haber alguna configuración faltante en alguna parte, / usr / local / bin generalmente se incluye. ¿Tal vez borraste el env $ PATH por error en algún archivo de configuración?
Johan
¿Sudo source /root/.bashrc? ¿Ahí es donde agrego /usr/local/bina la ruta de root (desafortunadamente tuve que hacer esto manualmente)?
beatgammit 05 de
Creo que debería modificar su configuración global de shells y ver qué sucede. Si está ejecutando bash, sería algo así como /etc/bash.bashrc
Johan
2

El sudo -icomando simula el inicio de sesión inicial. En mi sistema Debian, también dice que:

Esto significa que el shell leerá los archivos de recursos específicos de inicio de sesión como .profile o .login. Si se especifica un comando, se pasa al shell para su ejecución. De lo contrario, se ejecuta un shell interactivo. sudo intenta cambiar al directorio de inicio de ese usuario antes de ejecutar el shell. También inicializa el entorno, dejando la PANTALLA y el TÉRMINO sin cambios, configurando INICIO, CORREO, SHELL, USUARIO, NOMBRE DE REGISTRO y RUTA, así como los contenidos de / etc / environment en los sistemas Linux y AIX. Todas las demás variables de entorno se eliminan.

M'vy
fuente
0

Puede ajustar sudoel env_keepparámetro para incluirlo PATH, aunque debe tener en cuenta las implicaciones de seguridad de hacerlo.

visudo

... iniciará su $EDITOR, luego puede hacer cambios aDefaults env_keep = ... según corresponda.

Además, puede agregar / usr / local / bin a la ruta del sistema agregando archivos a /etc/profile.d .

p.ej:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF
Brian Cain
fuente
sudotiene un manejo especial de PATHlo que no debe hacer esto.
Arrowmaster