Senha expirada e login baseado em chave SSH com UsePAM sim

Senha expirada e login baseado em chave SSH com UsePAM sim

Existe uma máquina SLES 11. Os usuários fazem login via SSH e pubkey (misto, alguns usuários usam senha, outros usam chave ssh)

O sshd_config possui:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

O problema: se a senha expirar para um usuário que usa login pubkey, o usuário será solicitado a alterar a senha.

A questão:Como podemos definir a configuração do PAM ou sshd para permitir que os usuários façam login se tiverem uma chave SSH válida e a senha expirar? -Semaparecendo "alterar sua senha".

ATUALIZAÇÃO#1: A solução não pode ser: "UsePAM no"

SERVER:~ # cat /etc/pam.d/sshd 
#%PAM-1.0
auth        requisite   pam_nologin.so
auth        include     common-auth
account     requisite   pam_nologin.so
account     include     common-account
password    include     common-password
session     required    pam_loginuid.so
session     include     common-session
SERVER:~ # 

ATUALIZAÇÃO#2: A solução não pode ser: definir a senha dos usuários para nunca expirar

ATUALIZAÇÃO#3:

SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required    pam_unix2.so    
account required    pam_tally.so
SERVER:/etc/pam.d # 

Responder1

A ordem das operações que causa a solicitação de senha expirada é a seguinte:

  • O SSH executa o accountestágio PAM, que verifica se a conta existe e é válida. O accountestágio percebe que a senha expirou e informa ao SSH.
  • SSH realiza autenticação baseada em chave. Ele não precisa do PAM para isso, portanto não executa o authpalco. Em seguida, ele configura a sessão de login SSH e executa o sessionestágio PAM.
  • Em seguida, o SSH lembra que o PAM informou que a senha havia expirado, imprime uma mensagem de aviso e solicita ao PAM que o usuário altere a senha. O SSH então desconecta.

Tudo isso é obra do SSH e não vejo nenhuma opção de SSH para configurar esse comportamento. Portanto, a menos que você queira criar uma versão personalizada do SSH e/ou PAM, a única opção que vejo é impedir que o PAM relate a senha expirada ao SSH. Se você fizer isto,ele desativará totalmente as verificações de senha expirada por SSH, mesmo que o usuário esteja efetuando login via SSH com uma senha. Outros métodos de login (não SSH) ainda verificarão a expiração da senha.

Seu pam.d/sshdarquivo atual possui uma account include common-accountentrada. Presumo que haja um common-accountarquivo que contém uma referência a pam_unix.so. Esta é a linha que verifica uma senha expirada.

Você provavelmente não deseja mexer no common-accountarquivo em si, pois ele é usado para outros métodos de login. Em vez disso, você deseja remover o includearquivo pam.d/sshd. Se houver outras funções common-accountalém do pam_unix.so, você provavelmente desejará colocá-las diretamente no pam.d/sshd.

Finalmente, lembre-se de que esta é uma modificação na segurança do seu sistema e você não deve confiar cegamente em mim para lhe dar bons conselhos. Leia sobre como o PAM funciona se você não estiver familiarizado com ele. Alguns locais de partida podem ser man 7 PAM, man 5 pam.confe man 8 pam_unix.

Responder2

Uma opção foi adicionada ao pam_unix.so (por volta de fevereiro de 2016) chamada no_pass_expiry (mudança de código fonte aquioupágina de manual aqui). Basicamente, ele diz ao pam_unix para ignorar uma senha expirada se algo diferente de pam_unix for usado para autenticação, por exemplo, se o sshd executou a autenticação.

Como resultado, se você tiver uma versão do pam_unix.so que contenha essa opção, você poderá configurar o PAM para:

  1. Ainda avisa, mas não exige alteração de uma senha expirada se uma chave SSH foi usada para autenticação via ssh
  2. Exigir uma alteração de senha expirada se um login/senha via pam_unix.so foi usado para autenticar via ssh
  3. Não afeta nenhuma outra sequência de autenticação (por exemplo, através do serviço de login).

Por exemplo, configurei um servidor RHEL 7 para fazer o acima simplesmente atualizando /etc/pam.d/sshd e adicionando pam_unix.so no_pass_expiry aos tipos de conta e senha, por exemplo

account    required    pam_nologin.so
account    sufficient  pam_unix.so no_pass_expiry
account    include     password-auth
password   sufficient  pam_unix.so no_pass_expiry
password   include     password-auth

Responder3

  • Talvez você não queira alterar seu PAM ou sshd_config por motivos de conformidade.
  • Você pode estar usandoSenhaAutenticação nãoem sshd_config
  • Você pode ter senhas aleatórias.
  • Você pode até ter implementado a conformidade com o CIS.
  • Ainda assim, seus usuários recebem o prompt

Então o root pode ajustar a data de alteração da senha:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done

informação relacionada