2012-04-22 17 views

Respuesta

16

sudo proporciona algunas variables de entorno para ayudarle con exactamente este caso:

SUDO_UID  Set to the user ID of the user who invoked 
        sudo 

    SUDO_USER  Set to the login of the user who invoked sudo 

steveayre ha señalado en los comentarios que el usuario puede establecer estas variables de entorno en algunos casos; sudo(8) la página de manual incluye en parte:

The sudoers policy subjects variables 
passed on the command line to the same restrictions as normal 
environment variables with one important exception. If the 
setenv option is set in sudoers, the command to be run has the 
SETENV tag set or the command matched is ALL, the user may set 
variables that would otherwise be forbidden. See sudoers(5) 
for more information. 

así que asegúrese de que no otorga ALL comandos para los usuarios cuando es necesario confiar en esta función.

+1

Realmente odio usar variables de entorno, ¿hay alguna otra manera? (la razón principal por la que odio usarlos es porque no son confiables: desde un POV de seguridad o un POV de compatibilidad) – chacham15

+1

Las variables de entorno deben ser confiables: debes confiar completamente en 'sudo' para usarlo de esta manera.Cualquier ataque contra 'sudo' que permita a los usuarios de poca confianza ejecutar programas con variables de entorno modificadas va a atraer la atención de docenas de equipos de seguridad de todo el mundo para corregir el error (o eliminar la característica si no puede solucionarse). En cuanto a la compatibilidad, es más portátil que la otra opción en la que acabo de pensar, respondida por separado para sus propios comentarios. Y esto es probablemente más seguro que escribir su propio programa raíz de setuid. – sarnold

+0

El problema de seguridad al que me refiero proviene de otros programas que se ejecutan en el sistema o de un código de complemento que puede modificar las variables de entorno. Pero dado que la otra solución no funciona, probablemente termine yendo con esto y almacenando en caché la variable al iniciar el programa (así que espero que nadie lo modifique antes). – chacham15

3

Una función específica de Linux audit_getloginuid() proporcionada por el sistema de auditoría puede ser de ayuda; dado que pam_loginuid(8) solo se instalará para los daemons "principales" (sshd, login, gdm, etc.) el uid de auditoría se mantendrá sin cambios cuando se ejecute sudo(8).

Esto requerirá una pequeña configuración; añadir:

session required  pam_loginuid.so 

al archivo /etc/pam.d/sshd - y lo que otros servicios que permiten que los usuarios utilicen.

Asegúrese de que pam_loginuid.so no esté cargado en el archivo de configuración /etc/pam.d/sudo.

+0

idea genial, pero no funciona: 'audit_getloginuid()' devuelve -1. – chacham15

+0

Ah, tonto, suponiendo que ya estaba configurado; mi Ubuntu 11.04 no tiene 'pam_loginuid' cargado por defecto. Edité mi publicación para incluir una línea para cargar el módulo 'pam_loginuid' para' sshd' - si quieres que funcione para GUI, consola u otro lugar, tendrás que cargar el módulo PAM en los servicios correspondientes. – sarnold

2

Tiene dos buenas opciones ...

  1. Confianza sudo y sólo tiene que utilizar su entorno
  2. Haga su programa setuid-sobre-ejecución y luego geteuid, et al, funcionará bien

actualización:

The setuid bit es una acceder a la bandera derecha en el modo de archivo que hace que un programa se ejecute con las capacidades del propietario del archivo ejecutable. Así es como sudo (1) puede ejecutar cosas como root ... el programa sudo tiene este modo.

$ ls -l /usr/bin/sudo 
-r-s--x--x 1 root wheel 272384 Jun 22 2009 /usr/bin/sudo* 

Para hacer un programa setuid root uno podría:

$ chown root a.out 
$ chmod +s a.out 

hace falta decir que los programas setuid root debe ser escrito cuidadosamente. Puede configurar a un usuario menos privilegiado si lo único que necesita es acceder a un directorio o archivo protegido.

+0

'setuid-on-execution' ¿Puedes explicar eso? – chacham15

+0

Ok, mira la actualización ... – DigitalRoss

Cuestiones relacionadas