/ etc / motd no se muestra cuando una tubería con nombre?

8

Ejecutando Gentoo 3.4.0

Habiendo escuchado recientemente sobre el archivo / etc / motd, traté de que muestre fortunas aleatorias. Escribí un script de bash aleatorio para actuar como un demonio, alimentando el / etc / motd como una tubería con nombre, como se ve en algunos foros.

¡No creo que haya ningún problema con el script porque atrapar la tubería funciona bien, pero MOTD no se mostrará al iniciar sesión (usar un archivo normal funciona)!

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                      |
\ <[email protected]>      /
 --------------------------------------- 
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

¿Me estoy perdiendo algo obvio?

Sin usar nada como un .hushlogin o cualquier otra cosa, intentado usar varios shells, la tubería es legible a + r.

Fira
fuente

Respuestas:

7

No te estás perdiendo nada obvio. Busqué en la fuente del pam_motdmódulo para resolver esto.

El truco es que pam_motdhace lo siguiente con /etc/motd:

  1. Verifique el tamaño del archivo.
  2. Asignar un búfer de ese tamaño.
  3. Lea todo el archivo en el búfer.
  4. Salida del búfer a través de cualquier método de salida que esté en uso. (PAM es modular, después de todo; no puedo asumir que es una terminal).

Como una tubería no tiene un tamaño de archivo, esto falla en el paso 1.

EDITAR : ¿Por qué a PAM le preocupa el tamaño en primer lugar? Me imagino que es para evitar denegaciones de servicio, ya sea intencional o no. Cuando PAM verifica el tamaño del archivo, también se niega a generar el motd si el archivo es mayor de 64 kbytes. Me imagino que quien intentó iniciar sesión en el sistema estaría muy triste si alguien lograra canalizar un archivo de película de DVD en / etc / motd, por ejemplo, sin mencionar la cantidad de memoria que podría tomar.

Jander
fuente
Bueno, al final acabo de reconstruir PAM con un parche personalizado para que lea la tubería correctamente si es una => pastebin.com/bMpbLskH
Fira
El código abierto es maravilloso de esa manera. ^ _ ^ Agregué mis pensamientos sobre por qué PAM verifica el tamaño del archivo, lo que creo que podría haber sospechado de la nota "necesita más verificaciones" en su parche. Supongo que lo más fácil sería dejar de leer la tubería después de 64k.
Jander
2

Este enlace lo guiará a través de todos los pasos esenciales

margarita
fuente
1
Agradable. También debe agregar los pasos directamente en la respuesta, por lo que si el enlace se rompe en el futuro, su respuesta seguirá siendo útil.
Jander
Entonces, ¿deshabilitar MotD y mostrar algo manualmente? ¿Por qué no, pero puedo hacer esto de manera global, independiente de bash? Estoy usando ZSH por lo que el contenido de / etc / profiles no se ejecuta
Fira