Como desbloquear conta para autorização ssh de chave pública, mas não para autorização de senha?

32

O ssh não permite que eu entre, porque a conta está bloqueada. Desejo desbloquear o usuário no meu servidor para autorização de chave pública por ssh, mas não habilito o login com senha.

Eu tentei:

# passwd -u username
passwd: unlocking the password would result in a passwordless account.
You should set a password with usermod -p to unlock the password of this account.

Entradas de log de autenticação:

Mar 28 00:00:00 vm11111 sshd[11111]: User username not allowed because account is locked
Mar 28 00:00:00 vm11111 sshd[11111]: input_userauth_request: invalid user username [preauth]
kravemir
fonte
você deve (IMHO) fazer isso por todos os utilizadores ... uma configuração simples quando fazê-lo para toda a sshd
Skaperen
passwd -ué uma má ideia. Veja a resposta de Giles abaixo.
Peter Jenkins

Respostas:

15

Desbloqueie a conta e forneça ao usuário uma senha complexa, como o @Skaperen sugere.

Edite /etc/ssh/sshd_confige verifique se você tem:

PasswordAuthentication no

Verifique se a linha não está comentada ( #no início) e salve o arquivo. Por fim, reinicie o sshdserviço.

Antes de fazer isso, verifique se a autenticação de chave pública está funcionando primeiro.

Se você precisar fazer isso para apenas um (ou um número pequeno) de usuários, deixe PasswordAuthenticationativado e use Match User:

Match User miro, alice, bob
    PasswordAuthentication no

Coloque na parte inferior do arquivo, pois é válido até o próximo Matchcomando ou EOF.

Você também pode usar Match Group <group name>ou uma negaçãoMatch User !bloggs

Como você mencionou nos comentários, também é possível revertê-lo para que a autenticação por senha seja desabilitada na parte principal da configuração e use as Matchinstruções para habilitá-lo para alguns usuários:

PasswordAuthentication no
.
.
.
Match <lame user>
    PasswordAuthentication yes
garethTheRed
fonte
tive a impressão de que o Miro queria desativar a senha para apenas um uso. mas veja meu comentário anterior
Skaperen
@ Skaperen - você pode estar certo. Eu alterei minha resposta um pouco.
garethTheRed
Essa Matchsintaxe parece boa, mas vou tentar revertida. Habilite o login editado por senha para (poucos coxos) usuários.
Kravemir # 28/15
@ Miró - Essa é uma boa ideia, eu a adicionei à minha resposta para referência futura.
garethTheRed
37

Faça o que fizer, não deixe a conta no estado deixado por passwd -u, com um campo de senha em branco: isso permite logins sem digitar uma senha (exceto pelo SSH, porque o SSH recusa isso).

Altere a conta para não ter senha, mas seja desbloqueada. Uma conta não terá senha se o hash da senha no banco de dados de senhas não for o hash de nenhuma sequência. Tradicionalmente, uma cadeia de um caractere como *ou !é usada para isso.

As contas bloqueadas também usam um marcador especial no campo de senha que faz com que a sequência não seja o hash de nenhuma sequência. O marcador depende do sistema. No Linux, o passwdcomando marca senhas bloqueadas colocando a !no início, e o OpenSSH trata a conta como bloqueada se o campo começar com !. Outras variantes do Unix tendem a usar mecanismos semelhantes, mas não idênticos, portanto, tome cuidado se o banco de dados de senhas for compartilhado entre uma rede heterogênea.

No Linux, você pode desativar o acesso baseado em senha a uma conta enquanto permite o acesso SSH (com algum outro método de autenticação, geralmente um par de chaves) com

usermod -p '*' username

O usuário não poderá alterar a conta novamente para ter uma senha, pois isso exige que ele insira uma senha válida.

Se desejar, você pode configurar o SSH para recusar a autenticação de senha, independentemente de a conta ter uma senha. Você ainda precisará providenciar para que o SSH não considere a conta bloqueada. Por exemplo, no Linux, você precisará remover o !campo da senha (mas não deixe o campo vazio - configure-o *como explicado acima ) Para desabilitar a autenticação de senha para SSH, adicione uma PasswordAuthenticationdiretiva a /etc/sshd_configou /etc/ssh/sshd_config(o que estiver no seu sistema). Use um Matchbloco para fazer com que essa diretiva se aplique apenas a um usuário específico; Matchblocos devem aparecer

…
Match User username
    PasswordAuthentication no
Gilles 'SO- parar de ser mau'
fonte
6
Obrigado - usermod -p '*' usernametrabalhou um charme!
Homme Zwaagstra
11
O OpenSSHd permite que usuários bloqueados (por exemplo, hash de senha com !prefixo) façam login com algum outro método de autenticação, se UsePAM yesestiver definido sshd_config. Este é provavelmente o padrão na maioria das distribuições (por exemplo, com o Fedora).
maxschlepzig
11
Eu tenho um sistema incorporado sem PAM, então a distinção '*'vs. '!'é super útil.
Jspkotta #
8

Você não precisa habilitar ou definir senhas, e realmente não deveria, se já estiver usando chaves fortes. Apenas troque novamente sua conta (sudo passwd -l nome de usuário) de uma sessão existente e corrija sua configuração SSH.

A razão pela qual isso aconteceu é provavelmente porque você editou uma das configurações padrão do daemon SSH (em / etc / ssh / sshd_config).

Altere isso em / etc / ssh / sshd_config e reinicie o SSH:

UsePAM yes

Em geral, a menos que você tenha realmente um bom motivo para desativar o PAM, recomendo que você o mantenha ativado; ativar o PAM no SSH permitirá que você ainda efetue login, mesmo com uma senha removida. Faça o que fizer, não defina uma senha vazia ou semelhante ... bloquear o campo da senha não significa bloquear toda a sua conta.

Dica rápida ao mexer com o SSH: mantenha outra sessão aberta (em outra janela) sempre que fizer alterações na configuração do SSH e, em seguida, teste se você ainda pode fazer login; se você inadvertidamente interromper seu acesso, use sua sessão atual para corrigi-lo.

(Aviso: trabalho na Userify, que fornece software de gerenciamento de chaves SSH.)

Jamieson Becker
fonte
0

Eu tive esse problema no CentOS 7. Eu sou um usuário comum do Linux baseado no Debian, então eu era um peixe fora d'água. Percebi que em alguns servidores funcionou e em apenas um não. O audit.log não disse nada de útil e o secure.log também não forneceu nada. Eu descobri que a única diferença real eram algumas diferenças de contexto de segurança em arquivos e diretórios entre aqueles que funcionavam e os que não funcionavam. Obtenha segurança com

sudo ls -laZ <user-home>/.ssh

do diretório (estou assumindo muitos padrões no sshd_config).

Você deve ver alguns ssh_home_te user_home_tatributos. Caso contrário, use o chconcomando para adicionar os atributos ausentes.

Por exemplo

home="$(getent passwd <user> | cut -d: -f6)"
sudo chcon -R unconfined_u:object_r:ssh_home_t:s0 "$home".ssh
sudo chcon unconfined_u:object_r:user_home_t:s0 "$home"

No meu caso, minha suspeita é que o usuário tenha sido criado de maneira não padrão. Sua casa era um diretório em /var/lib.

Mais informações em: https://www.linuxquestions.org/questions/linux-security-4/selinux-preventing-ssh-login-with-~-ssh-authorized_keys-4175469538/

hanzo2001
fonte
-2

desbloqueie a conta e altere a senha para uma sequência aleatória

Skaperen
fonte