Senha expirada e login baseado em chave SSH com UsePAM yes

9

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

O sshd_config tem:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

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

A pergunta: Como podemos definir a configuração do PAM ou sshd para permitir que os usuários efetuem login se tiverem uma chave SSH válida e a senha expirar? - Sem aparecendo "altere sua senha".

UPDATE # 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:~ # 

UPDATE # 2: A solução não pode ser: definir a senha do usuário para nunca expirar

UPDATE # 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 # 
    
por thequestionthequestion 09.10.2014 / 20:09

3 respostas

7

A ordem das operações que fazem com que o prompt da senha expirada seja o seguinte:

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

Tudo isso é feito pelo SSH, e não vejo nenhuma opção de SSH para configurar esse comportamento. Então, a menos que você queira construir uma versão customizada do SSH e / ou do PAM, a única opção que vejo é evitar que o PAM relate a senha expirada para o SSH. Se você fizer isso, desabilitará completamente as verificações de senhas expiradas pelo SSH , mesmo se o usuário estiver efetuando login através de SSH com uma senha. Outros métodos de login (não SSH) ainda verificarão a expiração da senha.

Seu arquivo pam.d/sshd atual tem uma entrada account include common-account . Eu presumo que exista um arquivo common-account que contém uma referência a pam_unix.so . Esta é a linha que verifica uma senha expirada.

Você provavelmente não quer tocar no arquivo common-account , já que ele é usado para outros métodos de login. Em vez disso, você deseja remover o include do seu arquivo pam.d/sshd . Se houver outras funções em common-account além de pam_unix.so , você provavelmente desejará colocá-las diretamente em pam.d/sshd .

Finalmente, lembre-se de que isso é 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 isso. Alguns locais iniciais podem ser man 7 PAM , man 5 pam.conf e man 8 pam_unix .

    
por 10.10.2014 / 01:36
1

Uma opção foi adicionada ao pam_unix.so (por volta de fevereiro de 2016) chamado no_pass_expiry ( alteração do código fonte aqui ou página do manual aqui ). Basicamente, ele diz ao pam_unix para ignorar uma senha expirada se algo diferente de pam_unix foi 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 avisar, mas não é necessária uma alteração em uma senha expirada, se uma chave SSH tiver sido usada para autenticação via ssh
  2. Exigir uma alteração de senha de uma senha expirada se um login / senha via pam_unix.so foi usado para autenticar via ssh
  3. Não afeta qualquer outra sequência de autenticação (por exemplo, por meio 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
    
por 25.04.2018 / 21:37
0
  • Você pode não querer alterar seu PAM ou sshd_config para conformidade razões.
  • Você pode estar usando PasswordAuthentication no em 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 aviso

Em seguida, o root pode alterar a data da alteração da senha:

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