Até onde eu sei, o PAM não determina o shell do usuário, isso é deixado para o aplicativo. Os módulos de sessão do PAM executam ações e verificações genéricas que devem ser feitas em cada login usando esse serviço específico. Se o aplicativo quiser iniciar um shell, é livre para fazê-lo e, normalmente, procurará o shell no banco de dados do usuário.
Supondo que sua pergunta seja sobre o OpenSSH , é exatamente isso que faz: depois que o usuário é autenticado e o material da sessão do PAM foi concluído (se configurado para usar o PAM¹), o servidor ssh consulta o shell no banco de dados do usuário (diretamente, não através da biblioteca PAM).
O banco de dados do usuário não está limitado a /usr/passwd
amigos. No Linux (que eu suponho que você está usando desde que você menciona shadow
), o que torna o banco de dados do usuário é determinada pela passwd
configuração no /etc/nsswitch.conf
. Nas configurações de vários computadores, as adições comuns ao banco de dados local são NIS e LDAP . Se você quiser usar um shell que não seja o único /etc/passwd
, pode ser o que configurar (embora isso seja um pouco estranho, e talvez as pessoas possam oferecer sugestões melhores se você nos informar o que está tentando realizar).
Se você deseja ter usuários sem acesso total ao shell, a solução natural é mudar /etc/passwd
para colocar um shell restrito - talvez o rssh permita apenas alguns aplicativos do tipo cópia de arquivo, como scp, rsync e cvs. Você também pode usar comandos forçados no ~/.ssh/authorized_keys
arquivo do usuário .
Se você deseja ver um rastro do que o servidor ssh está fazendo, inicie o daemon como ssh -ddd
. Você também pode obter a visão do cliente ssh -vvv
, embora aqui a visão do servidor seja o que mais lhe interessa.
¹
OpenSSH só usa PAM, se for configurado com suporte a PAM ea UsePAM
directiva está definido para yes
em sshd_config
. Mesmo quando usa o PAM, ele oferece outros métodos de autenticação além do PAM; em particular, a autenticação de chave pública não passa pelo PAM.