Falha intermitente do sudo - SuSE 10

1

Temos um problema de produção de longa data em que o cron em determinados servidores reporta periodicamente o seguinte erro -

sudo: uid NNN does not exist in the passwd file!

O usuário existe, na verdade, é o userid do usuário do cron. Existem 7 trabalhos no crontab desse usuário, no formato

* * * * * sudo /run/this/every_minute
0,5,10,15,20,25,30,35,40,45,50,55 * * * * sudo /run/this/every_5mins
10,40 * * * * sudo /run/this/every_30mins
...
0 11 * * 6 sudo /run/this/once_per_week

A tarefa every_5mins às vezes modifica o / etc / passwd, mas de maneira atômica. Ele nunca toca o userid em questão, e quando eu comparo os logs de nossas mudanças / etc / passwd e os tempos que recebemos este erro, não há correlação.

Eu dei uma olhada no código sudo para a versão em uso (1.6.8p12) e esse erro vem da chamada de sistema C getpwnam retornando um ponteiro de estrutura passwd nula. Além do motivo óbvio, também pode falhar devido a EINTR, EIO, EMFILE, ENFILE ou ENOMEM. O sudo não discrimina entre o nome de usuário não encontrado e essas outras condições de erro. Eu acho que posso supor que o cron isola contra EIO e EINTR. Nossos servidores são monitorados e parecem ter muita memória. O limite máximo de FD é muito alto (> 700k). Não há problemas de capacidade dos quais estamos cientes, e acho que outras coisas estariam falhando se esses limites fossem violados. Isso deixa o EMFILE, e ainda não vejo como isso poderia causar um erro desse tipo, já que está acontecendo bem no começo, antes que o comando seja iniciado. Acredito que o EMFILE só pode ocorrer se o FD máximo (1024) for atingido em um processo específico.

Então estou perplexo - qualquer idéia é bem-vinda.

    
por Sue Spence 28.11.2012 / 12:24

0 respostas

Tags