Digamos que eu configurei sshd
(vinculei à libpam.so.0
biblioteca compartilhada) para usar o PAM e tenho o seguinte /etc/pam.d/sshd
conteúdo:
auth requisite pam_nologin.so
auth required pam_env.so
auth required pam_unix.so try_first_pass
auth required pam_google_authenticator.so
account requisite pam_nologin.so
account required pam_unix.so try_first_pass
password requisite pam_cracklib.so
password required pam_unix.so use_authtok nullok shadow try_first_pass
session required pam_loginuid.so
session required pam_limits.so
session required pam_unix.so try_first_pass
session optional pam_umask.so
session optional pam_systemd.so
session optional pam_env.so
session optional pam_lastlog.so silent noupdate showfailed
Estou correto que o PAM informa sshd
sobre sucesso ou falha no final de cada pilha? Então, primeiro auth
as instalações são processadas e, em seguida, o resultado é retornado para sshd
, depois account
as instalações são processadas e o resultado da account
pilha é retornado para sshd
, etc? O PAM é informado pelo daemon quando a sessão autenticada termina?
Em certo sentido, é isso que está acontecendo, mas eu não diria isso dessa maneira. Porque o PAM não informa o sshd ativamente, mas sim o sshd pergunta ao PAM por meio de chamadas de função (como
pam_authenticate
,pam_acct_mgmt
, etc.) e age de acordo com os resultados. O PAM também não sabe automaticamente quando uma sessão é encerrada, mas deve ser informado viapam_close_session
(já que uma sessão pode ser encerrada a partir de outro aplicativo).Você pode procurar o código-fonte do openssh para entender onde e como o sshd utiliza o PAM. Eu também recomendaria o Linux-PAM Application Developers' Guide se você estiver interessado nos detalhes.
Se por pilha você quer dizer auth, account, password e session então não, o PAM não informa sshd após cada um. Estar empilhado significa apenas que eles são usados juntos para fazer uma coisa que, no seu caso, é conceder ou negar acesso. A primeira coluna é a interface do módulo, a segunda é o sinalizador de controle e a terceira é o nome e os argumentos do módulo. Para o primeiro, a autenticação verifica a senha, a conta determina se a conta que está sendo usada tem acesso ou não, a senha é para alterar senhas e a sessão é para montar o diretório inicial ou habilitar o correio. O sinalizador de controle é autoexplicativo: obrigatório significa que deve ser verdadeiro, suficiente é ignorado se falhar, mas prosseguirá se for bem-sucedido e assim por diante. O último informa qual módulo usar para PAM neste caso.
2) Não.