ejabberd安装启动报错:尝试在/home创建erlang cookie无权限如何解决
问题根因排查
1. erlang.cookie路径不一致的核心原因
Erlang虚拟机默认会将.erlang.cookie文件写入当前运行用户的家目录($HOME),官方文档提到的/var/lib/ejabberd/.erlang.cookie是ejabberd预配置的运行时工作目录路径,出现路径跳转的核心触发点有两个:
- 你创建的ejabberd用户未配置有效家目录:系统用户默认家目录一般是
/nonexistent或者空值,普通用户如果未创建家目录,$HOME变量会 fallback 到/home/,导致Erlang尝试在/home/.erlang.cookie写入,触发权限不足报错 - 你使用的systemd服务文件未指定正确的工作目录和用户家目录:如果服务文件没有配置
WorkingDirectory=/var/lib/ejabberd和Environment=HOME=/var/lib/ejabberd,ejabberd启动时会继承systemd的默认环境变量,$HOME指向ejabberd用户系统默认的无效家目录,就会出现路径随机跳转的问题。
2. 切换为自己的用户名运行正常的原因
你的普通用户有合法的/home/你的用户名家目录,权限配置正常,Erlang写入cookie文件没有权限阻碍,所以不会报错。
修复方案
- 首先给ejabberd用户配置正确的家目录,推荐使用系统用户,执行命令:
# 新建ejabberd系统用户,指定家目录为/var/lib/ejabberd,不创建/home下的目录 sudo useradd -r -s /sbin/nologin -d /var/lib/ejabberd ejabberd # 给/var/lib/ejabberd目录赋权 sudo chown -R ejabberd:ejabberd /var/lib/ejabberd
- 修改你的systemd服务文件,新增/调整以下配置项:
[Service] User=ejabberd Group=ejabberd WorkingDirectory=/var/lib/ejabberd Environment=HOME=/var/lib/ejabberd
- 重新加载systemd配置,重启ejabberd服务即可:
sudo systemctl daemon-reload sudo systemctl restart ejabberd
补充说明
--enable-user=ejabberd配置仅指定编译后运行的默认用户,不负责自动创建用户、配置家目录、调整目录权限,这些操作都需要手动处理。
内容的提问来源于stack exchange,提问作者4c1d
相关产品推荐
相关产品推荐

