mongodb 3.4.3权限被拒绝有关netbuger_kv_engine.cpp 267错误与ubuntu 16

时间:2017-03-31 09:31:05

标签: mongodb ubuntu

我在将mongod作为服务时遇到问题: 当我执行sudo mongod -f /etc/mongod.conf但是当使用sudo service mongod start启动它时,它是如何工作的呢?我在日志中收到错误

Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

我在ubuntu 16上运行mongodb

我完全按照mongodb文档中的说明安装该版本,这是一个错误吗?任何建议如何解决这一点是值得赞赏的。

其他信息:

mongodb服务启动脚本如下所示,并以用户mongodb的身份运行,是否可以连接到错误? LIB / systemd /系统/ mongodb.service:

[Unit]
Description=MongoDB Database Service
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/bin/mongod --config /etc/mongod.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
User=mongodb
Group=mongodb
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target

7 个答案:

答案 0 :(得分:40)

  

我在使用mongod作为服务时遇到了问题:当我执行sudo mongod -f /etc/mongod.conf但是当使用sudo service mongod start启动它时它是如何工作的我在日志中出错了

sudo命令以mongod权限(又名superuser access)启动root。如果您将mongod作为服务运行,则在服务定义中配置用户和组(在您的示例中为mongodb配置)。

无需像mongod用户那样运行root进程,强烈建议不要使用Principle of least privilege的常见安全做法。

如果要从命令行测试配置,可以使用sudo与指定用户而不是默认(root)用户一起运行。

例如:

sudo -u mongodb mongod -f /etc/mongod.conf 

通常,最好使用服务配置,而不是手动运行mongod。通过手动调用,您还必须记住包含配置文件路径之类的参数(因为没有默认的配置路径)。如果没有配置文件,mongod也会使用默认选项,例如dbPath /data/db

  

断言:28595:13:权限被拒绝src / mongo / db / storage / wiredtiger / wiredtiger_kv_engine.cpp 267

您的权限错误的可能原因是之前已mongod用户身为root。某些目录和文件现在可能由root用户拥有,因此mongodb用户无法访问这些目录和文件。您的具体错误与访问数据目录中的文件(即storage.dbPath中已配置的mongod.conf)有关。

假设您没有更改mongod.conf文件中的默认路径,您应该能够递归调整权限以匹配mongod.service定义所期望的内容。

首先,确保您已暂停mongod实例,如果它当前正在运行。

然后,递归调整对预期用户和组的权限:

# storage.dbPath
sudo chown -R mongodb:mongodb /var/lib/mongodb

# systemLog.path
sudo chown -R mongodb:mongodb /var/log/mongodb

现在您应该可以启动mongod作为服务。如果服务无法启动,则mongod日志文件中应该有更详细的信息(假设日志文件可由mongodb服务用户写入)。

答案 1 :(得分:7)

有同样的问题。

/var/log/mongodb/mongod.log中的内容:

2017-05-13T13:46:41.152+0700 E STORAGE  [initandlisten] WiredTiger error (13) [1494658001:152518][15821:0x7fb843803cc0], connection: /var/lib/mongodb/journal/WiredTigerPreplog.0000000002: file-remove: unlink: Permission denied
2017-05-13T13:46:41.159+0700 I -        [initandlisten] Assertion: 28595:13: Permission denied src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp 267

所以我们看到有些东西无法删除/ var / lib / mongodb / journal /中的文件“WiredTigerPreplog.0000000002” 所以id只是给了权限,我刚刚做了:

sudo chmod 764 /var/lib/mongodb/journal/

如果没有帮助,请尝试:

sudo chown -R mongodb:mongodb /var/lib/mongodb/ && sudo chmod 764 /var/lib/mongodb/journal/

答案 2 :(得分:6)

有三种设置会触发此类问题:

  1. MongoDB安装配置为在给定路径上创建数据库文件,并且当前系统上不存在此路径。此路径在mongo中称为dbpath
  2. 在您的情况下,请检查是否存在/data/db。如果它没有或者它是空的,那么mongod正在尝试错误的dbpath。你需要找到它,它通常在/var/lib/mongodb下。

    一旦你找到它,你可以做两件事。首先,将所有文件从那里复制到/data/db。其次,在mongod.conf文件下更改dbpath,该文件位于/etc/mongod.conf(在linux中)。确保使用--config指定配置文件启动mongod。

    1. MongoDB没有权限读取与其dbpath对应的一个或多个文件或目录。
    2. chown mongodb:mongodb dbpath -R

      1. MongoDB缺少WiredTiger.wt。如果删除dbpath下的文件或者设备出现故障,则会发生这种情况。例如,我们这样做是为了测试恢复策略。
      2. 如果你确定dbpath是正确的,并且那里没有WiredTiger.wt的实例。你的数据库坏了。如果丢失此文件,则无法确保完整性。通过以下方式重新安装mongodb:

        sudo apt-get purge mongodb-org*

        sudo rm -r dbpath

        sudo apt-get install mongodb-org

        编辑: 或者从您的一个副本中复制dbpath。

答案 3 :(得分:0)

我希望对上一个答案附加评论,但不幸的是我还不能。

我完全同意Stennie的解释。这正是发生在我身上的事情。 我一直将mongod作为服务运行,但今天,因为我做了一些更改,我尝试使用sudo mongod --auth --dbpath /data/mongodb/来运行该过程来测试授权和数据库更改位置。 之后,由于此权限问题,mongod服务不再运行。

我已经说过sudo chown -R mongodb:mongodb /data/mongodb/命令没有按预期立即解决问题。我不得不多次重启,删除mongod.lock下的/data/mongodb/文件,再次重新发出sudo chown命令..最后一切都进展顺利。

答案 4 :(得分:0)

我有一个类似的问题,但是具有自定义日志路径和数据目录。更新所有者和对他们的组访问权不能解决作为服务运行的问题 将组和所有者更新为mongodb:如前所述,mongodb可自行运行mongod

!rm ~/yourfolder.zip

sudo -u mongodb mongod -f /etc/mongod.conf 

答案 5 :(得分:0)

sudo chmod -R 666 /var/lib/mongodb

是另一种解决方案...

答案 6 :(得分:0)

如果您在 CentOS 上发现自己遇到同样的问题,但权限看起来是正确的,可能是因为 SELinux 策略。在我的系统上,MongoDB 文件使用特定的 SELinux 上下文。 mongod 服务器无法启动,输出相同的权限错误,直到我更正 SELinux 上下文。

如果不存在,则创建 MongoDB 数据文件夹(/var/lib/mongo 或 /var/lib/mongodb,检查您的 /etc/mongod.conf 文件):

$ mkdir -p /var/lib/mongodb

然后尝试恢复 SELinux 上下文:

$ restorecon -v /var/lib/mongodb
$ restorecon -v /var/lib/mongodb/*

如果仍然不起作用,请尝试直接应用上下文:

$ chcon system_u:object_r:mongod_var_lib_t:s0 /var/lib/mongodb
$ chcon system_u:object_r:mongod_var_lib_t:s0 /var/lib/mongodb/*

验证上下文是否正确:

$ ls -lZ -d /var/lib/mongodb
drwxr-xr-x. mongod mongod system_u:object_r:mongod_var_lib_t:s0 /var/lib/mongodb