zabbixで匿名認証
Zabbixのユーザー認証をLDAPへ移行する際、検索用のIDを用意するのが面倒な時、匿名認証を使いたくなります。公式ドキュメントには、Zabbixは匿名認証をサポートしていないと書かれているので、普通に設定しただけでは使えません。設定画面は以下の通りです。
全てのフィールドに有効な値が設定されていることがLDAP認証化の必須条件となっています。この設定で何が問題なのかと言えば、Bind DNとBind passwordです。ログインに使用されているIDが認証先のディレクトリに存在するかどうかを検索するための検索IDを入力するのですが、例えばセキュリティポリシーでパスワードを90日毎に変更することになっていると、その変更を90日毎に実施しなければ検索出来なくなってしまいます。せっかくディレクトリと連携してパスワード管理という面倒な作業から解放されようとしているのに90日毎にパスワードを変えるなんて馬鹿らしいですよね。そこでちょこっとソースをいじって、ログインしようとしているIDで検索をする仕様に変更します。
手を入れるのは、/usr/share/zabbix/include/classes/ldap/CLdap.phpです。既定値を設定できるようになっていますが、設定画面で入力した値で上書きされてしまうので、あらかじめ既定値を設定するのと、上書きするコードをコメントアウトします。必須設定は、host, bind_dn, base_dn, search_attributeです。27行目のコメントアウトを忘れないように。これを忘れると既定値を設定しても、設定画面の値で上書きされてしまいます。
class CLdap { public function __construct($arg = []) { $this->ds = false; $this->info = []; $this->cnf = [ 'host' => 'ldap://192.168.38.128', 'port' => '389', 'bind_dn' => '%{user}@domain', 'bind_password' => '', 'base_dn' => 'dc=domain,dc=co,dc=jp', 'search_attribute' => 'sAMAccountName', 'userfilter' => '(%{attr}=%{user})', 'groupkey' => 'cn', 'mapping' => [ 'alias' => 'uid', 'userid' => 'uidnumbera', 'passwd' => 'userpassword' ], 'referrals' => 0, 'version' => 3, 'starttls' => null, 'deref' => null ]; if (is_array($arg)) { // $this->cnf = zbx_array_merge($this->cnf, $arg); }
Zabbix以外でも匿名認証を使うことが出来ます。慣れるととても便利です。LDAP認証化すると、adminが使えなくなるので、ローカルのグループを別に作って、そこへadminを入れて、ローカルグループの認証方式をシステムデフォルトではなく、zabbixデータベース内のユーザー情報へ変更しておきます。adminのログインにはLDAP認証ではなく、ローカル認証が使用されるようになります。