13 votes

Restriction SSHd par utilisateur

J'ai besoin de restreindre certains utilisateurs afin qu'ils ne puissent se connecter en SSH qu'en utilisant des clés ssh et que les autres utilisateurs puissent se connecter en utilisant une clé ou un mot de passe.

un exemple :

J'aimerais que l'utilisateur root puisse se connecter à distance (via sshd) en utilisant une clé, de sorte qu'aucun mot de passe ne soit accepté (même si le mot de passe est correct).

et pour les autres utilisateurs (tous les utilisateurs du système), ils peuvent se connecter à l'aide d'une clé et/ou d'un mot de passe.

comment faire ?

23voto

Devin Ceartas Points 1438

Je pense que ce que vous voulez, c'est "Match User". Vous l'utilisez pour faire correspondre un nom d'utilisateur, puis vous mettez en retrait une série de paramètres de configuration qui s'appliquent spécifiquement à cet utilisateur.

Match User Joe
  PasswordAuthentication no

Match User Jane
  PasswordAuthentication yes

Je l'utilise parfois pour mettre en place un accès SFTP chroot pour des clients.

2voto

Doug Wilson Points 1435

Configurez ssh comme suit :

nano /etc/ssh/sshd_config

AllowUsers username1 username2 username3

Redémarrer SSH

Fournissez ensuite les clés aux personnes que vous souhaitez empêcher d'utiliser des mots de passe.

ssh-keygen est utilisé pour générer cette paire de clés pour vous. Voici une session au cours de laquelle votre paire de clés privée/publique personnelle est créée :

#ssh-keygen -t rsa

La commande ssh-keygen -t rsa a lancé la création de la paire de clés.

Je n'ai pas saisi de phrase d'authentification pour ma configuration (j'ai appuyé sur la touche Entrée à la place).

La clé privée a été enregistrée dans le fichier .ssh/id_rsa. Ce fichier est en lecture seule et vous est réservé. Personne d'autre ne doit voir le contenu de ce fichier, car il est utilisé pour déchiffrer toute la correspondance chiffrée avec la clé publique.

La clé publique est enregistrée dans le fichier .ssh/id_rsa.pub.

Son contenu est ensuite copié dans le fichier .ssh/authorized_keys du système auquel vous souhaitez accéder par SSH sans être invité à saisir un mot de passe.

#scp id_rsa.pub remote system:~/.ssh/authorized_keys

Enfin, verrouillez le compte (l'authentification par clé reste possible).

# passwd -l username1

0voto

golan Points 134

Ce que je ferais, c'est de définir /etc/sshd/sshd_config de telle sorte que :

PermitRootLogin without-password

juste pour plus de sécurité et pour éviter que le mot de passe de root ne soit verrouillé (il ne permettrait à root de se connecter qu'en utilisant une clé)

J'utiliserais plutôt AllowGroups 代わりに AllowUser Pour ma part, il serait plus pratique d'ajouter des utilisateurs à un groupe plutôt que de les ajouter à un groupe. sshd_config mais cela peut dépendre de vos préférences personnelles.

0voto

milegrin Points 1

Toutes les solutions ci-dessus sont excellentes et fonctionnent, mais si je peux me permettre, je vais un peu compliquer les choses. J'utilise un sshd_config sur un grand nombre de serveurs et de versions, ce qui fait de la configuration un processus de réflexion délibéré, et c'est ce que j'utilise.

Mon cas d'utilisation :

  • L'accès à la racine est limité aux clés provenant de deux adresses IP spécifiques.
  • Les utilisateurs d'automatisation (par exemple ansible) sont limités à des clés uniquement à partir de serveurs spécifiques (par exemple RunDeck, Jenkins, etc.).
  • Les utilisateurs de l'application ne peuvent pas se connecter du tout en utilisant ssh
  • Les administrateurs et les utilisateurs peuvent utiliser une clé ou un mot de passe

Tout d'abord, j'utilise principalement Allow_Groups Il est plus facile à gérer sur plusieurs boîtes avec une pléthore d'utilisateurs différents. Pour les utilisateurs communs à toutes les boîtes (par exemple l'automatisation ou la surveillance), allow_Users fonctionne également bien, mais je préfère encore utiliser les groupes.

Passons maintenant à la configuration proprement dite /etc/ssh/sshd_config :

Tout d'abord, l'accès SSH est réservé à des groupes (ou utilisateurs) spécifiques :

AllowGroups sshusr

Cela signifie essentiellement que les utilisateurs doivent être membres du groupe de travail de l'Union européenne. sshusr pour pouvoir utiliser SSH. Pour empêcher les utilisateurs d'applications d'accéder à SSH, il suffit de s'assurer qu'ils sont no un membre de la sshusr groupe. NOTE : Cela inclut la racine, vous devez donc ajouter root に、その sshusr groupe !

Pour l'accès à la racine par clé uniquement, utiliser :

PermitRootLogin without-password

Pour restreindre les groupes à l'utilisation de l'authentification par clé uniquement :

Match Group ansible,monitor
  PasswordAuthentication no

Par défaut, je désactive des éléments tels que port forwarding y X11 forwarding etc. mais pour des groupes spécifiques, vous pouvez l'activer et autoriser l'authentification par mot de passe (habituellement on par défaut, mais pour les environnements sécurisés, vous pouvez le désactiver. off pour que les clés soient utilisées par défaut)

Match Group sysadmin,dbadmin
  PasswordAuthentication yes
  AllowTcpForwarding yes
  PermitTunnel yes
  X11Forwarding yes

Il y a ensuite des cas particuliers comme sftp uniquement les utilisateurs :

Match Group sftp
  ForceCommand internal-sftp
  PermitTTY no
  MaxSessions 5

Il s'agit maintenant de restreindre les clés pour autoriser l'accès à partir d'IP spécifiques uniquement. Cela fonctionne également pour les FQDN, mais je ne l'ai pas utilisé ici. Dans le ~/.ssh/authorized_keys précède le fichier from= restriction à la (aux) clé(s) applicable(s)

from="10.1.1.1,10.2.2.2,10.3.3.0/24" ssh-rsa AAAAB3NTheRestOfMyKeyxyz

Cela permettra d'utiliser la clé à partir de ces IP spécifiques uniquement.

J'espère que ces informations vous aideront et qu'elles seront utiles à beaucoup d'autres personnes.

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