¿Cómo funcionan las ID de usuario reales y efectivas?

13

Cuando un usuario normal desea realizar cambios en el archivo passwd, se le dará acceso efectivo al usuario. El usuario se convierte en root temporalmente y puede editar passwd.

Sin embargo, solo puede editar su contraseña correctamente, ¿y no todos los demás? Sin embargo, su acceso de usuario efectivo es root. Entonces, ¿cómo es que no puedes cambiar otras contraseñas además de la tuya?

Cuando ejecuta un programa con setuid, ¿qué significa en realidad cuando el usuario efectivo es root, pero la identificación real del usuario sigue siendo su nombre?

Starcorn
fuente

Respuestas:

13

No puede cambiar otras contraseñas porque el programa no lo permitirá. El programa tiene permisos del sistema para cambiar cualquier contraseña que desee, porque se está ejecutando como root, pero el programa ha sido específicamente diseñado para no darle al usuario ninguna forma de hacer que use esos permisos.

No es que el usuario se convierta en root temporalmente, es que el programa confiable se ejecuta con permisos de root. Obviamente, solo los programas que están específicamente diseñados para limitar a los usuarios a hacer solo lo que se les debe permitir se pueden configurar de manera segura.

David Schwartz
fuente
Entonces, en el caso de que abra un shell, establezca el uid en 0 (usando setreuid), para que el uid efectivo sea root pero el uid real siga siendo yo. Dado que no creo que el shell específicamente tenga algo incorporado que me impida, ¿significa que entonces tengo acceso a todo el sistema?
Starcorn
Me pregunto en el contexto de la técnica de ataque aplastante de la pila. Donde un hacker malicioso abre un shell con nivel de superusuario.
starcorn
@starcron: sí. De hecho, muchos ataques se demuestran al mostrar cómo usar ese ataque para crear un shell raíz setuid.
David Schwartz
2

Solo se le permite cambiar su contraseña a pesar de tener una identificación de usuario efectiva de root porque en el momento del cambio de contraseña se verifica la identificación de usuario real, no la identificación de usuario efectiva. Solo puede cambiar la identificación de usuario efectiva y no la identificación de usuario real.
Solo el usuario root puede cambiar la identificación de usuario real para ejecutar el programa como usuario no privilegiado. El ID de usuario real no se puede cambiar ya que está configurado en el momento del inicio de la sesión.
Es por eso que solo se puede cambiar su contraseña, ya que la identificación del usuario real no se cambia (ya que sigue siendo la suya, no la de la raíz).

Mayank
fuente
0

Un hack temprano en Unix fue hacer un enlace simbólico a un script de shell setuid y llamar al enlace -i. Esto da como resultado que se invoque el script como el sh -icual, en lugar de ejecutar el script llamado -isegún lo previsto, inicia un shell interactivo, que luego otorga plenos poderes. La identificación de usuario efectiva se puede usar para modificar el passwdarchivo para cualquier usuario o raíz. La mejor manera de protegerse contra esto es usar SELinux para evitar que los scripts o programas de confianza se modifiquen fuera del área que SELinux les permite ejecutar.

Otra técnica es tener un bit inmutable en archivos importantes cuyo conjunto no puede ser modificado ni siquiera por el usuario raíz (aparte del modo de usuario único)

Como usuario root, puede invitar a los usuarios a iniciar sesión en su sistema sin una contraseña y aparecer como cualquier usuario, pero los procesos con privilegios normales intentan evitar que esto suceda.

Si utiliza sistemas de archivo de red de algún tipo, el usuario raíz será tratado como nadie en ese espacio de archivos en lugar de root, lo que permite que las computadoras no confiables se unan a una red confiable como un campus universitario.

jrrk
fuente
0

Solo se le permite cambiar su contraseña, porque el programa de establecer contraseña, aunque tiene el poder de hacer cualquier cosa, está programado para cambiar solo las contraseñas. Verificará la identificación de usuario real para decidir qué contraseña cambiar.

Debido a que no puede cambiar su ID de usuario real, incluso llamando a un programa set-uid, el programa puede usarlo para implementar la seguridad. El sistema operativo renuncia a la seguridad del programa raíz uid establecido.

Nota: el programa raíz set uid también podría cambiar el ID de usuario real (pero esto no es útil en este caso de uso).

Advertencia: establecer uid root se considera dañino (mucho menos que ideal). Deberíamos estar usando capacidades en estos días (consulte ¿Cuáles son las diferentes formas de establecer permisos de archivo, etc. en gnu / linux y http://man7.org/linux/man-pages/man7/capabilities.7.html )

ctrl-alt-delor
fuente