こんにちは、SCSKの坂木です。
「標準の監視アイテムだけでは取得できない、独自の情報を収集したい…」
「特定のスクリプトを実行した結果をZabbixで監視したい…」
そんな風に思ったことはありませんか?
そのお悩み、Zabbixエージェントの強力な機能 system.run を使えば解決できます!
この記事では、system.runの基本的な設定方法から、セキュリティを考慮した安全な使い方まで、初心者の方にも分かりやすく
ステップバイステップで解説していきます。
system.runについて
system.runは、Zabbixエージェントがインストールされたサーバ上で、任意のスクリプトを実行し、その結果を監視データとして取得できる便利なアイテムキーです。
system.runは任意のコマンドを実行できるため、設定を誤ると深刻なセキュリティリスクとなります。
このため、Zabbix Agentのデフォルト設定では無効化されています。
安全に利用するためには、実行を許可するスクリプトファイルを明示的に指定するなどの対策が必須です。
次章以降で、具体的な有効化の手順と、セキュリティを担保するための設定方法を解説します。
設定ファイルの修正
デフォルトの状態では、セキュリティ上の理由からsystem.runの利用は全面的に禁止されています。
この章では、安全な形で特定のスクリプト実行のみを許可する設定を行っていきます。
まず、監視対象ホストにSSHなどでログインし、Zabbixエージェントの設定ファイル(zabbix_agentd.conf)を開きます。
# vi /etc/zabbix/zabbix_agentd.conf
ファイルを開いて、DenyKeyに関する設定項目を探してください。
こちらは、デフォルトでDenyKey=system.run[*]、つまり『全てのsystem.runコマンドを拒否する』設定となっております。
### Option: DenyKey # Deny execution of items keys matching pattern. # Multiple keys matching rules may be defined in combination with AllowKey. # Key pattern is wildcard expression, which support "*" character to match any number of any characters in certain position. It might be used in both key name and key arguments. # Parameters are processed one by one according their appearance order. # If no AllowKey or DenyKey rules defined, all keys are allowed. # Unless another system.run[*] rule is specified DenyKey=system.run[*] is added by default. # # Mandatory: no # Default: # DenyKey=system.run[*]
次に、以下のようにAllowKeyでsystem.runの利用を許可します。
[]内はsystem.runの実行を許可するファイル名を記載します。
ワイルドカードが利用できるので、*を用いて特定のディレクトリ配下のファイル全て実行可能といった設定もできます。
(正規表現での指定はできません)
追記した一行は「/etc/zabbix/work/ ディレクトリ配下にある、任意のスクリプトやコマンドの実行だけを許可します」という意味になります。
### Option: DenyKey # Deny execution of items keys matching pattern. # Multiple keys matching rules may be defined in combination with AllowKey. # Key pattern is wildcard expression, which support "*" character to match any number of any characters in certain position. It might be used in both key name and key arguments. # Parameters are processed one by one according their appearance order. # If no AllowKey or DenyKey rules defined, all keys are allowed. # Unless another system.run[*] rule is specified DenyKey=system.run[*] is added by default. # # Mandatory: no # Default: # DenyKey=system.run[*] AllowKey=system.run[/etc/zabbix/work/*] #追記した箇所
⚠️ セキュリティに関する重要ポイント
[]内を*にするとサーバ内の全てのすべてのスクリプトが実行できてしまうため、必要最低限のファイルのみ許可するように設定してください。
例えば、以下のような設定は絶対に避けてください。
AllowKey=system.run[*]
設定ファイルの編集が終わったら、保存してファイルを閉じます。
最後に、変更内容を反映させるためにZabbixエージェントを再起動します。
# systemctl restart zabbix-agent
実行ファイルの権限変更
本ブログでは、セキュリティアップデートの件数を取得するget_security_updates.shをsystem.runの実行対象ファイルとします。
また、ファイルを/etc/zabbix/work/配下に配置します。
# cat get_security_updates.sh #!/bin/bash dnf updateinfo list sec -q | wc -l
system.runで呼び出されるスクリプトファイルは、zabbixユーザ権限で実行されます。
そのため、スクリプトファイルに対してzabbixユーザが実行できるパーミッションを付与する必要があります。
スクリプトファイルに実行権限を付与します。
# chmod +x /etc/zabbix/work/get_security_updates.sh
zabbixユーザが実行できるファイルになっていることを確認します。
# ll -rwxr-xr-x. 1 root root 48 Oct 24 01:21 get_security_updates.sh
以上で、zabbixエージェント側での設定は完了です。
Zabbixインタフェースでのアイテム設定
続いて、Zabbixサーバのインタフェースからsystem.runのアイテムを作成していきます。
[データ収集] > [ホスト] > (対象ホストの) [アイテム] と進み、[アイテムの作成] をクリックします。
以下の項目を選択します。
| 項目 | 値 | 
| タイプ | Zabbixエージェント(アクティブ) | 
| キー | system.run[<実行するスクリプトファイルのフルパス>] | 

設定が完了したら、アイテムが正しくデータを取得できているか確認しましょう。
[監視データ] > [最新データ]を開き、設定したアイテムの値が定期的に更新されていることを確認してください。
以上で設定は完了です。これでsystem.runによるカスタム監視が開始されます。
まとめ
本記事では、Zabbixエージェントのsystem.runを利用してカスタム監視を行う方法を解説しました。
system.runは、任意のコマンドやスクリプトの実行結果を取得できる非常に柔軟な機能ですが、その反面、セキュリティ設定が不可欠です。
設定の要点はこちらになります。
| 項目 | 要点 | 
| エージェント側 | AllowKeyで実行可能なコマンドを厳密に制限する | 
| 監視対象ホスト側 | スクリプトファイルをzabbixユーザが実行できるパーミッションに設定する | 
| Zabbixサーバー側 (UI) | system.run[command]キーでアイテムを作成する | 
特に、AllowKey=system.run[*]のような広範な許可設定は深刻なセキュリティリスクとなるため、本番環境では絶対に使用しないでください。
system.runを正しく理解し、安全に活用することで、Zabbixの監視能力は飛躍的に向上します。標準アイテムでは実現できない独自の監視要件に、ぜひ応用してみてください。
▼ Zabbixに関するおすすめ記事

