Precisa de ajuda para entender as diretrizes do PAM

6

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 -

  1. 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.
  2. 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
    
por Sidd 07.08.2013 / 19:50

1 resposta

3

Você tem certeza de que está pulando pam_unix.so ?

sufficient é um comportamento "não-terminal" em caso de falha. Mesmo que a verificação pam_unix.so falhe, a autenticação irá tentar pam_radius_auth.so.

Minha interpretação é:

  • A verificação uid eq 30027 nunca retornará verdadeira. O teste só será executado se o uid for < 499, tornando impossível que a condição de uid eq 30027 seja verdadeira.
  • pam_unix.so seria tentado em todos cenários e, se falhasse, pam_radius_auth.so seria tentado.
  • pam_google_authenticator.so será tentado se ambos falharem.

Verifique seus registros novamente. Os logins do radius podem não estar falhando, mas a verificação pam_unix.so provavelmente é registrando uma falha. Apenas não está impedindo seus logins.

Essa resposta cobre com precisão o escopo da pergunta original. Quaisquer perguntas adicionais feitas por meio de atualizações ou comentários não serão abordadas.

    
por 08.08.2013 / 04:45