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 quesnmptthandler
seja 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.ini
para lermode=daemon
em vez demode=standalone
. (Não está claro o efeito que isso teve, se houver) - Altere
/etc/snmp/snmptt.ini
para lerdaemon_uid=
(em branco) em vez dedaemon_uid=zabbix
(isso é recomendado em snmp docs e evita os processos desnmptt
duplos 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.