Question:
Pourquoi utiliser sudo?
Charles Shiller
2016-04-04 09:47:14 UTC
view on stackexchange narkive permalink

La plupart des articles Linux modernes conseillent d'utiliser sudo plutôt que de se connecter à root. Ce conseil est tellement ancré que certaines distributions n'autorisent pas automatiquement la connexion root. En effet, ils sont pré-configurés avec sudo en utilisant le mot de passe de l'utilisateur pour exécuter des commandes arbitraires en tant que root.

Qu'est-ce qui peut mal tourner?

En réalité, si l'on exécute la commande ci-dessus, il pourrait presque aussi bien fonctionner en tant que root !!

Que font les logiciels malveillants?

modifier .bashrc pour inclure

export PATH = / home / user / .hack: $ PATH

et déposez un script dans ~ / .hack qui va:

  1. imiter sudo
  2. envoyer le mot de passe au serveur C&C
  3. se supprimer

Le pirate obtient le mot de passe (utilisateur et root).

Le même problème existe avec simple su, et le seul moyen d'éviter est:

  1. Alt-Ctrl-F1 et connectez-vous en tant que root
  2. Toujours exécutez sudo ou su comme / usr / bin / sudo ou / usr / bin / su

La première option semble beaucoup plus sûre, mais semble aller à l'encontre de la pratique moderne. Pourquoi?

[Pourquoi sudo?] (Http://askubuntu.com/questions/687249/why-does-ubuntu-have-a-disabled-root-account/687251#687251)
Votre modèle d'attaque est générique - non spécifique à sudo.Et tous les accès Linux ne se trouvent pas sur la console.
Notez simplement que Windows suppose une solution qui réalise à peu près la même chose: vous êtes connecté en tant qu'administrateur, mais tous les programmes s'exécutent en mode utilisateur et nécessitent une confirmation UAC pour exécuter des commandes élevées.Point de départ différent, même résultat.Coïncidence?Je crois que non.
@Mark Je ne suis pas d'accord avec l'idée de conclure cela comme un dup: cette question a des votes beaucoup plus positifs et des réponses approfondies que celle sur laquelle vous voulez la pointer.Si quoi que ce soit, l'autre question devrait pointer ici.
Lancer sudo ou su avec des chemins complets est inefficace.Les fonctions Bash peuvent commencer par un /.
"Pourquoi utiliser sudo?""Qu'est-ce qui peut mal tourner?""Que font les logiciels malveillants?"Une question par question s'il vous plaît.
Cinq réponses:
user15392
2016-04-04 10:27:46 UTC
view on stackexchange narkive permalink

Parce que sudo permet des contrôles 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 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.

Of cours 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 . 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 consigneront 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 autant que possible car les conséquences d'une erreur de frappe commande ( rm_-rf _._ / est un exemple évident) ne sont pas aussi sévères. Exiger 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 des erreurs simples mais graves.

Ubuntu par défaut ne prend pas en charge les connexions root, donc même les systèmes mono-utilisateur ont été déplacés vers sudo, dans lesquels la journalisation et le contrôle d'accès ne sont pas des problèmes
@drewbenn `" oubliant que vous êtes connecté en tant que root et faites quelque chose de destructeur "` J'utilise une couleur d'invite différente :) et je pense que quelques distributions utilisent également des couleurs différentes pour différencier un utilisateur et un root dans un terminal
Vous voulez dire que vous ne mettez pas simplement "myusername ALL = (ALL: ALL) ALL" dans / etc / sudoers et que vous l'appelez un jour?Cela semble beaucoup moins compliqué ;-)
Les systèmes Unix @yzT pratiquement sinon littéralement depuis la nuit des temps ont différencié les utilisateurs root et ordinaires à l'invite.Par exemple, `sh` et les shells dérivés utilisent une invite` $ `(à la fin de) pour les utilisateurs ordinaires, et` # `pour l'utilisateur root.
La première raison est la plus faible, car elle ne s'applique pas à la plupart des systèmes.Probablement même pas la plupart des systèmes de production.
@immibis: En particulier, étant donné le niveau de conteneurisation que les systèmes de production modernes affichent souvent.Essayer de distribuer la racine en morceaux est presque inutile lorsque vous pouvez simplement faire tourner un récipient.
@Kevin fait tourner tous les conteneurs que vous aimez, à moins que je ne les autorise, ils n'affecteront en rien le système sur lequel ils fonctionnent en dehors de l'utilisation des ressources ...
Lucas Kauffman
2016-04-04 11:23:10 UTC
view on stackexchange narkive permalink

Outre ce qui a été 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 quel userid 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 vers un seul utilisateur car l'uid sera 0.

forest
2016-04-04 12:03:25 UTC
view on stackexchange narkive permalink

Il existe des utilisations pratiques valables pour sudo, mais comme elles sont déjà suffisamment expliquées 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 de sécurité purement, par souci de commodité.

Réponse courte: Il n'y a aucun moyen de utilisez sudo en toute sécurité si votre utilisateur régulier peut être compromis. Utilisez-le uniquement pour des raisons de commodité et non pour des raisons de 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: Ce 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 qui contiennent un / au début. Essayez d'exécuter ce qui suit:

  $ echo $ SHELL / bin / bash $ function / usr / bin / sudo {echo "Faites-moi confiance, maintenant entrez votre mot de passe:"; } $ / usr / bin / sudo idFaites-moi confiance, maintenant entrez votre mot de passe:  

Vous ne devez utiliser que l'option 1, c'est-à-dire se connecter avec agetty ou se connecter sur un autre tty (notez que sur certaines distributions, tty1 est l'endroit où Xorg s'exécute, comme Fedora. Sur la plupart des distributions cependant , tty1 est un tty de rechange et Xorg fonctionne 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 sous Linux systems), qui tue tous les processus de ce tty. Cela tue tout faux écran de connexion et ne vous amène qu'au vrai. S'il n'y a pas de faux écrans de connexion essayant de voler votre mot de passe root (ce qui est, espérons-le, le cas), cela provoque simplement le redémarrage d'agetty, ce qui ne devrait apparaître que comme le clignotement de l'invite de connexion. 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 dans / proc / sys / kernel / sysrq . La valeur de / proc / sys / kernel / sysrq est un bitmap, alors regardez ce qu'il est actuellement et calculez en quoi vous devez le 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 tuer xscreensaver, n'est-ce pas?).

L'idée que vous pouvez protéger votre utilisateur régulier et utiliser sudo ou su en toute sécurité est une idée très dangereuse. Même si cela était possible, il existe d'innombrables façons de détourner votre session en cours, comme LD_PRELOAD , qui est une variable d'environnement qui pointe vers un objet partagé (bibliothèque) qui va être chargé de force par le programme pour changer 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 détourner des programmes exécutés en tant qu'utilisateur. LD_LIBRARY_PATH peut dire à un programme d'utiliser des bibliothèques malveillantes au lieu de vos bibliothèques système. Il existe beaucoup plus de variables d'environnement qui peuvent être utilisées pour changer 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 comme cet utilisateur peuvent être compromis.

Si cela ne suffisait pas, sur la plupart des distributions, votre utilisateur peut utiliser ptrace () avec GETREGS ou PEEKTEXT / PEEKDATA 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 lire et é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 dans la mémoire via / proc / pid / mem , tant que le processus qui y écrit est le même utilisateur. Dans le noyau Linux, il y a 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 une protection inter -utilisateur, pas une protection intra -utilisateur. Le noyau Linux suppose que chaque chose faite en tant qu'utilisateur A est approuvée par l'utilisateur A, donc si vous utilisez root en tant qu'utilisateur A, alors root doit être tout aussi fiable que cet utilisateur.

Avant même de passer à Xorg, permettez-moi de commencer en disant 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) des 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 approuvé et que ce cookie est accessible à tout ce qui s'exécute sous votre utilisateur. C'est une limitation fondamentale du protocole X11, enracinée aussi profondément que le concept d'UID le sont sous Linux. Il n'y a pas de paramètre ou de fonction 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 fonctionne sous le même utilisateur, donc votre navigateur, vos jeux , votre lecteur vidéo, et bien sûr tout ce que vous propose 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 Pointeur de noyau virtuel id = 2 [pointeur principal (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 id du clavier = 5 [clavier esclave (3)] id id du bouton d'alimentation = 8 [clavier esclave (3)] ↳ id caméra USB = 10 [clavier esclave (3)] ↳ jeu de traduction AT 2 id clavier = 12 [clavier esclave ( 3)] ↳ Video Bus id = 7 [slave keyboard (3)] ↳ Sleep Button id = 9 [slave keyboard (3)] ↳ Asus WMI hotkeys id = 11 [slave k eyboard (3)]
↳ Bouton d'alimentation id = 6 [clavier esclave (3)] $ xinput test 12 # remplacez 12 par le numéro d'identification de votre clavier appuyez sur 45 touches 44 touches 40 touches 41 touches 45 touches 44 touches 41 touches 31 ^ C  

Notez que si ce test spécifique ne fonctionne pas pour vous, cela signifie que vous n'avez pas l'extension XTEST active. Même sans l'activation, il est toujours possible d'enregistrer les événements du clavier en utilisant XQueryKeymap () . La leçon à tirer est qu'il n'y a en fait aucun moyen de 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.

De quel logiciel / distribution provient le truc SAK?Je n'en avais jamais entendu parler, alors j'ai basculé vers tty1 et appuyé sur ctrl-alt-K ... et, pour autant que je sache, le seul effet était de taper "^ [^ K" dans le champ du nom d'utilisateur.Je vais donc suggérer que SAK n'est pas universel.(Ce test a été tenté sur la dernière version stable de Debian.)
Excellente analyse, mais la question "pourquoi aucune distribution sur terre ne met-elle en œuvre cela?"des stands.
Notez également que CTRL + ALT + K n'est * pas * le SAK standard sous Linux.https://www.kernel.org/doc/Documentation/SAK.txt indique que `ALT + SYSRQ + K` fonctionne si le noyau est implémenté avec le support sysrq, sinon il doit être défini manuellement en utilisant` loadkeys` (et `CTRL + ALT + Pause` est le choix courant s'il est défini).
L'extension XTEST doit être désactivée par défaut sur la plupart des distributions pour exactement cette raison, qui ne laisse que la possibilité d'envoyer des événements directement.Celles-ci sont marquées comme «IsSynthetic true» dans le protocole, et les émulateurs de terminaux doivent les ignorer (xterm le fait).
Dave, SAK est un vieux concept.SAK est venu spécifiquement de Linux il y a longtemps, je crois.Si cela ne fonctionne pas pour vous, il se peut qu'il soit désactivé.Certaines distributions limitent les capacités sysrq de votre système.Vérifiez la valeur dans / proc / sys / kernel / sysrq.Définissez-le sur l'entier 1 pour activer toutes les fonctionnalités sysrq possibles, y compris SAK.Et Poloni a raison, ce n'est pas la norme officielle SAK, mais cela fonctionne.
Simon, ce n'est absolument pas vrai.Les distributions ne peuvent pas désactiver cela en raison du fonctionnement fondamental du protocole X11.Que xinput fonctionne ou non n'a aucun effet sur le fonctionnement ou non d'un autre keylogger.Le fait est que Xorg permet à toutes les applications ayant accès au cookie X11 (c'est-à-dire toutes les applications exécutées sous votre utilisateur régulier) d'accéder et d'injecter des frappes sur cette session X11.La seule solution est d'utiliser un protocole alternatif, comme Wayland.Il n'y a aucun moyen de configurer Xorg pour éviter cela.
Federico, toutes les distributions à ma connaissance implémentent cela.Cependant, il est désactivé par défaut et doit être activé dans / proc / sys / kernel / sysrq.Mais les noyaux utilisaient tout le support sysrq, c'est là que SAK sur Linux est implémenté.Malheureusement, les gens se soucient rarement assez de la sécurité pour qu'elle fasse une grande différence, de sorte que des fonctionnalités comme celle-ci sont passées pour la plupart inaperçues.
Monty Harder
2016-04-04 20:32:56 UTC
view on stackexchange narkive permalink

Pour moi, l'une des principales raisons d'utiliser sudo (par opposition à su ) est d'éviter d'avoir à garder une trace du "mot de passe root" pour chaque serveur que j'administre et le change chaque fois que quelqu'un qui le sait quitte l'entreprise.

Au lieu de cela, il s'agit simplement de gérer les membres du groupe wheel , qui peuvent aller et venir sans forcer les mots de passe des uns et des autres à changer plus souvent qu'ils ne le sont déjà.

Cela ne constitue probablement pas la réponse complète en soi, mais devrait être inclus dans la réponse acceptée pour être complète.

nyxgeek
2016-04-04 10:27:22 UTC
view on stackexchange narkive permalink

La raison de ne pas exécuter en tant que root est qu'en utilisant sudo, vous prenez la décision consciente d'exécuter une commande particulière en tant que root.

L'exécution en tant que root permet à une faute de frappe négligente de gâcher votre journée.

Ecrire "su" puis le mot de passe root avant de faire quelque chose qui nécessite des privilèges root n'est pas assez conscient? À mon avis, quand je dois taper sudo avant quelques ou une douzaine de commandes d'affilée (sur un système utilisateur unique), c'est un pire choix que "su" et "exit" à la fin du travail. En fait, avoir à faire face à la frustration que vous oubliez inévitablement de taper sudo chaque fois que vous en avez besoin, il est possible que cela crée simplement un utilisateur moins conscient qui incline sudo sans réfléchir, un peu comme un utilisateur Windows qui accepte toutes les vérifications de dialogue UACsans même les lire après un certain temps.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...