誰でも ZABBIX

Zabbixの使い方、役に立つ情報、等々

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のリストに必要なコマンドを登録してもらう、というやり方で回避はできます。ただ、そこまでする必要があるかどうか慎重に検討して方がよいですし、そもそもその対象を本当に監視しないと問題があるのか、とうことも検討した上で対応をするのがよいと思います。