Existe uma máquina SLES 11. Os usuários efetuam 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 o login 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 eles têm uma chave SSH válida e sua senha expirou? - Sem aparecer "mude 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: defina a senha do usuário 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 #
pam_unix.so
dasession
seção de/etc/pam.d/sshd
(e substituindo-a porpam_lastlog.so
se não estiver lá. Não tenho certeza sepam_unix.so/session
é quem está fazendo isso ou não, mas parece o lugar certo.ForcedPasswdChange No
isto é para SSH1ForcedPasswdChange No
não funcionaria após o vencimento. você está procurando uma solução que permita que o usuário expirado efetue loginRespostas:
A ordem das operações que causam o prompt da senha expirada é a seguinte:
account
estágio PAM , que verifica se a conta existe e é válida. Oaccount
estágio percebe que a senha expirou e informa o SSH.auth
palco. Em seguida, configura a sessão de login SSH e executa osession
estágio PAM .Tudo isso é feito pelo SSH e não vejo nenhuma opção 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 o PAM de relatar a senha expirada ao SSH. Se você fizer isso, desabilitará completamente as verificações de senha expiradas no SSH , mesmo se o usuário estiver efetuando login no SSH com uma senha. Outros métodos (não SSH) de login ainda verificarão a expiração da senha.
Seu
pam.d/sshd
arquivo atual tem umaaccount include common-account
entrada. Presumo que exista umcommon-account
arquivo que contenha uma referênciapam_unix.so
. Esta é a linha que verifica uma senha expirada.Você provavelmente não deseja tocar no
common-account
arquivo em si, pois ele é usado para outros métodos de login. Em vez disso, você deseja remover ainclude
partir do seupam.d/sshd
arquivo. Se houver outras funçõescommon-account
além dissopam_unix.so
, você provavelmente deseja colocá-las diretamentepam.d/sshd
.Por fim, lembre-se de que isso é uma modificação da segurança do seu sistema e você não deve confiar cegamente em mim para lhe dar bons conselhos. Leia como o PAM funciona se você não estiver familiarizado. Alguns lugares de partida pode ser
man 7 PAM
,man 5 pam.conf
eman 8 pam_unix
.fonte
Uma opção foi adicionada ao pam_unix.so (por volta de fevereiro de 2016) chamada no_pass_expiry ( alteração do código-fonte aqui ou página de 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, poderá configurar o PAM para:
Por exemplo, configurei um servidor RHEL 7 para fazer isso acima, simplesmente atualizando /etc/pam.d/sshd e adicionando pam_unix.so no_pass_expiry aos tipos de conta e senha, por exemplo
fonte
Então o root pode ajustar a data da senha alterada:
fonte