Pasando RUTA por sudo

13

En resumen : ¿cómo hacer que sudo no elimine la RUTA cada vez?

Tengo algunos sitios web implementados en mi servidor (pruebas de Debian) escritos con Ruby on Rails. Uso Mongrel + Nginx para alojarlos, pero hay un problema que surge cuando necesito reiniciar Mongrel (por ejemplo, después de hacer algunos cambios).

Todos los sitios se verifican en VCS (git, pero no es importante) y tienen el propietario y el grupo configurados para mi usuario, mientras que Mongrel se ejecuta bajo el usuario, huh, mestizo que está severamente restringido en sus derechos. Por lo tanto, Mongrel debe iniciarse en la raíz (puede cambiar automáticamente el UID) o mestizo.

Para administrar mongrel, uso la gema mongrel_cluster porque permite iniciar o detener cualquier cantidad de servidores de Mongrel con un solo comando. Pero necesita que el directorio /var/lib/gems/1.8/bin esté en RUTA: esto no es suficiente para iniciarlo con una ruta absoluta .

La modificación de la RUTA en la raíz .bashrc no cambió nada, tampoco se modificaron env_reset y env_keep de sudo.

Entonces, la pregunta: ¿cómo agregar un directorio a la RUTA o mantener la RUTA del usuario en sudo?

Actualización: algunos ejemplos

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

También puedo decir que funciona exactamente de esta manera en Debian estable (lenny) también.

Whitequark
fuente

Respuestas:

12

Luchó con el mismo problema durante unas horas. En Debian Lenny, puede solucionarlo agregando

Defaults        exempt_group=<your group> 

al archivo de sudoers.

Esta es la única forma de evitar la opción compilada --secure-path, (que yo sepa).

En particular, esto también eximirá a los usuarios de la necesidad de ingresar su contraseña cuando sudo.

Robar
fuente
3

Si te has secure_pathinstalado /etc/sudoers, puedes jugar con env_reset/ env_keeptodo lo que quieras y no hará ninguna diferencia en el camino. Si ve algo como esto, coméntelo.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Draemon
fuente
No, por supuesto que no estaba configurado.
whitequark
0

Yo diría que explore las posibilidades env_reset y env_keep en el hombre sudo . Pero parece que ya lo has hecho (simplemente llamas a env_keep "keepenv"). Si deshabilita la opción env_reset (el valor predeterminado está habilitado), creo que no se supone que borre ninguna variable env. Pero esto es menos seguro.

También hay una opción secure_path para sudo; Creo que esto está habilitado por defecto. Podrías intentar deshabilitarlo.

Las opciones anteriores se establecen en su archivo / etc / sudoers. También existe la -iopción de línea de comandos para sudo. Eso hará que sudo ejecute /root/.profile o /root/.login. Podrías establecer tu camino deseado allí.

dubiousjim
fuente
1
No, cuando env_reset está desactivado, todavía cambia (no borra) PATH. Probablemente esto se hace para agregar / * / sbin dirs. No, la opción -i no es adecuada porque inicia un shell interactivo y solo necesito ejecutar un comando.
whitequark
Bien, el problema desapareció después de reinstalar Debian (debido a la migración a LVM) y también a RubyGems; su respuesta fue la más útil de todas, por lo que puede aceptarse ahora.
whitequark
-1

Bueno, estás haciendo algo mal. Además, no especificó qué hizo con su archivo / etc / sudoers. Esto es lo que debería haber hecho: este es un sistema CentOS, por cierto:

Primero, esto es con la configuración correcta de env_keep (observe que PATH está allí):

sudo grep -5 ruta / etc / sudoers predeterminados env_keep = "Colores de pantalla HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS CORREO PS1 PS2 QTDIR NOMBRE DE USUARIO \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL IDIOMA LINGUAS \ _XKB_CHARSET XAUTHORITY CAMINO"

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

Se ve bien. Ahora eliminemos la configuración env_keep e intentemos de nuevo:

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

Qué triste camino:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin
Emmel
fuente
1
¡Lo comprobé MÁS de dos veces! Verifique la actualización en la publicación.
whitequark
Tengo el mismo problema, definitivamente tengo la configuración correcta que mencionas
Draemon el