ubuntu
J'installe quelques boîtes et j'utilise l'opscode chef
comme outil de configuration. Il serait assez facile d'installer des clés publiques pour chaque utilisateur sur chacun de ces serveurs et de désactiver l'authentification par mot de passe.
Cependant, les utilisateurs doivent également avoir des sudo
privilèges, qui nécessitent par défaut un mot de passe.
Si je veux utiliser les clés publiques des utilisateurs comme méthode de gestion des accès et autoriser les sudo
privilèges des utilisateurs , cela signifie-t-il que je devrais également configurer les utilisateurs avec NOPASSWD: ALL
in visduo
ou existe-t-il un moyen pour un utilisateur de changer son propre mot de passe s'il avoir uniquement l'authentification par clé publique?
man sudoers
donnera des informations sur l'exécution de certaines commandes avec sudo sans mot de passe utilisateur nécessaire. Vous pouvez même ajouter un shellscript à / etc / sudoers qui autoriserait un paramètre "self-password" par utilisateur sans avoir besoin d'un mot de passe préalable.NOPASSWD: ALL
lequel les membres de l'équipe font partie. Si vous pouvez suggérer une meilleure solution, veuillez la poster comme réponse.Réponses:
Sudo, dans sa configuration la plus courante, oblige l'utilisateur à taper son mot de passe. En règle générale, l'utilisateur a déjà utilisé son mot de passe pour s'authentifier dans le compte, et taper à nouveau le mot de passe est un moyen de confirmer que l'utilisateur légitime n'a pas abandonné sa console et a été détourné.
Dans votre configuration, le mot de passe de l'utilisateur serait utilisé uniquement pour l'authentification à sudo. En particulier, si la clé SSH d'un utilisateur est compromise, l'attaquant ne pourrait pas élever ses privilèges root sur le serveur. L'attaquant pourrait planter un enregistreur de frappe dans le compte, mais cet enregistreur de frappe serait détectable par d'autres utilisateurs, et pourrait même être surveillé automatiquement.
Un utilisateur doit normalement connaître son mot de passe actuel pour le changer en un mot de passe différent. Le
passwd
programme vérifie cela (il peut être configuré pour ne pas le faire, mais ce n'est pas utile ou du tout souhaitable dans votre scénario). Cependant, root peut changer le mot de passe de n'importe quel utilisateur sans connaître l'ancien; par conséquent, un utilisateur doté de pouvoirs sudo peut modifier son propre mot de passe sans le saisir à l'passwd
invite en exécutantsudo passwd $USER
. Sisudo
est configuré pour exiger le mot de passe de l'utilisateur, l'utilisateur doit avoir tapé le mot de passe desudo
toute façon.Vous pouvez désactiver l'authentification par mot de passe de manière sélective. Dans votre cas, vous devez désactiver l'authentification par mot de passe dans ssh, et éventuellement dans d'autres services. La plupart des services sur les unités les plus modernes (y compris Ubuntu) utilisent PAM pour configurer les méthodes d'authentification. Sur Ubuntu, les fichiers de configuration PAM vivent
/etc/pam.d
. Pour désactiver l'authentification par mot de passe, mettez laauth … pam_unix.so
ligne en commentaire/etc/pam.d/common-auth
. De plus, assurez- vous que vous avezPasswordAuthentication no
dans/etc/ssh/sshd_config
la intégré l'authentification par mot de passe de désactiver sshd.Vous souhaiterez peut-être autoriser certains utilisateurs administratifs à se connecter avec un mot de passe ou autoriser l'authentification par mot de passe sur la console. C'est possible avec PAM (c'est assez flexible), mais je ne pourrais pas vous dire à quel point je suis au sommet de ma tête; posez une question distincte si vous avez besoin d'aide.
la source
sudo passwd
cela changerait le mot de passe de l'utilisateur actuel, pas celui de sudo?sudo
peut changer son propre mot de passe. La commande exacte n'a pas vraiment d'importance, mais pour aller plus en détail, ce seraitsudo passwd bob
où sebob
trouve le nom de l'utilisateur, ou quelque chose d'équivalent. Sans aucun argument,sudo passwd
changerait en effet le mot de passe de root.Vous pouvez utiliser le module pam_ssh_agent_auth . C'est assez simple à compiler, puis il suffit d'ajouter l'entrée
avant les autres
auth
(ouinclude
) entrées/etc/pam.d/sudo
et
à
/etc/sudoers
(viavisudo
).Désormais, chaque utilisateur peut s'authentifier
sudo
via un agent SSH (transféré ou local) ou son mot de passe. Il peut être judicieux de demander à vos utilisateurs d'utiliser dessh-add -c
telle sorte que chaquesudo
appel nécessite au moins une confirmation.la source
Oui, c'est incroyablement peu sûr et permet également à un utilisateur d'accéder aux mots de passe des autres utilisateurs, mais comme ils ont sudo, vous ne pouvez pas faire grand-chose.
Fondamentalement, vous procédez comme suit:
$ sudo -i
Maintenant, nous sommes root. Nous avons accès à tout.
# passwd $username
$ username peut être le nom d'utilisateur de n'importe qui.
Boom, le mot de passe a changé. Encore une fois, incroyablement précaire car vous pouvez changer n'importe qui, mais cela fonctionne, mais cela fonctionne. Je ne le recommande pas, mais offre plutôt cette réponse comme exemple de ce qu'il ne faut pas faire.
la source
sudo -i
mot de passe utilisateur actuel.sudo bash
pourrait encore être sans mot de passe étant donné cette configuration dans le/etc/sudoers
fichier. Je pense que @jrg est comme dit plus en se concentrant sur le problème d'insécurité avec sudo icisudo -i
, vous pouvez passer directement àsudo passwd $username
@Miro, vous n'avez pas besoin de connaître le mot de passe utilisateur actuel. Il vous suffit de connaître le mot de passe root pour utiliser sudoLe but du mot de passe est de garantir que les pirates qui obtiennent la clé d'un utilisateur ou trouvent un terminal sans surveillance ne peuvent pas accéder à la racine. Pour cette raison, je ne recommanderais aucune solution impliquant sudo sans mot de passe.
Je vous suggère de rester simple: peut-être envoyer à un utilisateur le mot de passe par défaut avec des instructions strictes pour le changer dès que possible, ou bien insérer un script dans leur
.profile
ou.login
ou quelque chose de tel qu'il exige un nouveau mot de passe lors de leur première connexion. Il pourrait se désactiver une fois terminé, et vous pourriez utiliserexpect
pour entrer le mot de passe existant afin qu'ils n'aient jamais à le connaître.la source
> Cela devrait vous permettre d'avoir des utilisateurs qui ne peuvent se connecter qu'en utilisant des clés publiques et ne peuvent pas utiliser de mots de passe pour se connecter. Cependant, il sera obligé de changer le mot de passe la première fois qu'il se connectera ... mais sans avoir à lui dire un mot de passe fictif à l'avance ... Les utilisateurs seront simplement invités à réinitialiser le mot de passe et par la suite ils ne pourront l'utiliser que pour sudo mais ne pourra pas se connecter (ssh) en utilisant ce mot de passe. Notez que l'astuce ici est de ne pas avoir dit aux utilisateurs un mot de passe factice qu'ils seraient ensuite tenus de saisir au moment de la connexion une fois qu'ils sont tenus de changer leur mot de passe ... En bref, aucune communication de l'administrateur (root) à l'utilisateur réel est requis.
la source