
Segui as instruções no redhat sobre como fortalecer a autenticação em um servidor Linux, mas só usamos SSH com autenticação de chave pública. De acordo com estas instruções: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/chap-hardening_your_system_with_tools_and_services
Aqui estão meus arquivos /etc/pam.d/system-auth e /etc/pam.d/password-auth, na verdade eles são iguais:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_faillock.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
Com esta configuração, eu esperava obter algum tipo de mensagem de bloqueio se o usuário tentar autenticar com a chave errada após 3 tentativas, por exemplo. Mas nenhuma mensagem sobre bloqueio aparece e não tenho como saber se a política de bloqueio está funcionando ou não. Há também o módulo pam_tally2, mas não vejo que diferença isso faria em relação ao módulo pam_faillock.
Os logs não mostram nada, exceto a permissão de root negada:
[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/some_user
[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/root
cat: /var/run/faillock/root: Permission denied
E eu tentei usar a chave errada para ssh for some_user
, e isso não parece me bloquear porque não vejo nada nos logs de faillock ou qualquer mensagem ssh de onde tento fazer o ssh.
Responder1
O problema é que você está tentando impor essas políticas dentro da pilha de autenticação.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_faillock.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
A autenticação de chave pública implementada no próprio daemon SSH ignora a pilha de autenticação. (não há nenhum módulo de autenticação PAM sendo chamado para validar a chave enviada, então tem que funcionar dessa maneira) A única exceção é quando você está executando uma configuração personalizada que também requer sucesso dentro do teclado interativo. Como esse não é o padrão, sua pilha de autenticação quase certamente será ignorada durante essas autenticações.
Enquanto a account
pilha estivergeralmenteonde você impõe restrições a logins somente com chave pública, não acredito que isso funcione aqui, pois primeiro você teria que ter sucesso na autenticação para que o módulo PAM fosse chamado. Se o seu módulo PAM não estiver sendo chamado, ele não poderá incrementar uma contagem a cada login com falha.
A única maneira de ver isso funcionando é ajustar sua configuração sshd para exigir autenticação interativa com tecladoalém deautenticação de chave pública. (você pode usarestas perguntas e respostascomo ponto de partida) Dito isto, como JohnA aponta, é discutível se isso realmente forneceria algum valor.
Responder2
Tenho certeza de que você não conseguirá usar o PAM nessa capacidade. Se o usuário não tiver a chave privada ssh que corresponde à chave pública ssh no servidor, ele não poderá se autenticar.
O objetivo do bloqueio por falha de senha é evitar a força bruta da senha em uma conta de usuário. Se a autenticação da chave SSH for aplicada, não há senha de conta de usuário a ser levada em consideração.
No caso da senha solicitada para autenticação da chave ssh, esta é a senha da chave privada. A falha na autenticação com a chave privada não resulta em nenhuma falha de autenticação no servidor.