Debian10 GCP VM安装MongoDB4.2 权限配置正常仍报keyfile读取错误
问题根因定位
直接原因:/db 目录缺少执行权限
你提供的 /db 目录权限为 drw-rw-r--,Linux 系统中目录的执行权限(x位)是用户/用户组进入目录、访问目录内文件的必要前提。即便 /db/mongodb-keyfile 本身的属主、权限都符合要求,但 mongodb 用户没有 /db 目录的执行权限,无法进入目录读取内部文件,就会触发权限拒绝报错。
次要可能原因:AppArmor 规则限制
Debian 10 默认启用 AppArmor 安全模块,官方安装包自带的 MongoDB AppArmor 规则默认只允许访问默认的 /var/lib/mongodb 路径,你自定义的 /db、/certs 路径不在白名单内时,也会触发权限拦截。
排查解决步骤
第一步:修复 /db 目录权限
执行命令给 /db 目录添加属主和属组的执行权限:
chmod ug+x /db
执行后确认 /db 权限变为 drwxrwxr--,随后尝试重启服务:
systemctl restart mongod
如果服务启动成功则问题解决,仍报错则走下一步排查。
第二步:排查 AppArmor 限制
- 临时禁用 MongoDB 的 AppArmor 规则验证:
ln -s /etc/apparmor.d/usr.bin.mongod /etc/apparmor.d/disable/ apparmor_parser -R /etc/apparmor.d/usr.bin.mongod
重启 MongoDB 服务,如果成功启动则确认是 AppArmor 规则问题。
2. 永久修复规则:
编辑 /etc/apparmor.d/local/usr.bin.mongod 文件,添加两行自定义路径的访问权限:
/db/** rwk, /certs/** r,
重新加载 AppArmor 规则:
apparmor_parser -r /etc/apparmor.d/usr.bin.mongod rm /etc/apparmor.d/disable/usr.bin.mongod
重启 MongoDB 服务验证即可。
辅助排查方式
如果以上两步未解决,可以切换到 mongodb 用户手动测试文件读取能力,定位具体权限问题:
su -s /bin/bash mongodb -c "cat /db/mongodb-keyfile"
根据该命令的返回报错可进一步定位问题。
内容的提问来源于stack exchange,提问作者Yonatan Huber
相关产品推荐
相关产品推荐

