Gli utenti che operano alla console di una workstation grafica hanno notato che diversi programmi possono essere eseguiti senza apparentemente richiedere l'autenticazione di root né una password come il riavvio. Questo processo implica l'uso intelligente del programma SUID /usr/sbin/userhelper
applicato in un contesto più ampio rispetto a quello originariamente progettato.
L'utente grafico esegue un programma intermedio con alias /usr/bin/consolehelper
che autorizza azioni basate su una specifica configurazione PAM (Programmable Authentication Modules) e quindi invia il comando a un programma SUID per eseguire il programma utente con privilegi. Se l'utente non dispone dell'autorizzazione appropriata, il programma richiesto viene eseguito nell'ambiente Linux dell'utente.
Come attualmente distribuito, il file di configurazione PAM necessario per il riavvio contiene i controlli per l'utente che ha effettuato l'accesso alla console o che è attualmente in esecuzione nell'ambiente root per inibire le richieste di password.
Utilizza udisk. (Tuttavia, FUSE viene utilizzato nel caso di filesystem di rete). Le interfacce della riga di comando per gli udisk sono disponibili per la tua sperimentazione. Nelle versioni recenti viene fornito con l'interfaccia a riga di comando udisksctl
.
udisksd
viene eseguito come root e accetta le richieste dell'utente utilizzando D-Bus.
udisksd
utilizza PolicyKit PolKit per decidere quali richieste sono consentite. Alcuni potrebbero richiedere privilegi extra, ad es. formattazione delle unità interne. Ciò può comportare un ulteriore passaggio di autenticazione, simile al prompt UAC di Windows o sudo nella riga di comando. Non so esattamente come sia coordinata l'autenticazione extra.
Le richieste su D-Bus vengono attualmente effettuate utilizzando i socket Unix utilizzando SCM_CREDENTIALS, che identifica il processo che effettua la richiesta.
Uno dei fattori utilizzati nelle decisioni è se l'utente ha effettuato l'accesso localmente o tramite la rete (ad es. ssh
). Credo che questa informazione sia fornita da systemd-logind
(in cospirazione con pam-systemd
).