snmpトラップのトラップログファイルに対するパーミッションエラー

■環境
centOS 7.9
zabbix 5.0.10
net-snmp-utils 5.7.2

■質問
/var/log/zabbix/zabbix_server.log に以下のSNMP trapper fileをパーミッションエラーで開くことができないと1分おきに記録されている。
こちらの解決のため、確認すべき場所や実行すべきことなどはありますでしょうか。

--
2895:20210418:032210.107 cannot open SNMP trapper file "/var/log/snmptrap/snmptrap.log": [13] Permission denied
--

■snmpトラップ設定
zabbixのインストール完了済み
snmpトラップを受け取れるように設定を開始
トラップ整形ツールはzabbix_trap_receiver.plを使用

//zabbix_trap_receiver.plを/usr/local/bin/に配置
[root@zabbix01 ~]# cp /tmp/zabbix-source/zabbix-5.0.10/misc/snmptrap/zabbix_trap_receiver.pl /usr/local/bin/

//ログ出力先ディレクトリの作成
[root@zabbix01 ~]# mkdir /var/log/snmptrap

//zabbix_trap_receiver.plの設定変更
[root@zabbix01 ~]# vi /usr/local/bin/zabbix_trap_receiver.pl

出力するログファイルのパスを指定
- $SNMPTrapperFile = '/tmp/zabbix_traps.tmp';
+ $SNMPTrapperFile = '/var/log/snmptrap/snmptrap.log';

ログにトラップデータを出力する際の日時フォーマットの変更
- $DateTimeFormat = '%H:%M:%S %Y/%m/%d';
+$ DateTimeFormat = '%Y/%m/%d %H:%M:%S';

:wq

■エラーが表示されるのを確認してからやったこと
//snmptrap.logのパーミッション確認
[root@zabbix01 ~]# ll /var/log/snmptrap/
-rw-r--r--. 1 root root 0 4月 18 03:16 snmptrap.log

//snmptrap.logに全ユーザーで書き込み権限追加
[root@zabbix01 ~]# chmod 666 /var/log/snmptrap/snmptrap.log

質問と同じログが表示され続けたため解決せず。

■確認したこと
//zabbixサーバからsnmpトラップ送信テスト
[root@zabbix01 ~]# snmptrap -v2c -c public localhost '' .1.3.6.1.4.1.8072.9999 .1.3.6.1.4.1.8072.9999.1 s "Test Message"

[root@zabbix01 ~]# cat /var/log/snmptrap/snmptrap.log
2021/04/15 23:38:58 ZBXTRAP 127.0.0.1
PDU INFO:
notificationtype TRAP
version 1
receivedfrom UDP: [127.0.0.1]:59400->[127.0.0.1]:162
errorstatus 0
messageid 0
community public
transactionid 1
errorindex 0
requestid 1118864446
VARBINDS:
.1.3.6.1.2.1.1.3.0 type=67 value=Timeticks: (184303) 0:30:43.03
.1.3.6.1.6.3.1.1.4.1.0 type=6 value=OID: .1.3.6.1.4.1.8072.9999
.1.3.6.1.4.1.8072.9999.1 type=4 value=STRING: "Test Message"

snmptrap.logにちゃんと書き込まれている。

//OS再起動

パーミッションエラーログは変わらず吐き続ける

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー Yasumi の写真

同じことをしていますが、私の手元環境では特にエラー出ていないですね。755にしてはどうでしょう。

===============================================
[root@ZABBIX snmptrap]# pwd
/var/log/snmptrap

[root@ZABBIX snmptrap]# ll
total 8
-rwxr-xr-x 1 zabbix zabbix 0 Feb 2 03:51 snmptrap.log
-rwxr-xr-x 1 zabbix zabbix 867 Jan 15 17:15 snmptrap.log-20210117.gz
-rwxr-xr-x 1 zabbix zabbix 1266 Feb 1 16:32 snmptrap.log-20210202
===============================================

ユーザー kita の写真

755や777のパーミッションも試してみたんですが結果は変わらずでした。

ふと思い出したのが、このzabbixは勉強用だったのでSELinuxを有効化にしたままで構築してます。
試しにSELinuxを無効化したら、大本の質問に記載しているエラーは消えました。
SELinux無効化時のsnmptrap.logのパーミッションはsnmptrap.log作成時の644に戻してます。
(linux初学者なのでSELinux自体もわかってないですが...)
(パーミッションって聞いたら、ファイルのアクセス権を想像してしまうので、SELinuxでブロックされたと表示されてほしいもんです)

結果としてSELinuxにルール追加してSELinux有効化したら、ログは消えました。
以下にやったことをメモとして置いておきます。
(コマンドの意味がよくわかっていないまま実行しているので、よくわからないなと思いながらやってました。)

//SELinux無効化
[root@zabbix01 ~]# setenforce 0

パーミッションエラーログ表示されなくなった。

//auditログの確認
[root@zabbix01 ~]# ausearch -i -ts 19:34:00 -te 19:34:10
抜粋
--
type=PROCTITLE msg=audit(2021年04月21日 19:34:07.271:6984) : proctitle=/usr/sbin/zabbix_server: snmp trapper [processing data]
type=SYSCALL msg=audit(2021年04月21日 19:34:07.271:6984) : arch=x86_64 syscall=open success=no exit=EACCES(許可がありません) a0=0x5575b1d1bb60 a1=O_RDONLY a2=0x7fff45333fc0 a3=0x8 items=0 ppid=1674 pid=1696 auid=unset uid=zabbix gid=zabbix euid=zabbix suid=zabbix fsuid=zabbix egid=zabbix sgid=zabbix fsgid=zabbix tty=(none) ses=unset comm=zabbix_server exe=/usr/sbin/zabbix_server_mysql subj=system_u:system_r:zabbix_t:s0 key=(null)
type=AVC msg=audit(2021年04月21日 19:34:07.271:6984) : avc: denied { read } for pid=1696 comm=zabbix_server name=snmptrap.log dev="dm-0" ino=51099072 scontext=system_u:system_r:zabbix_t:s0 tcontext=system_u:object_r:snmpd_log_t:s0 tclass=file permissive=0
--

//許可コマンドの確認
[root@zabbix01 ~]# grep zabbix_server /var/log/audit/audit.log | audit2allow

#============= zabbix_t ==============
allow zabbix_t snmpd_log_t:file { open read };

//SELinuxに追加するモジュールファイルの作成
[root@zabbix01 ~]# grep zabbix_server /var/log/audit/audit.log | audit2allow -M zabbix-policy
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i zabbix-policy.pp

//生成されたモジュールをSELinuxルールに追加
[root@zabbix01 ~]# semodule -i zabbix-policy.pp

//zabbixのサービス再起動
[root@zabbix01 ~]# systemctl restart zabbix-server

これを2回繰り返した。1回目はサービス起動失敗して途方に暮れたので、もう1回上から実施したらサービス起動した。

//SELinux有効化
[root@zabbix01 ~]# setenforce 1

//ちょっと時間をおいてからzabbix-serverログ確認
[root@zabbix01 ~]# tail /var/log/zabbix/zabbix_server.log

パーミッションエラーログは消えていたので解決。

SELinuxはかなり厄介ということがわかりました...

ユーザー kita の写真

全然関係ないけど、/var/log/zabbix_server.logの以下のログって放置してていいんでしょうか。
放置してても大丈夫だと思うが、意味もよくわかっていないのと何をすればいいのかわからず...

--
8082:20210421:215659.616 cannot send list of active checks to "127.0.0.1": host [Zabbix server] not found
--

(新しいフォーラム作るのもあれかなと思いとりあえずくっつけておきます。もしわかる方がいれば)

ユーザー Yasumi の写真

「設定」⇒「ホスト」画面に「Zabbix server」があるけど、
アクティブチェック監視できてないよ、というメッセージです。

※ZabbixエージェントconfのActive Checkに「Zabbix server」の記載がない、等。

ユーザー yk_taiko の写真

逆だと思いますよ

"127.0.0.1" のエージェントから 「"Zabbix server" の監視リストをくれ」というリクエストが来たが、
ホスト一覧に "Zabbix server" は存在しない

ユーザー TNK の写真

そうですね。yk_taikoさんが書かれている通りです。

Zabbixエージェントの設定ファイル(zabbix_agentd.conf)内の
Hostnameに「Zabbix server」という設定をしているにも関わらず、
Zabbixサーバー上に「Zabbix server」という名前のホストが登録
されていない、もしくは有効になっていないのだと思います。

Zabbixサーバー上にWebインターフェース上から確認できる登録済
のホストの名前と、各Zabbixエージェントの設定ファイルに記述し
てあるHostnameの値を大文字小文字も含めて合わせるようにするこ
とが必要です。

これが正しく設定できていないと、タイプが「Zabbixエージェント
(アクティブ)」のアイテムの値を取得することができません。

ユーザー kita の写真

回答ありがとうございます。
zabbixサーバのzabbixエージェントはzabbixインストール時から何も変えず放置していました。
で、GUI上のホストの設定の名前は変更していたのに、zabbixエージェントのconfファイルのhostnameはそのままにしていたというオチでした。
zabbix_agentd.confのhostnameをGUIの名前と統一にしたらエラーログは表示されなくなりました。

(アクティブ監視はしていないので放置していてもよかったんですが、解決してよかったです。)