/ etc / motd não é exibido quando um pipe nomeado?

8

Executando o Gentoo 3.4.0

Tendo ouvido recentemente sobre o arquivo / etc / motd, tentei exibi-lo aleatoriamente. Eu escrevi algum script aleatório do bash para atuar como um daemon, alimentando o / etc / motd como um pipe nomeado, como visto em alguns fóruns.

Eu não acho que haja algum problema com o script, porque a instalação do pipe funciona muito bem, mas o MOTD não será exibido no login (usando um arquivo 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                      |
\ <[email protected]>      /
 --------------------------------------- 
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

Estou perdendo algo óbvio?

Não usando nada como um .hushlogin ou outros enfeites, tentei usar várias conchas, o pipe é legível a + r.

Fira
fonte

Respostas:

7

Você não está perdendo nada óbvio. Eu procurei na fonte do pam_motdmódulo para descobrir isso.

O truque é pam_motdfazer o seguinte com /etc/motd:

  1. Verifique o tamanho do arquivo.
  2. Aloque um buffer desse tamanho.
  3. Leia o arquivo inteiro no buffer.
  4. Saída do buffer através de qualquer método de saída em uso. (PAM é modular, afinal; não pode assumir que é um terminal.)

Como um canal não tem um tamanho de arquivo, isso falha na etapa 1.

EDIT : Por que o PAM está preocupado com o tamanho em primeiro lugar? Eu imagino que é para impedir negações de serviço, intencionais ou não intencionais. Quando o PAM verifica o tamanho do arquivo, ele também se recusa a emitir o motd se o arquivo for maior que 64 kbytes. Eu imagino que quem tentou acessar o sistema ficaria muito triste se alguém conseguisse canalizar um arquivo de filme em DVD para o / etc / motd, por exemplo - sem mencionar quanta memória isso pode levar.

Jander
fonte
Bem, no final eu simplesmente reconstruída PAM com um patch personalizado para que ele iria ler o tubo corretamente se ele é um => pastebin.com/bMpbLskH
Fira
O código aberto é maravilhoso dessa maneira. ^ _ ^ Adicionei meus pensamentos sobre o motivo pelo qual o PAM verifica o tamanho do arquivo, o que acho que você pode ter suspeitado da nota "precisa de mais verificações" no seu patch. Acho que a coisa mais fácil a fazer seria parar de ler o cachimbo depois de 64k.
Jander
2

Este link orientará você em todas as etapas essenciais

margarida
fonte
1
Agradável. Você também deve adicionar as etapas diretamente na resposta; portanto, se o link quebrar no futuro, sua resposta ainda será útil.
Jander
Então, desative o MotD e mostre algo manualmente? Por que não, mas posso fazer isso de maneira global, independente do bash? Estou usando ZSH assim o conteúdo do arquivo / etc / perfis não são executados
Fira