Per quanto ne so, PAM non determina la shell dell'utente, questo viene lasciato all'applicazione. I moduli di sessione di PAM eseguono azioni e controlli generici che devono essere eseguiti su ogni accesso utilizzando quel particolare servizio. Se l'applicazione desidera avviare una shell, è libero di farlo e generalmente cerca la shell nel database degli utenti.
Supponendo che la tua domanda riguardi OpenSSH , è esattamente quello che fa: una volta che l'utente è autenticato e le cose della sessione PAM sono state fatte (se configurato per usare PAM¹), il server ssh cerca la shell nel database utente (direttamente, non attraverso la libreria PAM).
Il database utenti non è limitato a /usr/passwd
e amici. Su Linux (che presumo tu stia usando da quando hai citato shadow
), ciò che costituisce il database utente è determinato passwd
dall'impostazione in /etc/nsswitch.conf
. Nelle configurazioni multi-computer, aggiunte comuni al database locale sono NIS e LDAP . Se vuoi usare una shell che non è quella in uso /etc/passwd
, questo potrebbe essere cosa configurare (anche se sarebbe un po 'strano, e forse le persone possono offrire suggerimenti migliori se ci dici cosa stai cercando di realizzare).
Se vuoi avere utenti senza accesso completo alla shell, la soluzione naturale è quella di cambiare /etc/passwd
per mettere una shell ristretta - forse rssh per consentire solo alcune applicazioni di tipo copia file come scp, rsync e cvs. È inoltre possibile utilizzare i comandi forzati nel ~/.ssh/authorized_keys
file dell'utente .
Se vuoi vedere una traccia di ciò che sta facendo il server SSH, avvia il demone come ssh -ddd
. Puoi anche ottenere la vista del client ssh -vvv
, anche se qui la vista del server è ciò che ti interesserà di più.
¹
OpenSSH utilizza PAM solo se è configurato con il supporto PAM e la UsePAM
direttiva è impostata su yes
in sshd_config
. Anche quando utilizza PAM, offre altri metodi di autenticazione oltre a PAM; in particolare l'autenticazione con chiave pubblica non passa attraverso PAM.