Autoriser root à se connecter via ssh uniquement avec une authentification par clé

50

J'ai quelques doutes sur certaines configurations de serveur SSH sur /etc/ssh/sshd_config. Je veux le prochain comportement:

  1. L'authentification par clé publique est le seul moyen de s'authentifier en tant que root (aucune authentification par mot de passe ou autre)
  2. Les utilisateurs normaux peuvent utiliser les deux (authentification par mot de passe et par clé publique)

Si je règle PasswordAuthentication nomon premier point est satisfait mais pas le second. Il y a un moyen de définir PasswordAuthentication nouniquement pour la racine?

mavillan
la source

Réponses:

80

Vous pouvez le faire en utilisant la PermitRootLogindirective. De la sshd_configpage de manuel:

Spécifie si la racine peut se connecter à l'aide de ssh (1). L'argument doit être «oui», «sans mot de passe», «commandes forcées uniquement» ou «non». La valeur par défaut est "oui".

Si cette option est définie sur «sans mot de passe», l'authentification par mot de passe est désactivée pour root.

Ce qui suit accomplira ce que vous voulez:

PasswordAuthentication yes
PermitRootLogin without-password
Jordan
la source
1
J'ai essayé ceci sur Debian et vérifié avec service ssh restartsur le serveur puis sur le client. J'ai essayé de me connecter sans ma clé avec ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@hostet je ne pouvais en effet pas me connecter avec un mot de passe, mais je pouvais avec une clé pour l'utilisateur root.
Bastian
1
Oui, mais si vous faites simplement cela à la place, alors vous pouvez vous connecter avec le mot de passe: ssh -o PreferredAuthentications=password root@hostpas particulièrement sécurisé
imho
3
En 2019, il s'agit de "PermitRootLogin prohibit-password", l'ancien sans-mot de passe est un alias déconseillé.
vbraun le
10

Vous pouvez utiliser des Matchblocs pour configurer certaines options d'authentification par utilisateur ou groupe, ou par adresse IP ou nom d'hôte de l'origine de la connexion.

PasswordAuthentication yes
PermitRootLogin yes

Match User root
PasswordAuthentication no
Gilles, arrête de faire le mal
la source
3
J'ai réussi à m'enfermer hors de mon serveur ssh en faisant cela.
Richard Metzler
Cela semble être la meilleure méthode si vous ne voulez jamais que l'invite de mot de passe apparaisse pour root.
Leo
Cela m'a aussi bloqué. Je pense que cela pourrait être dans le mauvais ordre ...
Gary
4

J'ai une approche encore plus restrictive pour accorder des privilèges root sur mon serveur, ce qui pourrait être intéressant pour les paranoïaques comme moi. Faites attention à ce que vous faites et dans quel ordre, sinon vous pourriez vous retrouver avec un système sur lequel vous ne pouvez pas obtenir un accès root.

  • Créez un groupe spécifique sugroupdont les membres seront autorisés à devenir root et n'autoriserez l'authentification par clé pour ce groupe en mettant les lignes suivantes à la fin de sshd_confid:

Match Group sugroup

PasswordAuthentication no

  • Placez la commande auth required pam_wheel.so group=sugroupdans /etc/pam.d/su. Il est peut-être déjà là et il vous suffit de le commenter. Cela refuse l'accès root à tous les utilisateurs non membres du sous-groupe.
  • Choisissez un mot de passe root fort :)
  • Vérifiez si votre nouvelle méthode d’authentification fonctionne et seulement si:
  • Refusez la connexion root directe via ssh en utilisant PermitRootLogin noin /etc/ssh/sshd_config.

En utilisant cette configuration, il est nécessaire d’utiliser une clé d’authentification et un mot de passe pour devenir root. J'ai configuré mon serveur comme ceci, car je préfère ne pas avoir d'accès root direct via ssh, quelle que soit la méthode d'authentification.

xwst
la source