ejabberd のウェブ管理画面の不具合

Debian GNU/Linux 上で ejabberd を用いて XMPP サーバーを運用している。開発元で公開される最新版ではなく、Debian 公式のパッケージ を用いているため、そのパッケージがいつ作成されるかに依存して更新が遅くなったりバージョンが跳ぶことがある。

先ごろ、その公式パッケージに従ってバージョンを 23.01 から 24.12 に更新したところ、ejabberd のウェブ管理画面に情報が表示されなくなってしまった。アクセスはできるのだがほぼすべての情報部分が空になってしまう。バージョンアップのどこかで仕様の変更があり設定方法が変わったのだと思うが、公式ドキュメントだけではそれをすぐに見つけることができなかった。

ログには

[debug] Command 'registered_vhosts' execution denied
(CallerInfo=#{caller_host => <<"example.com">>,
caller_module => ejabberd_web_admin,
ip => {{9221,25991,62144,0,12521,33279,65131,31585},59544},
usr => {<<"admin">>,<<"example.com">>,<<>>}})
[debug] Blocked access to command registered_vhosts for
CallerInfo: #{caller_host => <<"example.com">>,
caller_module => ejabberd_web_admin,
ip => {{9221,25991,62144,0,12521,33279,65131,31585},59544},
usr => {<<"admin">>,<<"example.com">>,<<>>}}
[info] Access to WebAdmin page vhosts/ for account admin@example.com was denied

のようなエラーが記録される。

ようやく解決できたので記録しておく。常に最新版を使い、その度にリリース情報をチェックしていればたやすく気づいたのだろうが、Debian パッケージのように大きく跳ばすと見落としていた。

探し回って見つけて、参照したのは

具体的には、設定ファイル ejabberd.yml の api_permissions セクションに以下を追加する。

api_permissions:
  "webadmin access":
    from:
      - ejabberd_web_admin
    who:
      - acl: admin
    what:
      - "*"

なお、acl セクションや access_rules セクションでは次のような設定が行われていること。

acl:
  admin:
    user:
      - "admin@example.com"  # 管理者アカウント
access_rules:
  configure:
    allow: admin

重要なポイントは from: ejabberd_web_admin である。ログに表示される caller_module => ejabberd_web_admin が示すように、WebAdmin からのリクエストは ejabberd_web_admin モジュールから発信される。そのため、from フィールドに ejabberd_web_admin を指定することが必要であった。