En quoi sudo est-il plus sûr que d'utiliser directement su si l'utilisateur est autorisé à accéder à toutes les commandes?

40

J'ai donc lu les différences entre utiliser suet sudo, et tout le monde semble être d'accord pour dire que l' sudoapproche est plus sûre que de permettre l'accès au compte root lui-même. Ils disent qu'avec le compte root, vous pouvez casser votre système entier avec une seule commande. Je comprends cela. MAIS l'utilisateur initial créé sur le système a également accès à toutes les commandes à l'aide de sudo. Je peux le savoir en courant su -l. Si tel est le cas, je peux simplement courir sudo <game-ending command>pour ruiner mon système. Alors, comment cette approche est-elle meilleure ou plus sûre alors me permettant un accès direct au compte super utilisateur? Je peux exécuter toutes les mêmes commandes ...

Est-ce parce que, en utilisant sudola ligne de commande, je dis explicitement à l'ordinateur que je pense savoir ce que je fais? Pensent-ils que les gens oublieront qu'ils sont sous le compte super-utilisateur à moins qu'ils ne le disent explicitement?

Les gens affirment également que si le système était compromis et entré par une personne étrangère, être sous le compte root leur permettrait de faire des choses terribles pour mon système. Mais il me semble que s'ils ont déjà accès à mon compte et connaissent mon mot de passe, ils peuvent faire les mêmes choses terribles en utilisant sudo et en entrant mon mot de passe car ils n'ont même pas besoin de connaître le mot de passe du super utilisateur. Qu'est-ce que je n'arrive pas ici?

bmcentee148
la source
2
Merci d'avoir créé cette question. Il y a donc quelque chose à montrer aux personnes qui répètent que sudo est plus sûr mais ne peut pas le justifier.
user253751

Réponses:

40

Personnellement, je ne le considère pas nécessairement comme plus sûr et la plupart des avantages (de sudo) concernent un système multi-utilisateurs. Sur un système à utilisateur unique, c'est probablement un lavage.

Les avantages sont (sans ordre particulier):

  • sudo a une journalisation supérieure. sudo enregistre chaque commande.
  • sudo permet un contrôle du grain plus fin. On peut configurer sudo pour donner un accès root à certaines commandes, mais pas à toutes.
  • sudo utilise le mot de passe de connexion. Ceci évite de donner le mot de passe root (comme vous le feriez avec su) et est lié au point ci-dessus concernant le contrôle / accès plus fin à la racine.
  • Dans Ubuntu, par défaut, le compte root est verrouillé. Cela dissuade les crackers de se connecter (via ssh à distance), ils doivent deviner à la fois un nom d'utilisateur et un mot de passe. Si le compte root n'est pas verrouillé, comme c'est le cas avec su, il suffit alors de déchiffrer le mot de passe de root.
  • sudo -iest probablement la meilleure méthode pour isoler les variables d’environnement de votre utilisateur. Cela revient de temps en temps mais est modérément ésotérique. Voir https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • Certaines personnes estiment que le fait de taper sudo avant chaque commande à exécuter en tant qu'utilisateur root ou que le dépassement de délai sudo leur permet de s'arrêter et de réfléchir plus clairement et de réduire leurs erreurs ou l'exécution de commandes erronées. Si cela vous aide, ce serait également un avantage.

Il y a probablement plus d'avantages, mais, ce sont les principaux, à mon humble avis.

Voir aussi - https://help.ubuntu.com/community/RootSudo

Pour essayer de répondre à certaines de vos autres pensées:

  • Il n'y a rien sur su ou sudo qui vous empêche de lancer un code malveillant tant que vous connaissez le mot de passe. Ni est plus sûr ou mieux.
  • Les crackers peuvent obtenir un accès au shell via un certain nombre de méthodes. Lorsque vous voyez "exécuter du code arbitraire" dans une notification de sécurité - https://usn.ubuntu.com/usn/ -, cela signifie qu'un pirate informatique peut exécuter / bin / bash ou tout autre code. Ainsi, un pirate, via divers exploits, peut obtenir un accès au shell sans connaître votre identifiant ni votre mot de passe. Ni sudo ni su n'aident à cela.
  • Si un cracker a un accès shell, il peut faire beaucoup de dégâts sans accès root. Par exemple, le ransomware qui chiffre toutes vos données personnelles.
  • Si un pirate a un accès shell à un compte avec un accès root, via su ou sudo, il peut obtenir un accès root via un certain nombre de méthodes dépassant le cadre de cette discussion. Ni sudo ni su n'est supérieur à cet égard non plus.

Ainsi, alors que vous avez observé des problèmes ou des failles avec sudo, su a exactement les mêmes vulnérabilités et qu'il n'est pas supérieur à sudo dans ces aspects-là, à mon humble avis,

Panthère
la source
Il serait bon de pouvoir activer tous les utilisateurs (contrôle de l’alimentation et du redémarrage) lors de la suppression de l’installation, plutôt que les entrées sudoers ou le nom du groupe.
mckenzm
8
Je pense que le principal avantage est de justifier chaque commande comme nécessitant des autorisations de superutilisateur. Lors de mes premières expériences avec Linux, j’ai constaté que j’avais toujours tendance à courir en tant que root dans au moins un terminal car je bricolais avec le système. Malheureusement, il est très facile d'émettre une commande destructive sur le terminal par incompréhension ou dactylographie. Si cela se trouvait dans le «terminal racine», cela pourrait entraîner une restauration à partir d'une sauvegarde ou d'une réinstallation. sudo m'a protégé de tant de fois!
Rolinger
14
Ne pas compromettre le mot de passe root est peut-être le plus grand avantage de sudo. Vous pouvez donner la permission à la racine sans révéler aucun secret.
Thorbjørn Ravn Andersen
Non seulement vous pouvez limiter les commandes, mais vous pouvez même restreindre les arguments spécifiés. Mais je ne suis pas d'accord pour dire que le fait d'être root est lié à cela; car vous pouvez configurer ssh pour ne pas autoriser la connexion root. Il y a autre chose avec su contre sudo: sudo vous utilisez votre mot de passe utilisateur qui est un mot de passe de moins à compromettre et ce n'est généralement pas une bonne chose. Comme tout dans ce monde, il y a différentes façons de faire quelque chose et cela ne veut pas dire qu'une manière est plus correcte que les autres 100% du temps, si jamais. Ensuite, il y a des préférences.
Pryftan
Mais si plus d'un utilisateur a besoin d'un accès root (ce n'est pas quelque chose que je vais aborder, c'est juste - eh bien, c'est une discussion houleuse au mieux), alors sudo a un avantage.
Pryftan
10

Imaginez que vous avez 20 minutes pour faire quelque chose de complexe. Vous avez un peu la gueule de bois et vous devez vous précipiter. “Utilisons su” vous dites. «Cela vous fera gagner du temps», tel est votre raisonnement.

Par accident vous tapez

rm -rf /*

au lieu de

rm -rf ./*

Votre système est en train de casser et vous avez 10 minutes avant la date limite.

Si vous choisissez explicitement quand vous avez besoin de root, vous pouvez minimiser les risques que cela se produise. La racine n'est peut-être pas nécessaire, rm -r ./*alors pourquoi l'utiliser? Pourquoi prendre le risque?

C'est ce que «sécurité» signifie ici. Minimiser le risque que les utilisateurs (tous les utilisateurs, pas seulement les débutants) commettent une erreur fatale.

Bien sûr, il s'agit d'un exemple extrême qui ne devrait pas être autorisé dans un environnement de production (je garantis que cela s'est déjà passé dans un environnement prod).

Du point de vue de la sécurité, il y a des choses pour lesquelles sudo est préférable. Comme @Panther le dit - journalisation, restrictions, mot de passe root est SPOF, etc.)

dijksterhuis
la source
4
Enfer, vous n'avez pas besoin d'attendre aussi longtemps si vous faites juste ... chown -R nobody:nobody /ou même en chown -R nobody ../tant que root. chmodBien sûr, a des problèmes similaires aussi en mode récursif. Mais le mieux est que vous ne deviez être root que lorsque vous en avez besoin; moins vous aurez de privilèges de connexion, meilleur sera votre utilisation normale.
Pryftan
2
+1 pour la programmation quand vous avez la gueule de bois cependant.
Abhicantdraw
4
Alors, comment est-ce différent avec sudo? Vous écrivez sudo rm -rf /*au lieu de sudo rm -rf ./*et boum à nouveau.
ilkkachu
2
@ilkkachu en termes de commande réelle, cela ne fait qu'une différence minime par rapport à ce qui se passe. Mais vous avez dû indiquer explicitement que vous voulez le faire en tant que root. C'est le but. La sécurité concerne la gestion des risques. Bien sûr, vous pouvez toujours maquiller le système. Mais moins vous disposez de privilèges root, moins vous risquez de commettre une erreur fatale. La sécurité consiste à minimiser les probabilités.
dijksterhuis
2
@ilkkachu Parce que vous ne seriez pas taper sudo rm -rf ./*. Vous avez probablement un accès en écriture aux éléments du répertoire en cours, vous n'avez donc pas besoin de sudo pour cette commande. Ainsi , les extrémités de commande typoed jusqu'à être rm -rf /*, ce qui donne une longue série de « Permission denied » messages, vous indiquant que vous devez ctrl-cavant qu'il arrive à des choses que vous pouvez réellement supprimer, au lieu de simplement supprimer tout /bin, /boot, /devet la moitié /etcavant vous réalisez même que quelque chose ne va pas.
Ray
9

Je veux ajouter un peu de perspective historique aux autres réponses. Malheureusement, je n'ai aucune source prête, si ce n'est mes propres souvenirs de discussions Usenet et d'articles de magazines.

Il y a quelque temps, dans les années 1990, les distributions facilitaient l'installation de Linux sur votre propre matériel, même avec peu de connaissances en informatique¹. Ainsi, Linux a commencé à attirer de plus en plus de personnes qui, étonnamment, n'avaient pas encore été percées en tant qu'administrateurs système. certains dialecte UN * X. À la place, beaucoup étaient habitués à des systèmes (utilisateur unique) tels que Windows 95/98. Et ils ont appris que la plupart des tâches d’administration du système Linux obligeaient à travailler sous cet étrange compte "root".

Ainsi, certains utilisateurs viennent de se connecter en tant que root et utilisent ce compte pour tous leurs travaux quotidiens. Pourquoi devraient-ils avoir à taper suet le mot de passe root à plusieurs reprises ou se connecter à un nouveau tty juste pour certaines commandes d'administrateur? Mais utiliser root pour tout n’est bien sûr pas une bonne idée, car vous pourriez faire beaucoup plus de tort à votre système avec une commande inconsciente au mauvais endroit. Cela a même conduit une distribution (était-ce SuSE?) À modifier l’arrière-plan du bureau pour que l’ utilisateur root affiche un gros avertissement vous invitant à utiliser ce compte uniquement pour les tâches administratives.

Ainsi, la méthode Ubuntu sudoprésente certains avantages (en plus de ceux déjà répertoriés par Panther ).

  • Vous ne pouvez pas vous connecter directement à la racine account.² :-)
  • Le processus d'installation ne vous demandera pas un mot de passe root (supplémentaire), vous n'avez besoin que d'un mot de passe (votre utilisateur).
  • sudomet en cache vos informations d'identification. Ainsi, pour plusieurs commandes d'administration en séquence, il vous suffit d'entrer votre mot de passe une fois (contrairement à su). Cela réduit le besoin d'ouvrir simplement un shell ou un nouveau terminal avec des privilèges root .
  • Et il est plus facile de dire aux utilisateurs en ligne et dans la documentation quelles commandes ils doivent entrer en tant qu'administrateur et lesquelles non .³

¹ Et pour ceux qui n’osent pas le faire eux-mêmes, il y avait des fêtes d’installation.
² Mais vous pouvez utiliser une commande telle que sudo -iou sudo su - rootpour obtenir un shell root après vous être connecté en tant qu’utilisateur normal.
³ Mais vous savez bien sûr que vous ne devriez pas simplement copier-coller des commandes d’Internet , non?

Dubu
la source
Êtes-vous en train de dire dans Ubuntu que vous ne pouvez pas faire: sudo su -ou sudo su - root? Parce que j'ai vu des affirmations similaires, par exemple que MacOS X n'a ​​pas de racine mais c'est complètement faux quand il suffit de faire la première commande ...
Pryftan 21/02
2
Bien sûr, il existe un compte root . J'ai dit que vous ne pouviez pas vous "connecter directement", ce qui signifie que vous ne pouvez pas entrer l'utilisateur rootet un mot de passe à l'invite de connexion ou dans la boîte de dialogue de connexion X et démarrer votre session en tant que root. Mais vous pouvez utiliser une de vos commandes (je préfère sudo -icar elle est plus courte et que je suis paresseuse) pour obtenir un shell root.
Dubu
1
Veuillez relire mon commentaire :) J'ai dit que certains disent que MacOS X n'a ​​pas de compte root, mais en fait, il me l'a rappelé (je ne l'ai pas assimilé à l'absence de compte root dans Ubuntu). Mais pour autant que je sache, les développeurs d’Ubuntu étaient assez fous pour appliquer des correctifs à sudo afin de ne pas permettre cela, d’où ma question.
Pryftan
1
@Pryftan Comme je l'ai dit dans mon commentaire ci-dessus, vos deux commandes fonctionnent et vous obtiendrez un shell root. J'ajouterai cela à ma réponse.
Dubu
Oui. Je sais que :) je ne disais pas que c'était faux ou pas le cas. Je disais que cela me rappelait quelque chose que certaines personnes disent, mais sont incorrectes à dire. C'est pourquoi rendre cette partie audacieuse.
Pryftan
2

Il est possible de désactiver la connexion root via ssh depuis des décennies. Le moyen utilisé par Ubuntu pour désactiver le compte root et faire en sorte que tout le monde soit sudo n’est rien de plus qu’un gadget. Juste "sudo -s" et vous avez un shell root. Désactivez la connexion root via ssh et laissez-la là.

P. Goetterup
la source
8
... sur cette note, utiliser une clé uniquement pour TOUTES les connexions SSH, et pas seulement pour le compte root, est une excellente pratique.
rackandboneman
Oui. Je l'ai noté dans un commentaire il y a quelques minutes à peine. Otoh étant le moins privilégié est le meilleur, alors n'élevez que lorsque c'est nécessaire et que vous soyez connecté par ssh ou localement. Et ce que @rackandboneman dit est bien sûr tout à fait correct aussi, bien que pour moi, je désactive l’arrêt complet à la racine à distance, même avec les clés ssh, quel que soit le système.
Pryftan
0

Selon la configuration, sudo <game ending command>ne fonctionnera pas nécessairement. Bien entendu, si la sudoersconfiguration indique "utilisateur ALL = (ALL) ALL", sudoaucune protection supplémentaire ne sera offerte. Vous pouvez toutefois spécifier une liste de commandes privilégiées que vous devez exécuter souvent, comme l'installation de nouveaux packages, et omettre des commandes dangereuses telles que rm.

De cette façon, vous pouvez exécuter toutes les commandes si vous vous connectez en tant que root, mais comme vous n’en aurez besoin que de temps en temps, le risque d’exécution <game ending command>sera considérablement réduit.

Dmitry Grigoryev
la source
1
Et des arguments spécifiques aux commandes aussi.
Pryftan
1
Et par groupe plutôt que par utilisateur. L'utilisation de groupes est inestimable dans les environnements multi-utilisateurs où le personnel peut aller et venir et où vous pouvez avoir besoin de rôles spécifiques.
Panther
0

Le fait que sudo vous permette de n’autoriser que certaines commandes n’est pas le seul avantage de sudo sur su.

Dans la plupart des magasins, ce n’est même pas l’avantage le plus important.

Avec sudo, vous savez qui a exécuté une commande particulière.

Maintenant, peut-être que cela n'a pas d'importance pour vous. Par exemple, vous pourriez être le seul utilisateur de votre ordinateur. Si c'est le cas, sudo n'est peut-être pas mieux que su.

Mais beaucoup d'hôtes ont plus d'un administrateur.

sudo devient alors très utile car si quelqu'un fait la mauvaise chose, sudo vous permet de savoir qui l'a fait.

Cela vous permet de comprendre pourquoi des erreurs sont survenues et d’éduquer les utilisateurs afin qu’ils ne se reproduisent plus ou, si nécessaire, de retirer les outils de quelqu'un.

En prime, lorsque les gens savent que leurs actions sont enregistrées, ils sont souvent un peu plus prudents.

Sudo n'est pas parfait.

Si deux personnes font "sudo sh" en même temps, il peut être difficile d'attribuer des commandes à l'une ou à l'autre.

Et un administrateur malveillant peut toujours supprimer ou éditer des journaux - bien que le faire proprement ne soit pas toujours aussi facile qu'on le pense, surtout si vous avez une journalisation centralisée.

sudo n'arrête pas nécessairement une action stupide ou malveillante, pour toutes les raisons identifiées dans la question initiale.

Mais cela vous donne une bien meilleure chance d'éviter une récidive.

Ben Aveling
la source
1. Seulement si vous prenez le temps de le configurer correctement. Ce que le système Ubuntu par défaut ne fait pas (et ne peut pas faire). 2. Uniquement si l'utilisateur n'a aucun moyen de modifier les journaux ultérieurement, ce qu'il peut sauf si les commandes qu'il peut exécuter sont limitées. (Ce qui n'est pas le cas par défaut avec Ubuntu)
ilkkachu le
@ilkkachu, bien que vous ayez quelques points positifs, votre argument ici n'a aucun sens ici. Le point n'est pas les paramètres par défaut, il est possible de configurer et d'ajuster sudo. Vous ne pouvez pas configurer su pour agir de la sorte. su est tout ou rien, il n’ya aucun moyen de limiter les commandes et c’est un fait que sudo fournit une journalisation supérieure. Ni su, ni sudo n'offrent de sécurité contre ce qu'un pirate peut ou ne peut pas faire sur un système compromis, et personne n'a tenu sudo de cette façon. Les journaux sudo ont une grande valeur dans les opérations quotidiennes normales.
Panther
@Panther, eh bien, le titre de la question indique "... si l'utilisateur est autorisé à accéder à toutes les commandes?" J'ai donc supposé que cela voulait dire la configuration par défaut habituelle d'Ubuntu où sudotout est permis. Bien sûr, vous pouvez le configurer pour limiter les commandes qu'un utilisateur est autorisé à exécuter, mais je ne pense pas que ce soit le cas dans la question posée.
ilkkachu
Réponse élargie.
Ben Aveling
@ilkkachu - relisez ma réponse "Personnellement, je ne considère pas qu'il soit plus sûr et la plupart des avantages (de sudo) concernent un système multi-utilisateurs. Sur un système mono-utilisateur, il s'agit probablement d'un lavage." J'ai ensuite expliqué les autres avantages de sudo, notamment le fait qu’il est configurable.
Panthère