1 votes

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

Tous les utilisateurs doivent se connecter uniquement en utilisant des clés sauf John, il peut se connecter en utilisant des clés et s'il utilise le réseau local 192.168.1.x alors il pourrait se connecter en SSH en utilisant un mot de passe, mais il ne peut pas se connecter en utilisant un mot de passe à partir d'IP aléatoires.

Je ne sais pas comment écrire la règle pour John. Dois-je autoriser les utilisateurs john@192.168.1.x ? Mais comment refuser à John d'autres IPs? Que se passe-t-il si John se connecte en utilisant un port différent?

Quelle est la meilleure façon de le faire?

2voto

steeldriver Points 118154

Vous devriez pouvoir le faire avec une directive Match.

Avant de commencer, assurez-vous d'avoir au moins un compte avec un accès basé sur une clé au serveur (ou un accès physique).

Ensuite, modifiez 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

Remarquez que cela exprime deux conditions, User john et Address 192.168.1.0/24, toutes les deux devant être satisfaites pour que PasswordAuthentication yes soit appliqué. Le 0/24 est la notation CIDR pour n'importe quelle adresse dans le sous-réseau 192.168.1.x.

Maintenant, vous pouvez désactiver l'authentification par mot de passe pour d'autres combinaisons utilisateur-adresse dans le corps principal de la configuration, en trouvant la section commençant par :

# Changez en no pour désactiver les mots de passe en texte clair tunnelisés

et en changeant la valeur par défaut

#PasswordAuthentication yes

par

PasswordAuthentication no

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

sudo systemctl restart ssh.service

Vous pouvez vérifier que les utilisateurs qui ne correspondent pas ne peuvent plus s'authentifier en utilisant des mots de passe en forçant le client à essayer par exemple

$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no steeldriver@192.168.1.11

ce qui devrait échouer avec un message comme

Permission denied (publickey).

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

$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no john@192.168.1.11
john@192.168.1.11's password: 
Bienvenue sur Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-116-generic x86_64)

Si vous souhaitez que l'authentification par mot de passe soit le mécanisme préféré pour john lorsqu'il est sur le réseau local, vous devrez peut-être le spécifier dans la configuration client correspondante, c'est-à-dire ~/.ssh/ssh_config

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X