【发布时间】:2015-12-16 02:01:05
【问题描述】:
我通过 AWS 使用 CentOS 7。
我想将 MongoDB 数据存储在附加的 EBS 上,而不是默认的 /var/lib 路径。
但是,当我编辑 /etc/mongod.conf 以指向新的 dbpath 时,我收到了权限被拒绝错误。
权限已正确设置为目录上的 mongod.mongod。
什么给了?
【问题讨论】:
标签: mongodb amazon-web-services amazon-ec2 docker
我通过 AWS 使用 CentOS 7。
我想将 MongoDB 数据存储在附加的 EBS 上,而不是默认的 /var/lib 路径。
但是,当我编辑 /etc/mongod.conf 以指向新的 dbpath 时,我收到了权限被拒绝错误。
权限已正确设置为目录上的 mongod.mongod。
什么给了?
【问题讨论】:
标签: mongodb amazon-web-services amazon-ec2 docker
TL;DR - 问题在于 SELinux,它会影响守护进程可以访问的内容。运行setenforce 0 暂时禁用。
您正在使用一种使用 SELinux 的 Linux。
来自维基百科:
SELinux 可以潜在地控制系统允许的每个活动 用户、进程和守护进程,具有非常精确的规范。然而, 它主要用于限制守护进程[需要引用],如数据库 具有更明确定义的数据访问权限的引擎或 Web 服务器,以及 活动权。这限制了受限守护进程的潜在危害 这变得妥协。普通的用户进程通常运行在 不受限制的域,不受 SELinux 限制,但仍受限制 经典的 Linux 访问权限
临时修复:
sudo setenforce 0
这应该会禁用 SELinux 策略并允许服务运行。
永久修复:
编辑/etc/sysconfig/selinux 并设置:
SELINUX=disabled
然后重启。
服务现在应该可以正常启动了。
数据目录也适用于 Docker,例如:
docker run --name db -v /mnt/path-to-mounted-ebs:/data/db -p 27017:27017 mongo:latest
警告:两种解决方案都会禁用 SELinux 提供的安全性,这会削弱您的整体安全性。更好的解决方案是了解 SELinux 的工作原理,并在您的新数据目录上创建与 mongod 一起使用的策略。有关更完整的教程,请参阅 https://wiki.centos.org/HowTos/SELinux。
【讨论】: