/ etc / motd ne s'affiche pas lorsqu'un canal nommé?


8

Exécuter Gentoo 3.4.0

Ayant récemment entendu parler du fichier / etc / motd, j'ai essayé de lui faire afficher des fortunes aléatoires de cowsay. J'ai écrit un script bash aléatoire pour agir comme un démon, alimentant le / etc / motd en canal nommé, comme on le voit sur certains forums.

Je ne pense pas qu'il y ait de problème avec le script parce que cat'ing the pipe fonctionne très bien, mais le MOTD ne s'affichera pas lors de la connexion (en utilisant un fichier normal)!

fira@nyan ~ % cat /etc/motd
 _______________________________________ 
/ We didn't put in ^^ because then we'd \
| have to keep telling people what it   |
| means, and then we'd have to keep     |
| telling them why it doesn't short     |
| circuit. :-/                          |
|                                       |
| -- Larry Wall in                      |
\ <199707300650.XAA05515@wall.org>      /
 --------------------------------------- 
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

Suis-je en train de manquer quelque chose d'évident?

N'utilisant rien de tel qu'un .hushlogin ou autre, j'ai essayé d'utiliser plusieurs shells, le pipe est lisible a + r.

Réponses:


7

Vous ne manquez rien d'évident. J'ai fouillé dans la source du pam_motdmodule pour comprendre celui-ci.

L'astuce est pam_motdla suivante /etc/motd:

  1. Vérifiez la taille du fichier.
  2. Allouez un tampon de cette taille.
  3. Lisez le fichier entier dans le tampon.
  4. Générez le tampon via la méthode de sortie utilisée. (PAM est modulaire, après tout; ne peut pas supposer que c'est un terminal.)

Puisqu'un tube n'a pas de taille de fichier, cela échoue à l'étape 1.

EDIT : Pourquoi PAM est-il préoccupé par la taille en premier lieu? J'imagine que c'est pour empêcher les dénis de service, qu'ils soient intentionnels ou non. Lorsque PAM vérifie la taille du fichier, il refuse également de générer le motd si le fichier est supérieur à 64 kilo-octets. J'imagine que celui qui a essayé de se connecter au système serait très triste si quelqu'un réussissait à diriger un fichier de film DVD dans / etc / motd, par exemple - sans mentionner la quantité de mémoire que cela pourrait prendre.


Eh bien, au final, je viens de reconstruire PAM avec un patch personnalisé pour qu'il lise correctement le pipe s'il en est un => pastebin.com/bMpbLskH
Fira

L'open source est merveilleux de cette façon. ^ _ ^ J'ai ajouté mes réflexions sur la raison pour laquelle PAM vérifie la taille du fichier, ce que vous pensez peut-être soupçonné de la note "nécessite plus de vérifications" dans votre correctif. Je suppose que la chose la plus simple à faire serait d'arrêter de lire la pipe après 64k.
Jander

2

Ce lien vous guidera à travers toutes les étapes essentielles


1
Agréable. Vous devez également ajouter les étapes directement dans la réponse, donc si le lien se brise à l'avenir, votre réponse sera toujours utile.
Jander

Alors, désactivez le MotD et affichez quelque chose manuellement à la place? Pourquoi pas, mais puis-je le faire de manière globale, indépendamment de bash? J'utilise ZSH donc le contenu de / etc / profiles n'est pas exécuté
Fira
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.