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 パッケージのように大きく跳ばすと見落としていた。
探し回って見つけて、参照したのは
- GitHub Issue #4247 Ejabberd Access to WebAdmin page vhosts/ for account
- GitHub Issue #4249 WebAdmin is empty in ejabberd 24.06
- 公式ブログ記事 (24.06) WebAdmin commands permissions configuration
- 公式ブログ記事 (24.07) WebAdmin API permissions configuration
具体的には、設定ファイル 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
を指定することが必要であった。