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.