4. Zabbix serverの設定 - AllowRoot
ZabbixサーバやZabbixエージェント(unix版)は通常、”zabbix”ユーザとして動作しています。 Zabbixサーバの外部スクリプト、Zabbixエージェントのログ監視やUserparameterなどでは、Zabbixユーザでアクセスできないコマンドやファイルがあるケースがあります。そのような場合は、それぞれのコンフィグファイルを変更することで、Zabbixをrootユーザとして実行することでき、許可されていなかった処理も実行可能になります。
もちろん、実際の運用環境でrootユーザとしてZabbixを実行させるのは望ましいやり方ではありません。ただ、開発環境などで一時的に動作確認するには手っ取り早い方法です。
実行ユーザの変更
デフォルトの設定では、すべてzabbixユーザで動いています。
zabbix 7833 0.0 0.3 107000 3272 ? S 21:11 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 7834 0.2 0.3 107576 3484 ? S 21:11 0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 7835 0.0 0.8 110116 8356 ? S 21:11 0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 7836 0.0 0.7 109368 7604 ? S 21:11 0:00 /usr/sbin/zabbix_agentd: listener #2 [processing request] zabbix 7837 0.0 0.8 110664 8932 ? S 21:11 0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 7838 0.0 0.4 107260 4600 ? S 21:11 0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
この状態で、zabbixユーザにアクセス権の設定されていないディレクトリのサイズを確認しようとしても、当然エラーになります。
$ sudo -u zabbix ls -l /var/lib/mysql ls: cannot open directory '/var/lib/mysql': Permission denied $ zabbix_get -s 127.0.0.1 -k vfs.dir.size[/var/lib/mysql] ZBX_NOTSUPPORTED: Cannot obtain directory listing.
zabbixエージェントをrootユーザで実行できるよう、設定を変更します。
$ sudo vi /etc/zabbix/zabbix_agentd.conf : # AllowRoot=0 AllowRoot=1 : $ sudo service zabbix-agent restart
すべてのプロセスがrootユーザになりました。
root 15398 0.0 0.3 98552 3220 ? S 22:18 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf root 15399 0.3 0.3 99064 3444 ? S 22:18 0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec] root 15400 0.1 0.7 100264 7192 ? S 22:18 0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] root 15401 0.0 0.8 102052 8848 ? S 22:18 0:00 /usr/sbin/zabbix_agentd: listener #2 [processing request] root 15402 0.1 0.7 100596 7400 ? S 22:18 0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] root 15403 0.0 0.4 98812 4588 ? S 22:18 0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
再度、先ほどのコマンドを実行します。
$ zabbix_get -s 127.0.0.1 -k vfs.dir.size[/var/lib/mysql] 1404770526
今度は値が取得できました。
とはいえ、Zabbixサーバやエージェントをrootで動作させるのは、セキュリティ上望ましくありません。とはいえ、 MySQLのようにアプリケーションのインストール時に設定されたパーミッションを変更するのは、別の問題がでないかきちんと調査しないといけません。
別の手段で対応可能か?
vfs.dir.sizeのように直接プロセスからAPIをコールしているような処理では、rootで実行するか、ディレクトリ・ファイルのアクセス権を付与するしかなさそうです。どちらの方法も許可されない場合、Userparameterでオリジナルの処理を作成して、sudoのリストに必要なコマンドを登録してもらう、というやり方で回避はできます。ただ、そこまでする必要があるかどうか慎重に検討して方がよいですし、そもそもその対象を本当に監視しないと問題があるのか、とうことも検討した上で対応をするのがよいと思います。