web-dev-qa-db-fra.com

Comment autoriser un utilisateur ssh à utiliser un mot de passe uniquement s'il utilise le réseau local?

Tous les utilisateurs doivent uniquement se connecter avec des clés, sauf John. Il peut se connecter avec des clés. S'il utilise le réseau local 192.168.1.x, il peut utiliser ssh avec un mot de passe, mais il ne peut pas se connecter avec un mot de passe provenant d'adresses IP aléatoires.

Je ne sais pas comment écrire la règle pour John. Est-ce que je fais AllowUsers [email protected]? Mais comment nier John d'ips différents? Que se passe-t-il si John est connecté via un autre port?

Quelle est la meilleure façon de le faire?

1
Lynob

Vous devriez pouvoir le faire avec une directive Match.

Avant de commencer, , assurez-vous de disposer d'au moins un compte disposant d'un accès fonctionnel au serveur (ou d'un accès physique).

Editez ensuite le fichier /etc/ssh/sshd_config du serveur, en ajoutant votre bloc de correspondance à la fin, par exemple.

Match User john Address 192.168.1.0/24
    PasswordAuthentication yes

Notez que cela exprime deux conditions, User john et Address 192.168.1.0/24, les deux doivent être remplies pour que PasswordAuthentication yes être appliqué. Le 0/24 est notation CIDR pour toute adresse du sous-réseau 192.168.1.x.

Vous pouvez maintenant désactiver l’authentification par mot de passe pour d’autres combinaisons d’adresses utilisateur dans le corps principal de la configuration, en commençant par la section suivante:

# Change to no to disable tunnelled clear text passwords

et changer la valeur par défaut

#PasswordAuthentication yes

à

PasswordAuthentication no

Enfin, redémarrez le service - pour les systèmes init basés sur systemd, vous pouvez le faire en utilisant

Sudo systemctl restart ssh.service

Vous pouvez vérifier que les utilisateurs ne correspondant pas ne peuvent plus s'authentifier à l'aide de mots de passe en forçant le client à essayer, par exemple.

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

qui devrait échouer avec un message comme

Permission denied (publickey).

alors que john devrait être invité à entrer un mot de passe:

$ 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)

Si vous voulez que l'authentification par mot de passe soit le mécanisme préféré pour john sur le réseau local, vous devrez peut-être spécifier cela dans la configuration du client correspondant, par exemple ~/.ssh/ssh_config

2
steeldriver