/ 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                      |
\ <199707300650.XAA05515@wall.org>      /
 --------------------------------------- 
   \
    \
        .--.
       |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.

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.


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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.