Encontrou uma solução pelo menos após o comentário de Richlv sobre o arquivo que está sendo criado no modo independente.
Fiz algumas alterações e consegui pelo menos uma solução de trabalho.
Acho que não reiniciei snmptrapd depois de alterar snmptrapd.conf para ler traphandle default /usr/sbin/snmptthandler em vez de traphandle default /usr/sbin/snmptt .
Por que escrito como root
Uma nova instância de snmptt estava sendo chamada por snmptrapd , que estava sendo executada como raiz e deve ser vinculada à porta snmp 162. Portanto, os arquivos gravados por snmptt também eram de propriedade de root.
As permissões, no entanto, continuam sendo um mistério para mim. Não posso dizer de onde as permissões 0640 estão vindo.
Principais alterações que se acredita terem corrigido o problema
- Reinicie o
snmptrapd(service snmptrapd restart), que causou a releitura desnmptrapd.conf, para garantir quesnmptthandlerseja usado para processar traps em vez desnmptt, que foi gravado anteriormente no arquivo de configuração.
Isso não corrige o problema inteiro, já que agora snmptthandler escreve traps no diretório de spool /var/spool/snmptt , que é subseqüentemente lido pelo processo de snmptt daemon:
# grep spool_directory /etc/snmp/snmptt.ini
spool_directory = /var/spool/snmptt/
# grep -A5 SPOOL /usr/sbin/snmptthandler
...
while (defined(my $line = <>))
{
print SPOOL $line;
if ($DEBUGGING >= 1)
{
# Print out item passed from snmptrapd
print $line."\n";
}
Os arquivos de spool pertencerão a root , com as mesmas permissões 0640 que foram emitidas com o arquivo de log de snmptt no modo autônomo. Isso significa que o processo daemon snmptt ainda não poderá lê-los e processá-los depois que snmptthandler estiver concluído. (No arquivo de log /var/log/snmptt/snmptt.debug , haverá um erro permissions denied ao tentar ler o arquivo de spool.)
Então, o próximo passo:
Defina a propriedade do diretório de spool para ser o usuário snmptt daemon e use o set-gid no diretório de spool, fazendo com que os novos arquivos gravados sejam de propriedade de e sejam legíveis pelo usuário que está executando snmptt .
chown zabbix:zabbix /var/spool/smptt
chmod g+s /var/spool/smptt
#ls -lia /var/spool/snmptt/
total 8
209 drwxrwsr-x 2 zabbix zabbix 4096 Aug 18 11:40 .
#ps -ef | grep snmptt
zabbix 8787 1 0 12:44 ? 00:00:00 /usr/bin/perl /usr/sbin/snmptt --daemon
Depois disso, o daemon snmptt poderá ler os arquivos em spool e gravará os arquivos no diretório de log esperado /var/tmp/zabbixtest/zabbix_traps.tmp como o usuário zabbix , não como raiz.
### After a trap is received
# ls -lia /var/tmp/zabbixtest/snmptt.log
524605 -rw-rw-r-- 1 zabbix zabbix 646 Aug 18 13:16 snmptt.log
O umask para o arquivo de log é do script snmptt :
$ grep -i umask /usr/sbin/snmptt
#umask 0;
umask 002;
#umask 0;
umask 002;
Outras mudanças, boa prática, mas não acredito que tenham impactado diretamente o resultado
- Alterou
snmptt.inipara lermode=daemonem vez demode=standalone. (Não está claro o efeito que isso teve, se houver) - Altere
/etc/snmp/snmptt.inipara lerdaemon_uid=(em branco) em vez dedaemon_uid=zabbix(isso é recomendado em snmp docs e evita os processos desnmpttduplos pelo mesmo usuário.
Então, há uma maneira de corrigir isso. Não tenho certeza se é o melhor caminho. A melhor maneira pode incluir a alteração de snmptthandler para usar o usuário / umask definido no arquivo de configuração.
Isso não responde à pergunta completa (0640 permissões ainda não estão claras) Comentários ou assistência são bem-vindos para isso.