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
account
estágio PAM, que verifica se a conta existe e é válida. Oaccount
está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
auth
palco. Em seguida, ele configura a sessão de login SSH e executa osession
está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/sshd
arquivo atual possui uma account include common-account
entrada. Presumo que haja um common-account
arquivo 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-account
arquivo em si, pois ele é usado para outros métodos de login. Em vez disso, você deseja remover o include
arquivo pam.d/sshd
. Se houver outras funções common-account
alé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.conf
e 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:
- Ainda avisa, mas não exige alteração de uma senha expirada se uma chave SSH foi usada para autenticação via ssh
- Exigir uma alteração de senha expirada se um login/senha via pam_unix.so foi usado para autenticar via ssh
- 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