2018年3月19日月曜日

ZabbixでAllowRoot=1をせずに/var/log/messagesなどを監視する方法

LinuxのOSログといえば/var/log/messagesとなるが、このログファイルはroot権限がないと読み込みができないログファイルとなっている。

◆Redhat系Linuxの場合
# ls -l /var/log/messages
------------------------------
-rw------- 1 root root 134324  3月 16 12:50 /var/log/messages
------------------------------

◆Debian系Linuxの場合
$ ls -l /var/log/messages
------------------------------
-rw-r----- 1 root adm 157  3月 11 06:25 /var/log/messages
------------------------------

通常、Zabbix Agentのプロセスはzabbixユーザーの権限で動作するため、このログファイルが監視できず困る場面がある。回避策としては、Zabbix Agentをroot権限で動作させるようにすることが考えられる。Zabbix Agentをroot権限で動作させるためには、zabbix_agentd.confに以下の設定を加えればよい。

# cat /etc/zabbix/zabbix_agentd.conf | grep AllowRoot
------------------------------
### Option: AllowRoot
AllowRoot=1
------------------------------

しかし、上記方法は、Zabbix Agentがroot権限で動くことになり、セキュリティ面で推奨されない設定となる。そこで、今回はAllowRoot=1せずにログ監視できる方法を考えてみた。

zabbixユーザーをrootグループに追加して対応する

zabbixユーザーをrootグループ(後述するが、Debian系Linuxではadmグループ)に追加し、監視対象ログの権限をrootグループにて読み取り可能とすることで対応する。Linuxディストリビューションごとに若干手順が異なるため、Redhat系LinuxとDebian系Linuxの手順をそれぞれ記載することにする。

Redhat系Linuxの場合

/var/log/messagesの権限を再掲する。

# ls -l /var/log/messages
------------------------------
-rw------- 1 root root 134324  3月 16 12:50 /var/log/messages
------------------------------

権限は600となっているおり、rootグループのユーザーであっても読み取りができないため、まずは権限変更を行う。

# chmod 640 /var/log/messages
# ls -l /var/log/messages
------------------------------
-rw-r----- 1 root root 134324  3月 16 12:50 /var/log/messages
------------------------------

権限を変えても、ログローテーションされる際にもとの権限(600)に戻ってしまうため、ログローテーション時に、新しいファイルの権限を640として作成する設定を以下の通り追加する。

# cat /etc/logrotate.d/syslog
------------------------------
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
    create 640 root root
}
------------------------------

最後にzabbixユーザーをrootグループに所属させる。

# id zabbix
------------------------------
uid=995(zabbix) gid=993(zabbix) groups=993(zabbix)
------------------------------
# usermod -aG root zabbix
# id zabbix
------------------------------
uid=995(zabbix) gid=993(zabbix) groups=993(zabbix),0(root)
------------------------------

Debian系Linuxの場合

/var/log/messagesの権限を再掲する。

$ ls -l /var/log/messages
------------------------------
-rw-r----- 1 root adm 157  3月 11 06:25 /var/log/messages
------------------------------

Redhat系Linuxと異なり、admグループに読み取り権限が付いている。したがって、zabbixユーザーをadmグループに所属させるだけで対処可能である。

$ id zabbix
------------------------------
uid=111(zabbix) gid=116(zabbix) groups=116(zabbix)
------------------------------
$ sudo usermod -aG adm zabbix
$ id zabbix
------------------------------
uid=111(zabbix) gid=116(zabbix) groups=116(zabbix),4(adm)
------------------------------

Zabbixにて確認

zabbixユーザーで読み込み権限のないファイルを監視している場合、該当のアイテムに「ZBX_NOTSUPPORTED」のエラーが表示され、ステータスが「取得失敗」となっているはずである。


ログ監視対象のサーバーのZabbix Agentのログからも、エラーが出ていることがわかる。

# tail -100 /var/log/zabbix/zabbix_agentd.log | grep messages
------------------------------
  4870:20180317:220745.694 cannot open "/var/log/messages"': [13] Permission denied
  4870:20180317:220815.697 cannot open "/var/log/messages"': [13] Permission denied
  4870:20180317:220845.700 cannot open "/var/log/messages"': [13] Permission denied
  4870:20180317:220845.700 active check "log[/var/log/messages,"@messages word",,,skip]" is not supported
------------------------------

zabbixユーザーに対して、必要な権限を付与し、再度監視状況を確認してみる。設定変更後数分待つとエラーが消え、ステータスが「有効」となった。


0 件のコメント:

コメントを投稿

人気の投稿