Los usuarios que operan en la consola de una estación de trabajo gráfica han notado que se pueden ejecutar varios programas sin aparentemente necesitar autenticación de root ni una contraseña como reiniciar. Este proceso implica el uso inteligente del programa SUID /usr/sbin/userhelper
aplicado en un contexto más amplio que el diseñado originalmente.
El usuario gráfico ejecuta un programa intermedio con alias /usr/bin/consolehelper
que autoriza acciones basadas en una configuración específica de PAM (módulos de autenticación programables) y luego envía el comando a un programa SUID para ejecutar el programa de usuario con privilegios. Si el usuario no tiene la autorización adecuada, el programa solicitado se ejecuta en el entorno Linux de los usuarios.
Tal como se implementó actualmente, el archivo de configuración de PAM necesario para el reinicio contiene comprobaciones para que el usuario haya iniciado sesión en la consola o se esté ejecutando actualmente en el entorno raíz para inhibir las solicitudes de contraseña.
Utiliza udisks. (Sin embargo, FUSE se usa en el caso de sistemas de archivos de red). Las interfaces de línea de comandos para udisks están disponibles para su experimentación. En versiones recientes viene con la interfaz de línea de comandos udisksctl
.
udisksd
se ejecuta como root y acepta las solicitudes de los usuarios mediante D-Bus.
udisksd
utiliza PolicyKit PolKit para decidir qué solicitudes están permitidas. Algunos pueden requerir privilegios adicionales, p. formateo de unidades internas. Esto puede implicar un paso de autenticación adicional, similar al indicador UAC de Windows o sudo en la línea de comandos. No sé exactamente cómo se coordina la autenticación adicional.
Las solicitudes a través de D-Bus se realizan actualmente mediante sockets Unix mediante SCM_CREDENTIALS, que identifica el proceso que realiza la solicitud.
Uno de los factores utilizados en las decisiones es si el usuario inició sesión localmente o a través de la red (por ejemplo, ssh
). Creo que esta información la proporciona systemd-logind
(en conspiración con pam-systemd
).