Se você definir UsePam no , então sshd fará o trabalho dos módulos PAM, da melhor maneira possível.
Como sshd está sendo executado como root, ele pode usar a função getspnam(3) para obter o hash de senha do usuário e outras informações de /etc/shadow (ou do NIS, LDAP ou qualquer outro local de armazenamento suportado pela biblioteca C do sistema), selecione o algoritmo de hashing de senha observando o início do hash e, em seguida, o hash da senha digitada pelo usuário com o salt do resultado getspnam(3) usando crypt(3) . O resultado é comparado ao hash de senha completo recuperado por getspnam(3) . Se eles corresponderem, a autenticação de senha será bem-sucedida.
A etapa de verificação de conta é novamente muito simples: as informações de expiração de senha estão incluídas nos resultados getspnam(3) e outra verificação é feita de que o shell do usuário existe e está listado em /etc/shells .
A criação de sessão inclui várias etapas cujos detalhes dependem do tipo de Linux ou Unix em que o serviço está sendo executado. Mas, normalmente, para uma sessão de shell, o processo sshd filho manipulando essa conexão específica registraria as informações da sessão nos arquivos utmp e wtmp , configuraria um pseudo-TTY e, em seguida, fork() outro processo-filho Assumir as associações de usuário e grupo do usuário, alternar para o diretório base do usuário e chamar setsid() para se tornar um líder de sessão. Esse processo, então, exec() do shell do usuário.
Quando o shell morre, o processo filho sshd que mantém a extremidade principal do pseudo-TTY executa as ações de limpeza necessárias, como gravar o final da sessão no arquivo wtmp .
Isso é mais ou menos como uma sessão Unix foi tratada antes de o PAM ser inventado.