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?
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).
fuente
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 elsh -i
cual, en lugar de ejecutar el script llamado-i
según lo previsto, inicia un shell interactivo, que luego otorga plenos poderes. La identificación de usuario efectiva se puede usar para modificar elpasswd
archivo 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.
fuente
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 )
fuente