「広告」

Zabbix 外部コマンドで、パーミッションエラー

「広告」
記事内に広告が含まれています。
「広告」

「system.run」アイテムで、外部コマンドを実行する場合、パーミッションエラーになる場合があります。

「広告」

外部コマンドを実現する

外部コマンドの結果を表示させたい

Zabbix Agentの5.0より前は、「EnableRemoteCommands」で、外部コマンドを実行できるようにしていましたが、
Zabbix Agentの5以上では、

AllowKey=system.run[*]
を有効(追加)にします。

vi /usr/local/etc/zabbix_agentd.conf

### Option: EnableRemoteCommands - Deprecated, use AllowKey=system.run[*] or DenyKey=system.run[*] instead
#       Internal alias for AllowKey/DenyKey parameters depending on value:
#       0 - DenyKey=system.run[*]
#       1 - AllowKey=system.run[*]
#
# Mandatory: no
AllowKey=system.run[*]

↑これで、zabbix-agent を再起動します。

パーミッションのエラー

今回、例として

du -s -b /tmp/zabbix | awk '{print $1}'

というコマンドで、「/tmp/zabbix」というディレクトリの容量を出してみます。

xxx:YYYYMMDD:HHMMSS.SSS item "xxxx:system.run[du -s -b  /tmp/zabbix | awk '{print $1}',wait]" became not supported: Value of type "string" is not suitable for value type "Numeric (unsigned)". Value "du: cannot read directory ‘/tmp/zabbix/2’: Permission denied

↑ログをみると「/tmp/zabbix/2」がパーミッションの関係で、読むことができない。と出ています。

Zabbix-Agentのプロセスが、zabbixというユーザ(rootではないユーザ)で動いているので、読めないディレクトリ(ファイル)が存在する場合がある。ということです。

「広告」

パーミッション、解決方法。

解決方法その1、sudoで行う

xxx:YYYYMMDD:HHMMSS.SSS item "xxxx:system.run[sudo du -s -b  /tmp/zabbix | awk '{print $1}',wait]" became not supported: Unsupported item key.
xxx:YYYYMMDD:HHMMSS.SSS error reason for "xxxx:system.run[sudo du -s -b  /tmp/zabbix | awk '{print $1}',wait]" changed: Value of type "string" is not suitable for value type "Numeric (unsigned)". Value "
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified"

↑「sudo du -s -b /tmp/zabbix | awk ‘{print $1}’」とsudoコマンドで実行しましたが、エラーとなりました。

# sudo visudo

zabbix ALL=NOPASSWD: ALL

↑sudo visudoにて、zabbixに権限を与えます。
これで、zabbixユーザは、パスワードなしで実行できるようになります。

xxx:YYYYMMDD:HHMMSS.SSS item "xxxx:system.run[sudo du -s -b  /tmp/zabbix | awk '{print $1}',wait]" became supported

↑エラーが解消しました

解決方法その2、Zabbix-Agent側で設定(2021/4/2 追加)

vi /usr/local/etc/zabbix_agentd.conf

### Option: EnableRemoteCommands - Deprecated, use AllowKey=system.run[*] or DenyKey=system.run[*] instead
#       Internal alias for AllowKey/DenyKey parameters depending on value:
#       0 - DenyKey=system.run[*]
#       1 - AllowKey=system.run[*]
#
# Mandatory: no
AllowKey=system.run[*]

↑最後の行を追加して、「system.run」を実行可能にします。

# systemctl restart zabbix-agent

↑ と、再起動をします。これで、「sudo」を使わなくても、

↑ と、キーの設定をすれば、違うサーバーでコマンドが実行されます。

解決方法その3、Zabbix-Agentをrootで起動

# vi /usr/local/etc/zabbix_agentd.conf

# Default:
# AllowRoot=0
AllowRoot=1

↑AllowRootを有効にします。

vi /usr/lib/systemd/system/zabbix-agent.service

User=zabbix
Group=zabbix

 ↓

User=root
Group=root

# systemctl daemon-reload
# systemctl restart zabbix-agent

↑起動ファイルにて、起動ユーザ/グループを、rootにします。

「広告」

system.run確認方法(2021/4/2 追加)

# zabbix_get -s xxx.xxx.xxx.xxx -k 'system.run[ls -al /home|wc -l]'
13

↑「xxx.xxx.xxx.xxx」は、Zabbix-agent側のIPアドレス。
Zabbix-Server側で、「zabbix_get」コマンドを実行します。
上記のように数字が返ってくればOKです。

# zabbix_get -s xxx.xxx.xxx.xxx -k 'system.run[ls -al /home|wc -l]'
ZBX_NOTSUPPORTED: Unsupported item key.

↑ と、「ZBX_NOTSUPPORTED: Unsupported item key.」と出てきたら、何らかの設定が必要です。

「広告」

du コマンドまとめ

root ユーザで、Zabbix-Agentを起動すると、セキュリティ的に心配なので、「sudo」経由で実行できるようにするのがいいでしょう。

 

タイトルとURLをコピーしました