/ etc / motd non viene visualizzato quando una named pipe?


8

Esecuzione di Gentoo 3.4.0

Avendo di recente sentito parlare del file / etc / motd, ho provato a far sì che mostrasse fortune cowsay casuali. Ho scritto alcuni script bash casuali per agire come un demone, alimentando il file / etc / motd come pipe denominata, come visto in alcuni forum.

Non credo che ci sia alcun problema con lo script perché cat'ing la pipe funziona bene, ma il MOTD non verrà visualizzato all'accesso (usando un normale file funziona)!

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 |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

Mi sto perdendo qualcosa di ovvio?

Non usando niente come .hushlogin o quant'altro, ho provato a usare diverse shell, pipe è leggibile a + r.

Risposte:


7

Non ti manca nulla di ovvio. Ho scavato nella fonte del pam_motdmodulo per capirlo.

Il trucco è che pam_motdesegue le operazioni seguenti con /etc/motd:

  1. Controlla la dimensione del file.
  2. Allocare un buffer di quella dimensione.
  3. Leggi l'intero file nel buffer.
  4. Emette il buffer attraverso qualunque metodo di output sia in uso. (PAM è modulare, dopotutto; non posso supporre che sia un terminale.)

Dal momento che una pipe non ha una dimensione del file, ciò non riesce al passaggio 1.

EDIT : Perché PAM è preoccupato per le dimensioni in primo luogo? Immagino sia per impedire il rifiuto del servizio, sia intenzionale che non intenzionale. Quando PAM controlla la dimensione del file, rifiuta anche di produrre il motd se il file è più grande di 64 kbyte. Immagino che chiunque provasse ad accedere al sistema sarebbe molto triste se qualcuno riuscisse a reindirizzare un file di film in DVD in / etc / motd, per esempio - per non parlare di quanta memoria potrebbe richiedere.


Bene, alla fine ho appena ricostruito PAM con una patch personalizzata in modo che leggesse correttamente la pipe se fosse una => pastebin.com/bMpbLskH
Fira

L'open source è meraviglioso in questo modo. ^ _ ^ Ho aggiunto i miei pensieri sul motivo per cui PAM controlla la dimensione del file, che penso tu abbia sospettato dalla nota "necessita di più controlli" nella tua patch. Immagino che la cosa più semplice da fare sarebbe smettere di leggere la pipa dopo 64k.
Jander

2

Questo link ti guiderà attraverso tutti i passaggi essenziali


1
Bello. Dovresti aggiungere anche i passaggi direttamente nella risposta, quindi se il link si interrompe in futuro la tua risposta sarà comunque utile.
Jander

Quindi, disabilitare il MotD e mostrare qualcosa manualmente invece? Perché no, ma posso farlo in modo globale, indipendente da bash? Sto usando ZSH, quindi il contenuto di / etc / profiles non viene eseguito
Fira,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.