web-dev-qa-db-fra.com

Mot de passe Sudo lors de l'authentification via SSH sans mot de passe

J'ai quelques boîtiers tous en réseau sur Amazon EC2, chacun étant en communication automatisée entre eux via SSH (rsync, etc.). En tant que tel, j'ai créé des clés SSH sur chacune de ces machines pour leur permettre de se connecter entre elles sans nécessiter de mot de passe. De même, mon compte personnel est également basé sur des clés et sans mot de passe.

À ma connaissance, j'ai sécurisé SSH de manière appropriée en utilisant des méthodes bien documentées.

Sous cette configuration, je remarque que je n'ai pas à fournir de mot de passe pour utiliser Sudo. Si j'essaie de su root, Je n'arrive nulle part, car root n'a pas de mot de passe. Cependant, si je lance un Sudo -i, On ne me demande pas de mot de passe et je reçois immédiatement le root. Cela m'inquiète un peu.

Donc, deux questions:

  1. Devrais cela m'inquiète, ou suis-je trop paranoïaque?
  2. Est-il possible de définir un mot de passe Sudo lors de l'utilisation de l'authentification SSH basée sur les clés?

Plusieurs de ces boîtiers sont des serveurs Web et hébergent des applications Web de ce que je crains d'être de qualité douteuse. (Je ne les ai pas écrits, ils sont donc douteux!) J'ai Apache et les autorisations sur les serveurs configurées de telle sorte qu'un très utilisateur non privilégié (www-data) sert les fichiers, mais ma crainte est que, d'une manière ou d'une autre, un attaquant pourrait compromettre une application Web, augmenter les privilèges à un utilisateur plus privilégié, puis simplement Sudo -i enraciner.

Je ne suis pas au courant d'une vulnérabilité dans mon logiciel qui permettrait à www-data d'augmenter ses privilèges, mais je préférerais avoir un mot de passe en place pour utiliser Sudo si cela se produisait.

Aussi, pour mémoire: j'ai essayé de définir un mot de passe en me connectant via SSH puis en exécutant passwd, mais cela a généré une erreur. Je ne me souviens pas de la formulation exacte, mais il s'agissait d'un "jeton". Quoi qu'il en soit, le mot de passe n'a pas collé, ce qui me fait penser que je comprends mal quelque chose à un niveau fondamental ici.

Tout éclairage sur le sujet serait très apprécié. Merci.

- Mise à jour: 7 décembre 2011 -

Merci pour les explications réfléchies, tout. Il semble en fait que le problème réside dans /etc/sudoers. Merci de m'avoir indiqué dans cette direction.

J'ai pensé que je documenterais cela pour terminer la discussion. Quand j'ai examiné /etc/sudoers, J'ai rencontré les lignes suivantes:

# ubuntu user is default user in ec2-images.  
# It needs passwordless Sudo functionality.
ubuntu  ALL=(ALL) NOPASSWD:ALL

En fait, j'utilise l'utilisateur ubuntu pour mes opérations privilégiées (bien que, encore une fois, le serveur Web ne fonctionne que comme www-data), donc je suppose que cela explique le problème que je rencontrais.

Si quelqu'un veut poursuivre avec une supposition pourquoi l'utilisateur ubuntu a besoin de la fonctionnalité Sudo sans mot de passe, j'aimerais l'entendre. Sinon, du moins pour le moment, je pense que je vais laisser assez bien tranquille et laisser la configuration telle quelle. Je ne veux pas briser un système qui fonctionne en essayant de résoudre de manière préventive un problème inexistant.

Merci encore d'avoir prêté votre temps et votre expertise.

27
Chris Allen Lane

Si vous n'êtes pas invité à entrer un mot de passe Sudo, c'est parce que votre utilisateur (ou groupe d'utilisateurs) a activé NOPASSWD dans/etc/sudoers. Vous pouvez éditer ce fichier avec visudo en tant que root.

En ce qui concerne l'authentification sans mot de passe, vous avez raison de dire que l'authentification par clé publique est une méthode préférée pour l'authentification sur les serveurs. S'il n'y a pas de mot de passe à deviner, aucune tentative de force brute ne peut réussir.

Le fait que vous n'ayez aucun mot de passe root viole certaines des meilleures pratiques, mais comme vous l'avez correctement indiqué, si une clé est requise pour entrer dans la boîte, c'est probablement correct. Le fait d'avoir un mot de passe root peut vous encourager à utiliser SSH pour vous connecter en tant que root, qui doit être désactivé dans votre sshd_config.

La seule question que j'ai se rapporte à l'un de vos derniers paragraphes:

Aussi, pour mémoire: j'ai essayé de définir un mot de passe en me connectant via SSH puis en exécutant passwd, mais cela a généré une erreur. Je ne me souviens pas de la formulation exacte, mais il s'agissait d'un "jeton". Quoi qu'il en soit, le mot de passe n'a pas collé, ce qui me fait penser que je comprends mal quelque chose à un niveau fondamental ici.

Vous n'avez pas pu définir de mot de passe pendant que Sudo rootait? Ou tout simplement en tant qu'utilisateur régulier? La mise en place d'une authentification par clé publique ne devrait pas vous empêcher de définir un mot de passe d'espace utilisateur, ni un mot de passe root. Il semble que vous puissiez rencontrer ce problème, discuté sur SuperUser , donc j'espère que cela vous aidera un peu.

J'espère avoir répondu à l'aspect sécurité de votre question; n'hésitez pas à ajouter un commentaire ou un suivi si vous avez besoin de plus d'informations!

14
dshaw

Vous pouvez définir un mot de passe sur root pendant que l'authentification par clé SSH est activée. Dans Ubuntu disrto, par exemple, le compte root est "désactivé". Vous pouvez créer Sudo sur le compte créé lors de l'installation, qui s'exécutera avec le privilège root.

Si vous exécutez www-data$Sudo -i vous devriez obtenir le message suivant:

www-data is not in the sudoers file.  This incident will be reported.

Ce que dshaw a mentionné est généralement désactivé dans Ubuntu

# %Sudo ALL=NOPASSWD: ALL

Il est donc bon de le vérifier car vous ne devriez pas pouvoir exécuter Sudo -i et obtenir le root sans entrer de mot de passe.

J'espère que cela t'aides.

3
Bassec