Como permitir que um usuário ssh use senha somente se ele estiver usando a rede local?

1

Todos os usuários devem fazer o login somente usando chaves exceto John, ele pode logar usando chaves e se ele estiver usando a rede local 192.168.1.x então ele poderia ssh usando uma senha, mas ele não pode fazer login usando uma senha de IPs aleatórios .

Eu não sei escrever a regra para o joão. Eu faço AllowUsers [email protected] ? Mas como negar John de diferentes ips? O que acontece se John se conectar usando uma porta diferente?

Qual é a melhor maneira de fazer isso?

    
por Lynob 08.04.2018 / 14:51

1 resposta

2

Você deve conseguir fazer isso com uma diretiva Match .

Antes de começar, verifique se você tem pelo menos uma conta com acesso baseado em chave de trabalho ao servidor (ou acesso físico).

Em seguida, edite o arquivo /etc/ssh/sshd_config do servidor, adicionando seu bloco de correspondência no final, por exemplo,

Match User john Address 192.168.1.0/24
    PasswordAuthentication yes

Observe que isso expressa duas condições, User john e Address 192.168.1.0/24 , ambas das quais devem ser satisfeitas para que PasswordAuthentication yes seja aplicado. A 0/24 é notação CIDR para qualquer endereço na sub-rede 192.168.1.x.

Agora você pode desativar a autenticação de senha para outras combinações de endereço de usuário no corpo principal da configuração, encontrando a seção que começa:

# Change to no to disable tunnelled clear text passwords

e alterando o padrão

#PasswordAuthentication yes

para

PasswordAuthentication no

Por fim, reinicie o serviço - para sistemas init baseados em systemd , você pode fazer isso usando

sudo systemctl restart ssh.service

Você pode testar se usuários não correspondentes não podem mais se autenticar usando senhas, forçando o cliente a experimentar, por exemplo,

$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]

que deve falhar com uma mensagem como

Permission denied (publickey).

considerando que john deve receber uma senha:

$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]
[email protected]'s password: 
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-116-generic x86_64)

Se você quiser que a autenticação por senha seja o mecanismo preferido para john quando estiver na rede local, talvez seja necessário especificar isso na configuração do cliente correspondente, por exemplo, ~/.ssh/ssh_config

    
por steeldriver 08.04.2018 / 21:59