GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi utiliser sudo ?

Parce que sudo permet des contrôles beaucoup plus fins que "connectez-vous en tant que root puis faites ce que vous voulez". Par exemple, vous pouvez configurer sudo afin que certains utilisateurs ne soient autorisés à exécuter que certaines commandes (comme des scripts wrapper ou des binaires "acceptables"). Vous craignez qu'un cheval de Troie ne compromette l'ordinateur d'un seul utilisateur, mais sudo a été créé pour permettre la journalisation et le contrôle d'accès sur un serveur administré par plusieurs personnes.

Bien sûr, sur un système mono-utilisateur, les fichiers importants sont les fichiers de l'utilisateur, et une fois que vous avez accès au compte de l'utilisateur, vous avez déjà accès à ces fichiers , donc obtenir le mot de passe n'est même plus si important. Même si le mot de passe est votre objectif (par exemple, vous attaquez quelqu'un qui réutilise les mots de passe), il existe de nombreuses façons de l'obtenir sans impliquer sudo; par exemple, j'ai récemment rencontré 2 programmes installés par défaut qui enregistreront les mots de passe ou les erreurs de mot de passe en texte clair.

Et enfin, il est conseillé de ne pas exécuter en tant que root dans la mesure du possible car les conséquences d'une erreur de frappe d'une commande (rm_-rf_._/ est un exemple évident) ne sont pas aussi graves. Nécessite l'étape supplémentaire d'écrire sudo au début d'une commande par opposition à "oublier que vous êtes connecté en tant que root et faire quelque chose de destructeur" peut éviter certaines erreurs simples mais graves.


Il existe des utilisations pratiques valides pour sudo, mais comme elles sont déjà expliquées de manière adéquate dans d'autres articles, je ne les développerai pas beaucoup ici. Je vais cependant vous diriger vers sudoers(5) , qui est le fichier de configuration sudo. Il montre une partie de la configuration étendue possible avec sudo. J'expliquerai quand et pourquoi vous ne devriez pas utiliser sudo pour passer de votre utilisateur normal à root pour des raisons purement de sécurité, côté pratique.

Réponse courte : Il n'y a aucun moyen d'utiliser sudo en toute sécurité si votre utilisateur habituel peut être compromis. Utilisez-le uniquement pour la commodité, pas pour la sécurité. La même chose s'applique à su et à tous les autres programmes qui peuvent être utilisés pour élever votre utilisateur régulier à un utilisateur plus privilégié.

Réponse longue : Il n'est pas vrai que l'utilisation du chemin complet pour sudo vous protégera d'un environnement malveillant. C'est un malentendu courant. Une fonction bash peut même détourner des noms contenant un / au début. Essayez d'exécuter ce qui suit :

$ echo $SHELL
/bin/bash
$ function /usr/bin/sudo { echo "Trust me, now put in your password:"; }
$ /usr/bin/sudo id
Trust me, now put in your password:

Vous devez n'utilisez que l'option 1, c'est-à-dire se connecter avec agetty ou se connecter sur un tty différent (notez que sur certaines distributions, tty1 est l'endroit où Xorg est en cours d'exécution, comme Fedora. Sur la plupart des distributions cependant, tty1 est un tty de rechange et Xorg s'exécute sur tty7) . Cependant , vous devez être conscient que les logiciels malveillants peuvent détourner ctrl +alt +f1 et vous présenter un faux écran, vous devez donc utiliser la combinaison Secure Attention Key (SAK, qui est alt +sysrq +k sur les systèmes Linux), qui tue tous les processus de ce tty. Cela tue tout faux écran de connexion et vous amène uniquement au vrai. S'il n'y a pas de faux écrans de connexion essayant de voler votre mot de passe root (ce qui, espérons-le, est le cas), cela provoque simplement le redémarrage d'agetty, qui devrait apparaître comme rien de plus que l'invite de connexion clignotante. Sur certains systèmes, de nombreuses fonctionnalités SysRq sont désactivées, y compris SAK. Vous pouvez tous les activer temporairement en écrivant l'entier 1 à /proc/sys/kernel/sysrq . La valeur de /proc/sys/kernel/sysrq est un bitmap, alors examinez ce qu'il est actuellement et calculez ce que vous devez convertir pour ajouter le support SAK avant de le rendre permanent dans /etc/sysctl.conf . Le mettre à 1 pour toujours peut être une mauvaise idée (vous ne voulez pas que n'importe qui puisse alt +sysrq +e pour tuer xscreensaver, n'est-ce pas ?).

L'idée que vous pouvez protéger votre utilisateur habituel et utiliser sudo ou su en toute sécurité est une idée très dangereuse. Même si c'était possible, il existe d'innombrables façons de détourner votre session de course, comme LD_PRELOAD , qui est une variable d'environnement qui pointe vers un objet partagé (bibliothèque) qui sera chargé de force par le programme pour modifier son comportement. Bien que cela ne fonctionne pas sur les programmes setuid comme su et sudo, cela fonctionne sur bash et tous les autres shells, qui exécutent su et sudo, et sont ceux qui voient toutes vos frappes. LD_PRELOAD n'est pas la seule variable qui peut pirater des programmes exécutés en tant qu'utilisateur. LD_LIBRARY_PATH peut indiquer à un programme d'utiliser des bibliothèques malveillantes au lieu de vos bibliothèques système. Il existe de nombreuses autres variables d'environnement qui peuvent être utilisées pour modifier le comportement des programmes en cours d'exécution de diverses manières. Fondamentalement, si vos variables d'environnement peuvent être compromises, votre utilisateur et toutes les frappes saisies en tant qu'utilisateur peuvent être compromis.

Si cela ne suffisait pas, sur la plupart des distributions, votre utilisateur peut utiliser ptrace() avec le GETREGS ou PEEKTEXT/PEEKDATA options pour afficher toute la mémoire des processus exécutés sous le même utilisateur (comme le processus bash qui exécute su ou sudo pour vous). Si vous utilisez une distribution qui désactive cela (par exemple en utilisant le Yama LSM), le processus peut toujours être en mesure de lire et d'écrire dans la mémoire de votre processus bash en utilisant process_vm_readv() et process_vm_writev() respectivement. Sur certains noyaux, vous pouvez également écrire directement en mémoire via /proc/pid/mem , tant que le processus qui y écrit est le même utilisateur. Dans le noyau Linux, il existe d'innombrables contrôles de sécurité partout pour s'assurer que les processus ne peuvent pas interférer les uns avec les autres. Cependant, ils impliquent tous inter -protection des utilisateurs, pas intra -protection des utilisateurs. Le noyau Linux suppose que chaque chose faite en tant qu'utilisateur A est approuvée par l'utilisateur A, donc si vous vous connectez à root en tant qu'utilisateur A, alors root doit être tout aussi fiable que cet utilisateur.

Avant même d'aborder Xorg, permettez-moi de commencer par dire que Xorg ne fournit aucune protection contre les enregistreurs de frappe. Cela signifie que, si vous utilisez sudo ou su dans un tty avec Xorg en cours d'exécution, tous les processus exécutés sous le même utilisateur pourront renifler (et injecter) les frappes au clavier. En effet, le modèle de sécurité du protocole X11 suppose que tout ce qui a accès au cookie X11 est fiable et que ce cookie est accessible à tout ce qui s'exécute sous votre utilisateur. Il s'agit d'une limitation fondamentale du protocole X11, enracinée aussi profondément que le concept d'UID sous Linux. Il n'y a pas de paramètre ou de fonctionnalité pour désactiver cela. Cela signifie que tout ce que vous tapez dans une session Xorg, y compris tapé dans su ou sudo (ou des interfaces comme gksu, gksudo, kdesu, kdesudo, pinentry, etc.) peut être reniflé par tout ce qui s'exécute sous le même utilisateur, donc votre navigateur, vos jeux , votre lecteur vidéo, et bien sûr tout ce qui est dérivé de votre .bashrc. Vous pouvez le tester vous-même en exécutant ce qui suit dans un terminal, puis en passant à un autre terminal et en exécutant une commande avec sudo.

$ xinput list
  Virtual core pointer                          id=2    [master pointer  (3)]
    ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
    ↳ ETPS/2 Elantech Touchpad                  id=13   [slave  pointer  (2)]
  Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ USB Camera                                id=10   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                          id=11   [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]

$ xinput test 12 # replace 12 with the id number of your keyboard
key press   45 
key press   44 
key release 40 
key press   41 
key release 45 
key release 44 
key release 41 
key press   31
^C

Notez que si ce test spécifique ne fonctionne pas pour vous, cela signifie que vous n'avez pas le XTEST extension active. Même s'il n'est pas actif, il est toujours possible d'enregistrer des événements de clavier en utilisant XQueryKeymap() . La leçon que vous devriez retenir est qu'il n'y a effectivement aucun moyen pour saisir votre mot de passe en toute sécurité en utilisant su ou sudo via un utilisateur compromis. Vous devez absolument passer à un nouveau tty et utiliser SAK, puis vous connecter directement en tant que root.


Outre ce qui est mentionné par les autres utilisateurs, sudo conserve également l'identité d'origine de l'utilisateur qui exécute la commande. Cela signifie que vous pouvez suivre l'ID utilisateur qui a exécuté la commande. Si vous utilisez root dans un environnement multi-utilisateur, vous ne pourrez pas suivre l'exécution d'une commande pour un seul utilisateur car l'uid sera 0.


Linux
  1. Explication des types de système de fichiers Linux, lequel devez-vous utiliser

  2. [Guide] Commandes apt vs apt-get, et laquelle utiliser ?

  3. Quel chemin `sudo ` utilise-t-il pour rechercher " ?

  4. Quand et pourquoi devrais-je utiliser Apt-get Update ?

  5. Quel système de fichiers dois-je utiliser dans une carte SD sur un NAS ?

Fedora Vs Red Hat :Quelle distribution Linux devriez-vous utiliser et pourquoi ?

Pour utiliser Windows et Ubuntu sur un seul ordinateur, lequel dois-je installer en premier ?

Explication des commandes Apt vs Apt-get :laquelle utiliser ?

Terraform vs Ansible :quelle est la différence et lequel utiliser ?

Qu'est-ce qu'un Homelab et pourquoi devriez-vous en avoir un ?

Pourquoi est-il possible de retourner l'écran ?