Eu tenho as seguintes diretivas no meu arquivo /etc/pam.d/sshd
em uma caixa RHEL5 e estou um pouco confuso. Essas diretivas estão lá para fazer o trabalho LDAP + RADIUS + OTP. O que estou tentando fazer é dizer ao pam para não verificar os usuários no UID < 499 para LDAP + RADIUS + OTP e também para excluir UID = 30027 da verificação para o mesmo.
Esta diretiva funciona como pretendido. Ele verifica se o UID > = 499 e, se for, pula (auth suficiente pam_unix.so nullok_secure).
auth [success=1 default=ignore] pam_succeed_if.so uid >= 499 quiet
Estou confuso aqui. Isso deve fazer LDAP + RADIUS + OTP desde success = 1, mas de alguma forma ainda funciona. Não deveria estar pulando a próxima regra se for verdade?
auth [success=1 default=ignore] pam_succeed_if.so uid eq 30027 quiet
auth sufficient pam_unix.so nullok_secure
auth sufficient pam_radius_auth.so
auth required /lib/security/pam_google_authenticator.so forward_pass
Embora eu tenha feito as coisas funcionarem como eu quero, estou confuso por trás da lógica disso.
Atualizar
Ok, então é isso que eu obtenho em / var / log / secure quando eu ssh usando um usuário local que tem um uid de 30327 -
Aug 8 08:21:30 journey sshd[9357]: Accepted keyboard-interactive/pam for sidd from 10.1.1.178 port 51242 ssh2
Aug 8 08:21:30 journey sshd[9357]: pam_unix(sshd:session): session opened for user sidd by (uid=0)
Isto é o que eu recebo ssh usando root que tem um uid de 0 (< 499).
Aug 8 08:25:51 journey sshd[9402]: Accepted keyboard-interactive/pam for root from 10.1.1.178 port 51246 ssh2
Aug 8 08:25:51 journey sshd[9402]: pam_unix(sshd:session): session opened for user root by (uid=0)
Isto é o que eu recebo quando eu uso um usuário ldap com apenas a senha LDAP e não OTP -
Aug 8 08:27:04 journey sshd[9447]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=journey user=schoure
Aug 8 08:27:05 journey sshd(pam_google_authenticator)[9447]: Failed to read "/home/schoure/.google_authenticator"
Aug 8 08:27:07 journey sshd[9445]: error: PAM: Cannot make/remove an entry for the specified session for schoure from journey
Isto é o que eu recebo quando eu uso um usuário ldap com LDAP + OTP -
Aug 8 08:28:13 journey sshd[9452]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=journey user=schoure
Aug 8 08:28:13 journey sshd[9450]: Accepted keyboard-interactive/pam for schoure from 10.1.1.178 port 43068 ssh2
Aug 8 08:28:13 journey sshd[9450]: pam_unix(sshd:session): session opened for user schoure by (uid=0)
Então você está certo - o pam_unix falha para os usuários LDAP, mas como está definido como "suficiente", não é terminal. Obrigado por esclarecer isso.
Quanto ao seu outro ponto de -
auth [success=1 default=ignore] pam_succeed_if.so uid eq 30027 quiet
não sendo avaliado, vejo que está sendo avaliado. Se eu comentar essa diretiva, recebo
Aug 8 08:34:39 journey sshd(pam_google_authenticator)[9537]: Failed to read "/home/sidd/.google_authenticator"
Aug 8 08:34:42 journey sshd[9535]: error: PAM: Cannot make/remove an entry for the specified session for sidd from journey
Então eu ainda estou confuso sobre como isso funciona desde claramente 30327 > 499 e, portanto, deve pular a segunda linha. A única razão pela qual eu posso ver isso funcionando se o PAM adiciona um OR implícito entre as duas primeiras linhas.
UPDATE 2
Ah, eu vejo o que está acontecendo. Essa linha em vigor é apenas um espaço reservado. Eu mudei esse UID para algum UID aleatório que não existe e ainda funcionou. Então eu entendo a lógica -
- A linha 1 verifica o UID. Se for mais de 499, pula para a linha 3, onde é verificada localmente. Desde UID > 499 não são locais, essa condição falha, mas sendo uma diretiva não-terminal, ela passa para LDAP + RADIUS + OTP.
- Se eu comentar a linha 2 que tem um determinado conjunto de UIDs, o que acontece é que o PAM ignora completamente a autenticação local devido ao sucesso = 1.
Então, na verdade, eu fazendo algo errado fez funcionar. Eu tenho o que preciso fazer e está funcionando para mim.
Eu não quero que os usuários locais sejam autenticados via LDAP + RADIUS + OTP, então essas três linhas devem fazer o trabalho para mim. Eles estão trabalhando, mas eu gostaria apenas de confirmar que eles estão certos -
auth sufficient pam_unix.so nullok_secure
auth sufficient pam_radius_auth.so
auth required /lib/security/pam_google_authenticator.so forward_pass