Pourquoi su world est-il exécutable?

20

J'ai un serveur sans tête qui est connecté à distance par plusieurs utilisateurs. Aucun des autres utilisateurs ne se trouve dans le fichier sudoers, ils ne peuvent donc pas obtenir root via sudo. Cependant, comme les autorisations susont -rwsr-xr-xprésentes, rien ne les empêche de tenter de forcer brutalement le mot de passe root.

On pourrait faire valoir que si un utilisateur connaît le mot de passe root, il peut de toute façon compromettre le système, mais je ne pense pas que ce soit le cas. OpenSSH est configuré avec PermitRootLogin noet PasswordAuthentication no, et aucun des autres utilisateurs n'a d'accès physique au serveur. Pour autant que je sache, le monde exécuter l'autorisation sur /usr/bin/suest la seule avenue pour les utilisateurs qui tentent de se rooter sur mon serveur.

Ce qui me laisse encore plus perplexe en ce qu'il ne semble même pas utile. Cela me permet de courir sudirectement au lieu de devoir le faire sudo su, mais ce n'est guère un inconvénient.

Suis-je en train d'oublier quelque chose? Le monde exécute-t-il la permission sujuste pour des raisons historiques? Y a-t-il des inconvénients à supprimer cette autorisation que je n'ai pas encore rencontrée?

Altay_H
la source
9
"Cela me permet d'exécuter su directement au lieu de devoir faire sudo su, mais ce n'est guère un inconvénient." - Qu'en est-il des systèmes sans l'option sudoinstallée? Je dirais que c'est un gros inconvénient là-bas;)
marcelm
1
Vous pouvez toujours restreindre l'accès à / bin / su, mais n'oubliez pas de faire de même pour / usr / bin / pkexec également.
jpa
6
Je n'arrive pas à comprendre la motivation derrière cette question. Il semble que vous vous demandiez pourquoi su doit être exécutable dans le monde, mais quel serait l'intérêt de l'alternative? Autrement dit, si su n'était exécutable que par root (?), À quoi pensiez-vous qu'il pourrait être utilisé?
David Z
1
@DavidZ En fait, c'est en effet utile pour root! Vous pouvez rapidement changer d'utilisateur avec elle.
val dit Réintégrer Monica
1
@val Oui, c'est vrai. Le fait que root puisse utiliser su n'est pas en cause ici. (En relisant, je peux voir comment mon commentaire précédent suggérerait le contraire, mais ce n'est pas ce que je voulais dire.) Je suis curieux de savoir ce qu'Altay_H a pensé à ce sujet avant de poser cette question.
David Z

Réponses:

39

Un point qui manque dans la réponse d' ilkkachu est que l'élévation à la racine n'est qu'une utilisation spécifique pour su. L'objectif général de su est d'ouvrir un nouveau shell sous le compte de connexion d'un autre utilisateur. Cet autre utilisateur pourrait être root(et peut-être le plus souvent), mais supeut être utilisé pour supposer toute identité que le système local peut authentifier.

Par exemple, si je suis connecté en tant qu'utilisateur jimet que je souhaite enquêter sur un problème mikesignalé, mais que je ne parviens pas à reproduire, je peux essayer de me connecter en tant que mikeet d'exécuter la commande qui lui pose problème.

13:27:20 /home/jim> su -l mike
Password:(I type mike's password (or have him type it) and press Enter)
13:27:22 /home/mike> id
uid=1004(mike) gid=1004(mike) groups=1004(mike)
13:27:25 /home/mike> exit  # this leaves mike's login shell and returns to jim's
13:27:29 /home/jim> id
uid=1001(jim) gid=1001(jim) groups=1001(jim),0(wheel),5(operator),14(ftp),920(vboxusers)

L'utilisation de l' -loption de le sufait simuler une connexion complète (selon la manpage).

Ce qui précède nécessite cependant la connaissance du mikemot de passe de. Si j'ai sudoaccès, je peux me connecter comme mikemême sans son mot de passe.

13:27:37 /home/jim> sudo su -l mike
Password:(I type my own password, because this is sudo asking)
13:27:41 /home/mike>

En résumé, la raison pour laquelle les autorisations sur l' suexécutable sont comme vous le montrez, c'est parce qu'il sus'agit d'un outil à usage général qui est disponible pour tous les utilisateurs du système.

Jim L.
la source
1
Cela a du sens. Depuis que j'ai l'habitude d'utiliser, sudoj'ai oublié que cela supeut être utilisé pour plus que juste sudo -s. Et sans être un sudoer, ce serait le seul moyen de changer d'utilisateur sans modifier les clés ssh. Pour mon cas d'utilisation, c'est une autre raison de supprimer l'autorisation, mais je comprends maintenant pourquoi l'autorisation d'exécution du monde est définie par défaut. Merci!
Altay_H
1
Un autre point est que sudo, aussi, peut être utilisé pour assumer l'identité d'un utilisateur autre que root. Cela permet simplement un contrôle plus fin sur qui peut faire quoi comme qui, y compris en supposant une autre identité sans avoir besoin du mot de passe de cette identité.
chepner
Une partie de la confusion vient du fait que les gens pensent su"super utilisateur", ce qu'il fait quand aucun utilisateur n'est spécifié (ou root est spécifié explicitement) mais il signifie également "changer d'utilisateur". Cette seconde utilisation de suest donc facilement oubliée.
Monty Harder
20

Historiquement (sur les unités non GNU), ce n'était pas le cas, ou du moins il vérifiait manuellement si vous faisiez partie d'un groupe appelé "roue" su. La version GNU de sune reproduisait pas cette fonctionnalité à cause de l'idéologie de RMS sur le contrôle d'accès à l'époque:

Why GNU `su' does not support the `wheel' group
===============================================

   (This section is by Richard Stallman.)

   Sometimes a few of the users try to hold total power over all the
rest.  For example, in 1984, a few users at the MIT AI lab decided to
seize power by changing the operator password on the Twenex system and
keeping it secret from everyone else.  (I was able to thwart this coup
and give power back to the users by patching the kernel, but I wouldn't
know how to do that in Unix.)

   However, occasionally the rulers do tell someone.  Under the usual
`su' mechanism, once someone learns the root password who sympathizes
with the ordinary users, he or she can tell the rest.  The "wheel
group" feature would make this impossible, and thus cement the power of
the rulers.

   I'm on the side of the masses, not that of the rulers.  If you are
used to supporting the bosses and sysadmins in whatever they do, you
might find this idea strange at first.

Vous pouvez trouver beaucoup plus sur la question en Googling "Wheel Group RMS" ou similaire.

R ..
la source
3
Ceci est la seule bonne réponse. Le cadre est intentionnel, historique, et c'est exactement la raison pour cela. Tout le blabla technique n'est que cela - blabla. Vous pouvez absolument réintroduire le groupe "wheel" dans Unix moderne.
Tom
10

Cependant, comme les autorisations susont -rwsr-xr-xprésentes, rien ne les empêche de tenter de forcer brutalement le mot de passe root.

Oui. En supposant que votre système Linux habituel, le pam_unix.somodule retarde une tentative d'authentification échouée de ~ deux secondes, mais je ne pense pas qu'il y ait quoi que ce soit pour arrêter les tentatives simultanées.

Les tentatives échouées sont bien sûr enregistrées:

Aug 16 22:52:33 somehost su[17387]: FAILED su for root by ilkkachu

Le forçage brutal d'un mot de passe devrait apparaître en bonne place dans les journaux, si vous avez un type de système pour les surveiller. Et si vous avez des utilisateurs locaux non fiables, vous devriez peut-être le faire. Les utilisateurs locaux non fiables peuvent également tenter d'utiliser des exploits d'escalade de privilèges uniquement locaux, et ils sont beaucoup plus courants que l'escalade de privilèges à distance.

Ce qui me laisse encore plus perplexe en ce qu'il ne semble même pas utile.

Bien sûr, c'est utile, cela vous permet de vous élever à root, si vous connaissez le mot de passe.

Cela me permet de courir sudirectement au lieu de devoir le faire sudo su, mais ce n'est guère un inconvénient.

sudo suest quelque peu redondant. Il n'est pas nécessaire d'utiliser deux programmes destinés à vous permettre d'exécuter des programmes en tant qu'autre utilisateur, un suffit. Utilisez simplement sudo -iou sudo -s(ou sudo /bin/bashetc.) si vous souhaitez exécuter le shell.

Suis-je en train d'oublier quelque chose? Le monde exécute-t-il l'autorisation sur su juste pour des raisons historiques?

Voir au dessus. Eh bien, tous les systèmes n'ont pas sudod'alternative, je ne sais pas si vous considérez cela comme historique.

Y a-t-il des inconvénients à supprimer cette autorisation que je n'ai pas encore rencontrée?

Pas vraiment, non pour autant que je sache. Je pense que certains systèmes ont sumis en place de sorte que seuls les membres d'un groupe particulier (" wheel") peuvent l'exécuter. Vous pouvez faire de même sudosi vous le souhaitez ( chown root.sudousers /usr/bin/sudo && chmod 4710 /usr/bin/sudo).

Ou vous pouvez simplement supprimer l'un ou les deux programmes si vous n'en avez pas besoin. Bien que sur Debian, il soit sulivré avec le loginpaquet, ce n'est donc probablement pas une bonne idée de supprimer le paquet dans son ensemble. (Et l'appariement loginet suensemble comme ça semble quelque peu historique.)

ilkkachu
la source
1
Les systèmes BSD nécessitent que les utilisateurs soient dans le wheelgroupe à utiliser su. Il y a certains systèmes BSD (je ne peux parler que pour OpenBSD) qui ne sont pas du tout livrés sudo(c'est un paquet tiers). OpenBSD a doasune réimplémentation des bases de sudo, mais il est désactivé par défaut lors de l'installation d'un nouveau système.
Kusalananda
@Kusalananda Vous ne devez être connecté que wheelsi vous souhaitez surooter. Tout compte peut accéder suà tout compte non root pour lequel il dispose du mot de passe, quelle que soit son appartenance au wheelgroupe.
Jim L.
J'exécute 'sudo su -' pour m'assurer que le shell racine que j'obtiens est une connexion root complète, sans environnement pollué de mon compte utilisateur. Les sudoers par défaut sur RHEL incluent un bon nombre de variables d'environnement qui sont exécutables (telles que PS1).
jsbillings
@jsbillings, hmm, ok. Dégage-t-il alors sul'environnement? Cela ne semble pas faire ça sur Debian ...
ilkkachu
«Su -» fait dans tous les Linux que je connais. Attention au tiret.
jsbillings
7

Vous avez déjà de bonnes réponses, mais il n'y a pas une partie de votre message qu'elles ne traitent.

Pour autant que je sache, le monde exécuter l'autorisation sur / usr / bin / su est la seule avenue pour les utilisateurs qui tentent de se rooter sur mon serveur.

C'est une hypothèse dangereuse. Si vous avez défini un bon mot de passe pour root, dans la plupart des cas, il est beaucoup plus probable qu'une escalade de privilèges réussie soit due à l'exploitation d'un bogue dans le noyau ou d'un binaire setuid (vous pouvez bien sûr également supprimer le setuid un peu de ceux-ci, mais passwdest setuid, et si vous voulez une haute sécurité, vous devez également offrir cela à vos utilisateurs, et leur refuser l'option de changer leur mot de passe n'est pas compatible avec cela).

Henrik - arrêtez de blesser Monica
la source
1

su doit être exécutable dans le monde entier pour que tout le monde puisse l'exécuter. Dans de nombreux systèmes, il peut être utilisé pour passer à un autre utilisateur, en fournissant son mot de passe.

Si vous êtes préoccupé par le fait que quelqu'un applique brutalement le mot de passe root, vous pouvez simplement le désactiver. (rendre le hachage invalide pour qu'aucun mot de passe donné ne puisse le correspondre)

Je ne connais pas le consensus, mais j'envisagerais de pouvoir me connecter en tant que root directement un problème de sécurité en soi.

bobsburner
la source
-2

Les autres réponses sont correctes en disant "su" vous permet de vous connecter à des comptes autres que root.

Une remarque sur "sudo su" cependant. Cela vous permet en fait de vous connecter au compte root sans connaître le mot de passe root. Vous devez connaître le mot de passe du compte avec lequel vous exécutez sudo et avoir ce compte dans le fichier sudoers.

WindowsNT
la source
3
Cela dépend entièrement du fait d' sudoersavoir targetpwou de rootpwdéfinir.
muru
1
Cela n'a rien à voir avec le fait d' suêtre exécutable par tous.
Kusalananda