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 ?
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?
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:
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.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é.
À 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.
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.