web-dev-qa-db-fra.com

Authentification par clé SSH, mais toujours besoin d'un mot de passe pour sudo?

SSH avec authentification par clé publique-privée est activé par défaut avec la plupart des distributions Linux. C'est génial car lorsque je crée des comptes pour des utilisateurs distants, je n'ai pas à leur envoyer des informations sensibles (mots de passe).

Cependant, ce processus devient inutile lorsque ces utilisateurs doivent exécuter Sudo - le serveur demande toujours leurs mots de passe. Cela signifie que je dois toujours générer des mots de passe pour ces utilisateurs et trouver comment les obtenir en toute sécurité.

Je connais le fichier sudoers et le paramètre NOPASSWORD. Cependant, je me sens mal à l'aise de l'activer. Je voudrais toujours une sorte d'authentification avant que les utilisateurs puissent exécuter les commandes Sudo.

En faisant des recherches sur ce sujet, j'ai trouvé pam_ssh_agent_auth projet, qui d'après ma compréhension permet la même authentification par clé privée/publique que celle utilisée pour les connexions ssh mais pour la commande Sudo.

Il semble qu'avec ce module en place, nous pouvons avoir des comptes sans mot de passe.

Pourquoi ce module ou un processus similaire ne fait-il pas partie des configurations de distribution Linux standard? Y a-t-il une mise en garde de sécurité qui me manque pourquoi ce n'est pas adopté plus largement? Pourquoi Sudo avec mot de passe est considéré comme plus sécurisé que clé publique/privée Sudo ?

37
Mxx

J'essaie une approche différente qui ne nécessite pas de créer et de gérer des mots de passe: je configure l'authentification basée sur les clés avec la clé publique de l'utilisateur, désactive l'authenticon basé sur un mot de passe pour ssh et configure les comptes utilisateur avec un mot de passe vide mais expiré (passwd -de). De cette façon, les utilisateurs sont invités à leur première connexion et peuvent choisir leurs propres mots de passe.

Je me sens un peu mal à l'aise à propos du mot de passe vide, mais pour autant que je sache, c'est bien tant que l'authentification par mot de passe pour ssh est désactivée et qu'il n'y a aucun autre service en cours d'exécution qui nécessite une authentification (IMAP ou quelque chose). Des opinions à ce sujet?

17
ofrommel

Je suggère d'éviter même d'installer Sudo sur vos systèmes: c'est un vecteur d'attaque supplémentaire sans généralement aucune justification pour l'avoir. J'ai écrit un article sur l'utilisation (erronée) de Sudo si vous êtes intéressé à en savoir plus sur le sujet: http://dmitry.khlebnikov.net/2015/07/should-we-use-Sudo-for- au jour le jour.html

Re: la question d'origine - si vous avez besoin d'une commande privilégiée à exécuter par des utilisateurs non privilégiés, vous pouvez utiliser l'astuce suivante:

  1. générer une clé SSH sans phrase de passe
  2. ajouter la partie publique avec les éléments suivants: from="127.0.0.1",command="your_desired_command_here",no-pty,no-port-forwarding,no-agent-forwarding (vous pouvez également restreindre davantage la session SSH, voir "man sshd"). Notez que la clé doit être séparée de cet en-tête par un caractère espace.
  3. installez cette clé publique dans les ~/.ssh/authorized_keys du compte privilégié
  4. fournir à l'utilisateur la clé privée (ou créer un script qui se connecte simplement via l'interface de bouclage au compte privilégié à l'aide de la clé privée)

Par exemple, si le compte privilégié est r_service (créé avec useradd -om -u0 -g0 -d /root/service -s /bin/bash r_service) l'appel à cette commande privilégiée à partir d'un compte non privilégié serait quelque chose comme:

$ ssh -i ~/.ssh/privileged_command r_service@0

De cette façon, vous autoriserez vos utilisateurs à exécuter cette commande privilégiée sans compromettre le modèle de sécurité.

8
galaxy

À mon avis, Sudo pour les administrateurs de serveur est un peu exagéré. Si les gens se connectent et ont un accès root (via un mécanisme), ils effectuent généralement des tâches de maintenance, où ils utiliseront Sudo pendant> 90% du temps. Le but de Sudo est de donner aux comptes qui sont connectés une certaine séparation entre les applications non fiables et les tâches de type administrateur, et de faire savoir aux utilisateurs qu'ils changent le système (et doivent faire attention). Pour les ordinateurs de bureau, les deux s'appliquent. Pour les serveurs cependant, la plupart des tâches nécessiteront déjà Sudo, donc les deux points s'affaiblissent. Sudo présente certains avantages avec son contrôle à grain fin, mais pour s'appuyer sur ses capacités de journalisation, vous devrez configurer la journalisation à distance, sinon les personnes ayant un accès root peuvent falsifier les journaux passés.

Y a-t-il une mise en garde de sécurité qui me manque pourquoi ce n'est pas adopté plus largement?

pam_ssh_agent_auth nécessite le transfert de l'agent ssh pour fonctionner sur ssh. Ensuite, cependant, il est un peu inutile de l'utiliser, car alors chaque processus (non groupé) exécuté sous le compte de l'utilisateur pourrait utiliser l'agent pour exécuter des commandes en tant que root. Cela permet à chacun de ces processus d'exécuter Sudo, ce que fait précisément le paramètre NOPASSWORD.

Mon conseil serait d'avoir NOPASSWORD et d'en être satisfait. Il donne toujours aux gens le sentiment "maintenant je change le système", mais il n'a pas de mots de passe ennuyeux.

Si vous souhaitez toujours avoir des mots de passe, vous pouvez les envoyer par e-mail en clair, mais exiger qu'ils soient modifiés la première fois qu'ils sont utilisés. Un attaquant aurait besoin à la fois de l'e-mail et de la clé privée de l'utilisateur pour réussir. S'ils ont déjà accès à la clé privée, ils pourraient faire des choses désagréables à .bashrc et avoir accès la prochaine fois que l'utilisateur obtiendra Sudo avec un mot de passe que l'attaquant n'a pas besoin de connaître.

7
user10008

L'authentification SSH et les privilèges de sécurité sont deux choses différentes, donc inutile de l'avoir comme fonctionnalité par défaut. Cependant, il ouvre un autre vecteur d'attaque (il y a un CVE ) et de mon point de vue, il est plus facile pour les utilisateurs d'en abuser, ce qui est mauvais .

En ce qui concerne les mots de passe, une façon consiste à envoyer un mot de passe de courte durée à l'utilisateur et à l'obliger à le modifier après la connexion initiale. Ou autorisez-les à "enregistrer" leur compte et à ne travailler qu'avec le hachage. Il y a des avantages et des inconvénients dans chaque approche, mais un bon endroit pour l'inspiration est les services de compte Shell commerciaux et gratuits.

1
go2