J'aime l'idée d'accéder aux serveurs via des clés, pour ne pas avoir à saisir mon mot de passe chaque fois que je me trouve ssh
dans une boîte. Je verrouille même le root
mot de passe de l' utilisateur (pas ) ( passwd -l username
), de sorte qu'il est impossible de se connecter sans clé.
Mais tout cela se casse si je dois entrer un mot de passe pour les sudo
commandes. Je suis donc tenté de configurer sans motsudo
de passe pour rendre les choses conformes à la connexion sans mot de passe.
Cependant, j'ai toujours le sentiment que cela peut se retourner contre moi de façon inattendue, cela me semble tout simplement peu sûr. Y at-il des mises en garde avec une telle configuration? Recommanderiez-vous / ne recommanderiez-vous pas cette opération pour un compte d'utilisateur sur un serveur?
Des clarifications
- Je parle de l'utilisation de
sudo
dans une session utilisateur interactive ici, pas pour des services ou des scripts administratifs - Je parle d'utiliser un serveur cloud (je n'ai donc aucun accès local physique à une machine et je ne peux me connecter qu'à distance)
- Je sais qu'il y
sudo
a un délai d'attente pendant lequel je n'ai pas besoin de ressaisir mon mot de passe. Mais mon concert ne consiste pas vraiment à perdre le temps supplémentaire nécessaire pour taper physiquement un mot de passe. Mon idée cependant était de ne pas avoir à gérer de mot de passe du tout, car je suppose que:- Si je dois le mémoriser du tout, c'est très probablement trop court pour être sécurisé ou réutilisé
- Si je génère un mot de passe long et unique pour mon compte distant, je dois le stocker quelque part (programme de gestion de mot de passe local ou service cloud) et le récupérer à chaque fois que je souhaite l'utiliser
sudo
. J'espérais pouvoir l'éviter.
Donc, avec cette question, je voulais mieux comprendre les risques, les mises en garde et les compromis d'une configuration possible par rapport aux autres.
Suivi 1
Toutes les réponses disent que le mot de passe sudo
sans mot de passe n'est pas sécurisé, car il permet une escalade "facile" des privilèges si mon compte d'utilisateur personnel est compromis. Je comprends que. Par contre, si j'utilise un mot de passe, tous les risques classiques sont associés à des mots de passe (chaîne trop courte ou trop commune, répétition sur différents services, etc.). Mais je suppose que si je désactive l’authentification par mot de passe /etc/ssh/sshd_config
afin que vous ayez toujours une clé pour vous connecter, puis-je utiliser un mot de passe plus simple simplement pour sudo
que ce soit plus facile à saisir? Est-ce une stratégie valable?
Suivi 2
Si j'ai aussi une clé pour me connecter en tant que root
ssh, si quelqu'un a accès à mon ordinateur et vole mes clés (ils sont toujours protégés par le mot de passe du trousseau du système d'exploitation!), Ils peuvent également obtenir un accès direct au root
compte. , en contournant le sudo
chemin. Quelle devrait être la politique d'accès au root
compte alors?
/etc/passwd
tel que nologin, ne définissez aucun mot de passe, puis définissez sans mot de passe dans visudo. Si vous faites cela, vous devez également vous assurer que le paramètre visudo ne concerne que ce dont ce compte système a absolument besoin, c'est-à-dire qu'il est verrouillé sur les seules commandes qu'il doit exécuter.Réponses:
Vous vous engagez à désactiver les connexions avec mot de passe. Au lieu de verrouiller le compte d’un utilisateur, définissez-le
PasswordAuthentication no
dans votre/etc/ssh/sshd_config
.Avec cet ensemble, l'authentification par mot de passe est désactivée pour ssh, mais vous pouvez toujours utiliser un mot de passe pour sudo.
La seule fois que je recommande de configurer
NOPASSWD
sudo concerne les comptes de service, où les processus doivent pouvoir exécuter des commandes via sudo par programme. Dans ces circonstances, assurez-vous que vous avez explicitement ajouté à la liste blanche uniquement les commandes spécifiques que ce compte doit exécuter. Pour les comptes interactifs, vous devez toujours laisser les mots de passe activés.Réponses à vos questions de suivi:
Oui c'est correct. Je recommande toujours d'utiliser des mots de passe relativement forts pour les comptes locaux, mais pas trop forts. ~ 8 caractères générés aléatoirement suffisent.
L'accès à la racine via ssh devrait être désactivé. Période. Placez
PermitRootLogin no
dans votresshd_config
.Vous devriez toujours avoir un moyen d'obtenir un accès hors bande à la console de votre serveur. Plusieurs fournisseurs de VPS fournissent cela, tout comme les fournisseurs de matériel dédié. Si votre fournisseur n'accorde pas un accès réel à la console (par exemple, EC2), vous pouvez toujours restaurer l'accès à l'aide d'un processus similaire à celui décrit dans cette réponse .
la source
PasswordAuthentication
qui concerne tous les utilisateurs, vous pouvez toujours utiliser lesMatch
sections de sshd_config pour le réactiver pour certains utilisateurs ou groupes.Je limite généralement l'utilisation de
NOPASSWORD
commandes à des processus automatisés. Il est préférable d’avoir un compte de service pour ces commandes et de limiter l’utilisation de sudo aux commandes requises.En tenant
NOPASSWORD
compte des commandes générales, permet à quiconque ayant accès à votre ID utilisateur d’exécuter des commandes. Cela pourrait résulter d'un compromis de vos informations d'identification, mais pourrait être aussi simple que quelqu'un assis à votre bureau lorsque vous vous éloignez pour une seconde.Je trouve que je n'ai pas à entrer mon mot de passe aussi souvent. Une fois que vous avez entré votre mot de passe, vous pouvez exécuter plusieurs commandes si vous n'attendez pas trop longtemps entre elles. Le délai d'attente est configurable.
la source
Je ne l'utiliserais que dans deux circonstances:
Par défaut, la plupart des
sudo
configurations ne vous demanderont plus dans la même session (si vous ouvrez un nouveau shell qui n'a aucun effet). Vous pouvez contrôler ce comportement dans une certaine mesure avec letimestamp_timeout
paramètre.sudo
Sans mot de passe, mot de passe n'est pas aussi dangereux que lesssh
clés sans phrase secrète , car un attaquant distant a besoin de vos informations d'identification pour entrer, mais s'il a réussi à compromettre votre clé privée (ou s'il est physiquement local et vous vous êtes connecté (e) et déverrouillé (e) lorsque vous vous absentez de la machine), la demande de mot de passe est une précieuse défense supplémentaire entre eux et un accès privilégié.En ce qui concerne le suivi 2:
Il vaut mieux éviter cela aussi, pour la raison que vous décrivez. Si une connexion distante doit avoir un accès privilégié, connectez-vous via un compte de service et donnez-lui juste le contrôle nécessaire pour effectuer son travail via sudo. C’est plus facile à configurer, bien sûr, beaucoup d’entre eux ne dérangent pas (ce qui joue en votre faveur si vous agissez, car il n’ya pas beaucoup de choses à gagner pour les attaquants qui y passent du temps!), C’est donc tout. vieux compromis entre sécurité et commodité (conseil pro: choisissez la sécurité!).
la source
root
directement, mais j'ai besoin de quelques moyens pour accéder au compte, non? Alors, comment puis-je le faire alors? Avec un mot de passe, pas la clé ssh? Mais les clés ne sont-elles pas meilleures que les mots de passe?Vous pouvez avoir le meilleur des deux mondes: authentification SSH pour la connexion et pour le sudo. Si vous intégrez le module pam_ssh_agent_auth, vous pouvez utiliser les clés SSH pour vous authentifier sans donner de mot de passe lorsque vous vous connectez.
Je l'utilise en production depuis plus de cinq ans.
Pour le configurer, installez le module PAM, puis ajoutez une ligne à
/etc/pam.d/sudo
ou son équivalent:Dans ce cas, veillez à protéger vos clés sur votre ordinateur avec une phrase secrète. De cette façon, quelqu'un devrait faire irruption dans votre ordinateur et voler les clés pour y entrer. Il pourrait le faire en les retirant de la mémoire alors qu'il était déverrouillé s'il avait accès à votre compte, en déchiffrant votre phrase secrète ou en la dérobant. un enregistreur de frappe ou une épaule le surfant pendant que vous le tapez (regardez derrière vous!).
Vous pouvez utiliser la même clé SSH que pour vous connecter, ou vous pouvez configurer une clé distincte que vous ajoutez uniquement à votre agent lorsque vous vous connectez. Par conséquent, si vous voulez faire très attention, vous pouvez conserver un fichier authorised_keys distinct qui contient une clé SSH distincte que vous ajoutez à votre agent uniquement lorsque vous devez effectuer les tâches suivantes:
la source
sudo
commandes ou j'utilise la même clé que celle utilisée pour l'authentification SSH?~/.ssh/authorized_keys
vous pourriez gérer,~/.ssh/authorized_keys_sudo
par exemple, ou/etc/ssh/authorized_keys_sudo
.Depuis que vous avez demandé, voici mon conseil général sur la façon de résoudre le
sudo
problème.Sudo n'a pas été conçu pour fournir davantage de sécurité (bien qu'il puisse le faire à certains égards) ... mais plutôt pour fournir une bonne piste d'audit permettant de déterminer qui fait quoi sur votre système avec quels privilèges.
Une configuration appropriée de Sudo n’utilisera pas le
ALL=(ALL) ALL
paramètre, mais plutôt quelque chose de plus limité à ce qui est spécifiquement nécessaire à l’utilisateur. Par exemple, si vous avez besoin qu'un utilisateur puisse se connecter et redémarrer un service bloqué, il n'a probablement pas besoin d'installer un nouveau logiciel, d'arrêter votre serveur, de modifier les règles de pare-feu, etc.Il est parfois courant que les gens utilisent sudo pour s'élever au compte root, c'est-à-dire.
sudo su -
. Une fois que cela est fait, vous ne voyez plus qui fait quoi depuis le compte root (la racine peut être connectée plusieurs fois simultanément). Alors parfois, les gens veulent aussi désactiver lasudo su -
commande. Mais, pour des raisons pratiques, si vous avez besoin d’un compte entièrement doté de privilèges root pour l’administration, au moins le fait que quelqu'un lance lasudo su -
commande enregistre la personne qui est passée à la racine et à quel moment.Comment je sécurise mes boîtes:
Changez le port SSH en quelque chose d'autre que le port par défaut. Ceci permet d'éviter les bêtises qui recherchent des numéros de port, puis les pilonnent jusqu'à ce qu'elles entrent (ou non).
Désactivez la connexion root sur SSH à l'aide du
AllowRootLogin no
paramètre défini dans votre sshd_config. Cela empêche quelqu'un de forcer brutalement votre compte root. Il est généralement préférable de ne jamais autoriser une personne à se connecter directement au compte root / administrateur pour des raisons d'audit et pour des raisons de sécurité. Si vous autorisez directement la connexion root, vous ne savez pas qui a ouvert la session, qui a obtenu le mot de passe, etc. Mais si quelqu'un se connecte au compte de Jimmy, puis élève ses autorisations en tant que root, vous avez une meilleure idée de l'endroit où commencer. recherche de vérification (et compte à réinitialiser).Autoriser uniquement les utilisateurs à SSH qui en ont besoin Utilisez le
AllowUsers
paramètre et spécifiez explicitement les comptes qui nécessitent un accès SSH. Cela bloquera par défaut tous les autres comptes de SSH.Éditez Sudoers via visudo et n'autorisez que les commandes dont l'utilisateur a besoin. Il y a beaucoup de guides détaillés sur la façon de procéder, alors je ne détaillerai pas ici. Voici une entrée: http://ubuntuforums.org/showthread.php?t=1132821
L'essentiel est d'empêcher qu'un compte compromis ne compromette votre ordinateur. c'est à dire. Si le compte de Sally est cassé et que Sally ne peut utiliser sudo que pour redémarrer le serveur Web, l'attaquant aura peut-être du plaisir à redémarrer votre serveur Web en boucle, mais au moins, il ne pourra pas
rm -rf /your/webserver/directory
ou ouvrir tous vos ports de pare-feu, etc.Installez de bonnes règles de pare-feu qui ne permettent que les ports nécessaires au fonctionnement de votre boîte. Généralement, vous voulez tout supprimer et n'autoriser que explicitement ce dont vous avez besoin. Il y a beaucoup d'iptables décents et d'autres pare-feu commencent en ligne, en voici un que j'utilise (c'est un démarreur de base):
Un mot de passe fort est également la clé.Même si vous utilisez des clés SSH pour votre accès à distance, vous devez toujours demander un mot de passe pour utiliser Sudo. C'est un cas où sudo pourrait offrir plus de sécurité. Si quelqu'un venait à voler vos clés ssh, il ne pourrait toujours rien faire de significatif sur votre boîte s'il devait encore forcer brutalement le mot de passe de votre compte à utiliser sudo. Les mots de passe ne doivent pas être un mot, mais plutôt une phrase de passe. Pensez à une phrase et utilisez-la. Cela vous donnera généralement quelque chose de plus de 8 caractères, fournissant beaucoup d'entropie, mais est aussi plus facile à retenir qu'un mot de passe aléatoire. Bien sûr, les bonnes pratiques en matière de mot de passe recommandent d'utiliser un mot de passe aléatoire généré par une machine pour tromper des outils de piratage tels que John the Ripper, qui déchiffreront la plupart des mots de passe et mots de passe. Non, changer E avec 3 ne fonctionne pas, John obtient également ces permutations.
la source
sudo su -
variations,sudoreplay
pourrait être utile.Dans certains cas, il est nécessaire de le faire. Par exemple, certaines API d'hyperviseur ont besoin d'une connexion sans mot de passe et sans mot de passe
sudo
. Mais vous pouvez toujours limiter cela sans casser.Pour ce que vous essayez d'atteindre. Je dirais, habituez-vous à taper un mot de passe. La sécurité est plus pratique que la commodité ici. En outre, si vous avez vraiment besoin d'un accès root, vous pouvez l'utiliser
sudo
et mettre en cache les informations d'identification pendant un certain temps. Ainsi, si vous exécutez plusieurs commandes sudo à la suite, le mot de passe ne sera plus sollicité que la première fois. Ce n’est donc pas un inconvénient aussi grave que vous le supposez.Aussi , si vous tapez dans un grand nombre de racine des commandes privilégiées et ne veulent pas mettre sur le devant sudo d'entre eux tout le temps , vous pouvez soit
su
ousudo -s
pour obtenir un shell root. Vous entrerez votre mot de passe une fois et puis c'est tout.la source
Sudo sans mot de passe m'a mordu une fois. C’était un script shell, un programme d’installation qui appelait sudo en mon nom, par opposition à, vous savez, qui demandait simplement sudo ou une erreur.
La création d’images en tapant "make" et le script faisant la partie "sudo make install" pour vous, sans définir ni afficher le chemin de base, et le script étant tellement indécent au départ que vous n'êtes pas sûr qu’ils connaissent l'existence de / usr / local et donc vous commencez à vérifier / usr pour les modifications ...
Je me suis promis de ne plus jamais utiliser NOPASSWD et j'ai également changé ce paramètre de délai d'attente à 0.
la source
Bien que vous ne répondiez pas strictement à votre question, une autre option peut être de définir une durée plus longue
timestamp_timeout
pour que vous n'ayez pas besoin de saisir votre mot de passe aussi souvent. Cela empêchera tout le monde d’obtenir des privilèges d’administrateur, mais en réduisant vos ennuis.De la page de manuel sudoers :
Ce blog présente des exemples d' utilisation
visudo
de la définition du délai d'expiration en minutes, tels que:Peut-être que c’est un bon compromis entre sécurité et facilité d’utilisation?
la source
Les autres réponses sont excellentes et touchent la plupart des points importants. Une chose que je n'ai pas vue mentionnée est le fait que toute forme d'authentification que vous effectuez une fois que vous vous êtes connecté peut être capturée par un attaquant distant qui a déjà pris pied dans votre compte. Ils peuvent modifier vos fichiers de connexion shell ou PATH pour installer un enregistreur de frappe afin que tout ce que vous tapez, y compris votre mot de passe sudo, leur soit envoyé. Ils pourraient ajouter un binaire sudo piraté à votre PATH pour recueillir votre mot de passe. Ils peuvent détourner la connexion de l'agent ssh sur votre machine connectée pour vaincre pam_ssh_agent_auth et devenir eux-mêmes root dès que vous vous connectez. Donc, en termes de sécurité absolue, je ne vois pas de différence entre utiliser un mot de passe pour sudo et non. Bien sûr, cela en fait une attaque plus compliquée,
En résumé, je pense que le seul moyen d'empêcher absolument un compte d'utilisateur compromis de devenir root si vous avez un accès sudo est de supprimer l'accès sudo de vous-même, ou de ne jamais l'utiliser. Si vous n'êtes pas d'accord, faites le moi savoir, car j'aimerais bien me tromper!
la source