Ubuntu 12.04: pam_motd às vezes exibe apenas MOTD parcial

1

Isso não é muito importante, mas realmente me irrita de alguma forma.

Temos um grande número de máquinas rodando o Ubuntu 12.04 (server / amd64) com o qual eu freqüentemente ssh. Nós temos a configuração padrão para esta versão do Ubuntu, onde há um punhado de scripts em /etc/update-motd.d que são usados para construir o MOTD, e /etc/pam.d/sshd está configurado para imprimir o MOTD em log in do ssh via pam_motd.so . Nossos scripts MOTD são todos personalizados (não temos nenhum dos embutidos do Ubuntu nessas máquinas), mas tudo o resto é absolutamente de configuração do servidor Ubuntu. Na maior parte, isso funciona bem.

No entanto, de vez em quando, o MOTD é exibido apenas parcialmente (ou às vezes nem um pouco). Não há nenhuma mensagem de erro no terminal ou em qualquer registro que eu possa encontrar, ele simplesmente não exibe a saída completa. Se i cat /var/run/motd imediatamente após isso ocorrer, o arquivo mostrará a saída completa (e atualizada).

Eu sei que run-parts tem uma opção para interromper o processamento de scripts se um deles sair com um status > 0, mas não acho que seja aplicável nesse caso - geralmente a saída é truncada no meio da execução do script. Por exemplo, um script pode imprimir algumas linhas como esta:

mycompany header

hostname uname
cpu
ram
uptime

Mas o MOTD irá parar imediatamente após mycompany header . Estes são scripts bash muito simples e nós não temos a opção -e ativada neles, então eu não sei como isso pode acontecer. No começo eu pensei que talvez houvesse um limite na quantidade de tempo que o PAM esperaria para o MOTD ser gerado, e que talvez às vezes (dependendo da carga ou qualquer outra coisa) pudéssemos estar atingindo esse limite - mas isso não parece para ser o caso. O MOTD é impresso quase imediatamente toda vez, seja truncado ou não.

A única outra coisa em que posso pensar é que talvez run-parts esteja gravando o arquivo MOTD dinâmico em uma linha por vez, e há algum tipo de condição de corrida em que pam_motd está lendo uma versão incompleta desse arquivo .

No entanto, não posso confirmar isso, porque não tenho idéia do que o mecanismo está por trás dessa funcionalidade. Meu entendimento é que o PAM de alguma forma dispara run-parts para atualizar o arquivo no log-in, mas não consigo encontrar nenhuma referência a run-parts ou /etc/update-motd.d no Origem do PAM . Tudo o que o código pam_motd parece fazer é apenas ler o arquivo MOTD.

A única pista possivelmente útil que eu encontrei é esta: Se eu fizer watch -n 0.1 'ps aux | grep "run-parts"' em uma janela de terminal, quando eu desconectar e reconectar ao mesmo host em outra janela, eu posso ver que quando a saída está completa , há sempre vários processos que aparecem muito brevemente na lista de processos - mas quando é truncado, há apenas um ou dois processos (às vezes nenhum).

edit: Eu também devo adicionar que não posso replicar este problema quando executo run-parts --lsbsysinit /etc/update-motd.d manualmente; somente parece acontecer no login do ssh.

Como posso resolver isso ainda mais? Como o PAM instrui o sistema a atualizar o MOTD? Ele espera que o processo termine ou seja executado simultaneamente? Existe uma maneira de mudar esse comportamento? Existe uma opção de depuração que eu possa definir em algum lugar para pelo menos ver o que está acontecendo? Existe alguma razão esperada que run-parts possa abortar no meio de um script?

felicidades

    
por kine 05.09.2014 / 05:33

0 respostas