Quali passaggi passa il sistema durante la gestione di una connessione SSH?


9

Quali passaggi passa il sistema durante la gestione di una connessione SSH?

  1. Cerchiamo di accedere tramite ssh
  2. sshd avvia il modulo pam e pam per autenticarci
  3. A seconda della configurazione di pam, dobbiamo fornire nome utente e password (controlli passwde shadowfile pam )
  4. controlli PAM per hosts.allow/deny, /etc/shellse altre cose
  5. Se tutto va bene, siamo connessi
  6. ???
  7. Shell è avviato

Quindi la mia domanda è quale meccanismo è responsabile per verificare quale shell è assegnata all'utente nel loro passwdfile (nel passaggio 6)? È pam stesso, un modulo pam specifico sshdo qualcos'altro? So che posso sostituire il passwdfile (per controllare username e password) scrivendo un modulo pam, ma come posso sostituire il passwdfile per la voce shell?

Risposte:


8

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/passwde amici. Su Linux (che presumo tu stia usando da quando hai citato shadow), ciò che costituisce il database utente è determinato passwddall'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/passwdper 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_keysfile 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 UsePAMdirettiva è impostata su yesin 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.


Voglio consentire agli utenti della mia applicazione di accedere alla shell come utente normale senza creare account nel sistema. I dati degli utenti (nome utente, pass e shell) verranno archiviati in sqlite db. Il primo passo è il modulo sqlite pam che autentica nuovamente gli utenti db. Il secondo passo è fornire la shell letta dal database. Quindi penso che potrebbe essere realizzato scrivendo il modulo nis corretto. Grazie per la risposta ...
pbm

@pbm: non penso che tu voglia nis, piuttosto db(o forse un modulo personalizzato).
Gilles 'SO- smetti di essere malvagio' il

è un errore di battitura .. intendevo "scrivendo il modulo nss corretto (personalizzato)" ...
pbm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.