Où sont stockées les injures de sudo?

234

Pour ceux qui aiment l’humour, sudoon peut configurer pour imprimer une phrase aléatoire plus ou moins insultante ou amusante au lieu de la neutre Sorry, try again.en ajoutant la ligne ci-dessous à /etc/sudoers(en utilisant la commande sudo visudo, sans le modifier manuellement!):

Defaults insults

Voici quelques exemples:

[sudo] password for bytecommander: 
The more you drive -- the dumber you get.
[sudo] password for bytecommander: 
I've seen penguins that can type better than that.
[sudo] password for bytecommander: 
This mission is too important for me to allow you to jeopardize it.
[sudo] password for bytecommander: 
He has fallen in the water!
[sudo] password for bytecommander: 
Hold it up to the light --- not a brain in sight!

Maintenant, juste pour le plaisir, j'aimerais les lire tous, mais la saisie d’un mot de passe incorrect toute la journée n’est pas vraiment la meilleure méthode (délai après chaque tentative, seulement 2 messages sur 3 tentatives, abandon après 3 tentatives, ...).

Alors ... où ces injures sont-elles réellement stockées? Un fichier texte brut que je peux lire directement? Ou des chaînes codées en dur dans le code source?

Comment puis-je obtenir une liste de tous les sudomessages d'insultes disponibles ?

Byte Commander
la source

Réponses:

181

Ils sont dans le fichier binaire

/usr/lib/sudo/sudoers.so

(trouvé par: find /usr/lib/sudo -type f | xargs grep "fallen in the water")

Si vous activez les téléchargements source et que vous faites

apt source sudo

Vous pouvez trouver les fichiers insultes dans le répertoire source sous

plugins/sudoers

Les fichiers sont

ins_2001.h
ins_classic.h
ins_csops.h
ins_goons.h
insults.h

Exemple de ce à quoi ressemblent ces fichiers:

#ifndef SUDOERS_INS_GOONS_H
#define SUDOERS_INS_GOONS_H

/*
 * Insults from the "Goon Show."
 */

    "You silly, twisted boy you.",
    "He has fallen in the water!",
    "We'll all be murdered in our beds!",
    "You can't come in. Our tiger has got flu",

et ainsi de suite ... ils sont assez lisibles.

Zanna
la source
24
Maintenant que Zanna nous dit qu'ils sont dans sudoers.so, vous pouvez également les "lire" en utilisant des chaînes au lieu du code source. Run this: strings /usr/lib/sudo/sudoers.so
Stéphane
3
@ Stéphane C'est vrai, mais stringsje ne vous dirai pas si toutes les insultes sont égales. La lecture de la source réelle pourrait révéler si certains critères influencent le choix de l'injure.
Kasperd
3
@ Stéphane Plus exécuter des chaînes sur un exécutable produit un nombre extrêmement élevé de faux positifs.
MariusMatutiae
7
Je
n'allais
77

Avec

dpkg -L sudo | xargs grep dumber

nous pouvons rechercher quels fichiers du paquet sudocontiennent le mot dumber.

La seule correspondance est dans le fichier /usr/lib/sudo/sudoers.so. stringsComme il s’agit d’un fichier binaire, nous utilisons cette commande pour obtenir uniquement les éléments qui semblent lisibles par l’homme. Comme c'est beaucoup, nous transmettons le résultat dans less:

strings /usr/lib/sudo/sudoers.so | less

En lessnous pouvons utiliser

/dumber

pour rechercher à nouveau le mot "dumber". Cela nous mène directement aux insultes. Faites défiler vers le haut et le bas avec les touches du curseur et quittez avecq

Florian Diesch
la source
6
On a voté pour avoir montré une technique générale simple permettant de découvrir la réponse à ce genre de questions.
200_success
1
Utiliser strings -n10pour réduire les faux positifs. Voir aussi la réponse de @ DigitalTrauma qui utilise objcopy pour n’alimenter que la .rodatasection strings, ce qui réduit encore le bruit.
Peter Cordes
76

Liste de toutes les insultes

Lorsque nous examinons toutes les insultes, nous découvrons un détail intéressant: dire que le brocoli est politiquement correct, mais que dire Burrito ne l’est pas. Toutes les insultes sont énumérées ci-dessous.

ins_2001.h (Insultes de l'Odyssée de l'espace 2001):

.
    /*
     * HAL insults (paraphrased) from 2001.
     */

    "Just what do you think you're doing Dave?",
    "It can only be attributed to human error.",
    "That's something I cannot allow to happen.",
    "My mind is going. I can feel it.",
    "Sorry about this, I know it's a bit silly.",
    "Take a stress pill and think things over.",
    "This mission is too important for me to allow you to jeopardize it.",
    "I feel much better now.",

ins_classic.h (Sudo 8 insultes d'origine):

    /*
     * Insults from the original sudo(8).
     */

    "Wrong!  You cheating scum!",
#ifdef PC_INSULTS
    "And you call yourself a Rocket Scientist!",
#else
    "No soap, honkie-lips.",
#endif
    "Where did you learn to type?",
    "Are you on drugs?",
    "My pet ferret can type better than you!",
    "You type like i drive.",
    "Do you think like you type?",
    "Your mind just hasn't been the same since the electro-shock, has it?",

ins_csops.h (Insultes CSOps):

    /*
     * CSOps insults (may be site dependent).
     */

    "Maybe if you used more than just two fingers...",
    "BOB says:  You seem to have forgotten your passwd, enter another!",
    "stty: unknown mode: doofus",
    "I can't hear you -- I'm using the scrambler.",
    "The more you drive -- the dumber you get.",
#ifdef PC_INSULTS
    "Listen, broccoli brains, I don't have time to listen to this trash.",
#else
    "Listen, burrito brains, I don't have time to listen to this trash.",
#endif
    "I've seen penguins that can type better than that.",
    "Have you considered trying to match wits with a rutabaga?",
    "You speak an infinite deal of nothing",

ins_goons.h (Goon Show insultes):

.
    /*
     * Insults from the "Goon Show."
     */

    "You silly, twisted boy you.",
    "He has fallen in the water!",
    "We'll all be murdered in our beds!",
    "You can't come in. Our tiger has got flu",
    "I don't wish to know that.",
    "What, what, what, what, what, what, what, what, what, what?",
    "You can't get the wood, you know.",
    "You'll starve!",
    "... and it used to be so popular...",
    "Pauses for audience applause, not a sausage",
    "Hold it up to the light --- not a brain in sight!",
    "Have a gorilla...",
    "There must be cure for it!",
    "There's a lot of it about, you know.",
    "You do that again and see what happens...",
    "Ying Tong Iddle I Po",
    "Harm can come to a young lad like that!",
    "And with that remarks folks, the case of the Crown vs yourself was proven.",
    "Speak English you fool --- there are no subtitles in this scene.",
    "You gotta go owwwww!",
    "I have been called worse.",
    "It's only your word against mine.",
    "I think ... err ... I think ... I think I'll go home",

Le fichier insults.hcontient les instructions du compilateur sur les insultes ci-dessus à inclure dans le noyau compilé. En effet, vous pouvez créer votre propre fichier insultes, ajouter le nom à insults.h et recompiler pour obtenir des messages du type "Quoi, êtes-vous un utilisateur ArchLinux?" ou "Ce n'est pas Windows où les erreurs sont banales!", etc.

Notez le #ifdef PC_INSULTSdans certains des fichiers insultes. Cela ne signifie pas "si vous avez un ordinateur personnel" mais "si vous voulez être politiquement correct".

WinEunuuchs2Unix
la source
47
Je ne savais pas que "brocoli" était considéré comme plus politiquement correct que "burrito".
moelleux
9
@ Fluffy Je suppose que c'est une référence aux personnes dont le régime alimentaire national inclut le burrito. Je regrette maintenant de ne pas censurer le code. J'aurais dû utiliser uniquement les options PC_INSULT et supprimer l'autre moitié. Par contre, je n'aime pas la censure de l'histoire, comme c'est arrivé à Tom Sawyer et à des livres comme celui-là. Puisque ces insultes datent de 2004, je serais coupable de censurer l'histoire si j'avais supprimé les sections #ifdef.
WinEunuuchs2Unix
7
Ne vous inquiétez pas trop de la "censure de l'histoire" lorsque vous parlez des termes que nous devrions utiliser maintenant. Je peux penser à beaucoup de mots que j’avais utilisés il ya 40 ans et qui étaient insultants sur le plan racial, sexistes, etc. . Oui, s'il vous plaît, discutez de politiquement correct si vous voulez. Essayez d’être dans une pauvre minorité blessée par les mots en premier.
Michael Durrant
4
La correction de PC n’a pas de fin. N'importe quel mot peut être considéré comme offensant, et le brocoli ne serait pas non plus un PC au Pérou, par exemple ... Le burrito est pourtant une insulte raciale évidente.
Shautieh
17
La plupart des gens en dehors des États-Unis et probablement certains aux États-Unis ne considéreraient pas cela comme une "insulte raciale évidente". Pour moi, il est amusant de voir que celui qui a écrit cette liste d’ insultes délibérés (c’est le nom de la fonctionnalité!) Se préoccupait réellement de personnes particulièrement offensées… sans fin, et si vous êtes vraiment inquiet, n’activez pas cette fonctionnalité. ...?!
rire
11

Les réponses ci-dessus sont idéales pour la recherche hors ligne. Mais nous sommes en ligne. Alors ouvrez la recherche de code Debian et essayez l’une des insultes ici . Il vous dit instantanément que c'est dans sudo_1.8.12-1/plugins/sudoers/ins_csops.h. Cela a l’avantage de le trouver partout, qu’il s’agisse d’un fichier de configuration à déployer /etcou autre. Et puisqu'il s'agit d'un fichier .h, il est visible qu'il se trouve dans le source et que vous ne pouvez pas le modifier.

chx
la source
7

Pour ajouter aux autres réponses, les insultes semblent être dans la .rodatasection sudoers.so. Vous pouvez utiliser objcopypour limiter quelque peu la sortie, même s’il restera beaucoup de faux positifs:

$ objcopy /usr/lib/sudo/sudoers.so /dev/null --dump-section .rodata=/dev/stdout | strings | head
/build/sudo-g3ghsu/sudo-1.8.16/plugins/sudoers/auth/sudo_auth.c
invalid authentication methods
Invalid authentication methods compiled into sudo!  You may not mix standalone and non-standalone authentication.
There are no authentication methods compiled into sudo!  If you want to turn off authentication, use the --disable-authentication configure option.
Unable to initialize authentication methods.
Just what do you think you're doing Dave?
It can only be attributed to human error.
That's something I cannot allow to happen.
My mind is going. I can feel it.
Sorry about this, I know it's a bit silly.
$ 
Trauma numérique
la source
Si vous pouvez tolérer beaucoup de faux positifs, pourquoi ne pas simplement utiliser stringsau lieu de objcopy? :)
Ruslan
@Ruslan: C’est déjà le cas objcopy | strings, d’analyser uniquement la .rodatasection du segment de texte. Ce qui réduit les faux positifs est de plus en plus la longueur de chaîne minimale de la valeur par défaut 4 à quelque chose comme 10: strings -n10. Et pipe dans less, pas head, IMO. Toutes les insultes semblent être contiguës, BTW.
Peter Cordes
Ah, je n'ai pas fait défiler le code, voir stringsa déjà été utilisé.
Ruslan