/ etc / motd wird nicht angezeigt, wenn eine Named Pipe?

8

Ausführen von Gentoo 3.4.0

Nachdem ich kürzlich von der Datei / etc / motd gehört hatte, versuchte ich, sie als zufälliges Vermögen zu betrachten. Ich habe ein zufälliges Bash-Skript geschrieben, das als Daemon fungiert und die Datei / etc / motd als Named Pipe füttert, wie in einigen Foren zu sehen ist.

Ich glaube nicht, dass es ein Problem mit dem Skript gibt, da das Cat'ing der Pipe einwandfrei funktioniert, aber das MOTD beim Anmelden nicht angezeigt wird (mit einer normalen Datei funktioniert es)!

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

Vermisse ich etwas Offensichtliches?

Wenn Sie nichts wie ein .hushlogin oder so weiter verwenden und versuchen, mehrere Shells zu verwenden, ist die Pipe a + r lesbar.

Fira
quelle

Antworten:

7

Sie vermissen nichts Offensichtliches. Ich habe mich in die Quelle des pam_motdModuls eingegraben, um dies herauszufinden.

Der Trick ist, dass pam_motddies Folgendes bewirkt /etc/motd:

  1. Überprüfen Sie die Größe der Datei.
  2. Ordnen Sie einen Puffer dieser Größe zu.
  3. Lesen Sie die gesamte Datei in den Puffer.
  4. Geben Sie den Puffer über eine beliebige Ausgabemethode aus. (PAM ist schließlich modular aufgebaut; kann nicht davon ausgehen, dass es sich um ein Terminal handelt.)

Da eine Pipe keine Dateigröße hat, schlägt dies in Schritt 1 fehl.

EDIT : Warum ist PAM überhaupt besorgt über die Größe? Ich stelle mir vor, es soll absichtliche oder unbeabsichtigte Dienstverweigerungen verhindern. Wenn PAM die Dateigröße überprüft, weigert es sich auch, das Motiv auszugeben, wenn die Datei größer als 64 KB ist. Ich kann mir vorstellen, dass jeder, der versucht hat, sich in das System einzuloggen, sehr traurig wäre, wenn es jemandem beispielsweise gelingen würde, eine DVD-Filmdatei in / etc / motd zu leiten - ganz zu schweigen davon, wie viel Speicher dies möglicherweise benötigt.

Jander
quelle
Nun, am Ende habe ich PAM mit einem benutzerdefinierten Patch neu erstellt, damit es die Pipe korrekt liest, wenn es eins ist => pastebin.com/bMpbLskH
Fira
Open Source ist auf diese Weise wunderbar. ^ _ ^ Ich habe meine Gedanken hinzugefügt, warum PAM die Dateigröße überprüft, was Sie möglicherweise aufgrund des Hinweises "Weitere Überprüfungen erforderlich" in Ihrem Patch vermutet haben. Ich denke, das Einfachste wäre, nach 64k mit dem Lesen der Pipe aufzuhören.
Jander
2

Dieser Link führt Sie durch alle wesentlichen Schritte

Gänseblümchen
quelle
1
Nett. Sie sollten die Schritte auch direkt in die Antwort einfügen. Wenn der Link in Zukunft unterbrochen wird, ist Ihre Antwort weiterhin hilfreich.
Jander
Deaktivieren Sie also die MotD und zeigen Sie stattdessen etwas manuell an? Warum nicht, aber kann ich das global tun, unabhängig von Bash? Ich benutze ZSH, damit der Inhalt von / etc / profile nicht ausgeführt wird
Fira