我刚刚在 Ubuntu 上安装了 mongodb 版本 3.0.3。我编辑了conf文件,将默认数据目录更改为“/home/user/mongodb”,并授予它以下权限:
drwxr-xr-x 4 mongodb mongodb 4096 May 29 23:26 mongodb
我没有更改conf 文件中的任何其他内容。当我尝试启动 mongod 服务时
sudo service mongod start
并通过 mongo 命令连接到 shell,出现以下错误
MongoDB shell version: 3.0.3
connecting to: test
2015-05-29T23:58:49.450+0200 W NETWORK Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2015-05-29T23:58:49.452+0200 E QUERY Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
at connect (src/mongo/shell/mongo.js:179:14)
at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed
每次我尝试启动服务器时,日志文件都会这样说:
2015-05-30T00:01:02.552+0200 I CONTROL ***** SERVER RESTARTED *****
2015-05-30T00:01:02.581+0200 I STORAGE [initandlisten] exception in initAndListen std::exception: boost::filesystem::status: Permission denied: "/home/user/mongodb/storage.bson", terminating
2015-05-30T00:01:02.581+0200 I CONTROL [initandlisten] dbexit: rc: 100
据我所知,权限是正确的。可能是什么问题呢?
答案1
默认情况下,用户主目录只能由其所有者读取、写入和列出,因此其他用户(root 用户除外)无法列出其他用户主文件夹的内容。因此,您需要确保 mongodb 用户有权访问新提供的目录。你可以使用类似命令来检查
namei -m /home/user/mongodb
输出示例
f: /home/scantlight/mongodb
dr-xr-xr-x /
drwxr-xr-x home
drwx------ scantlight
drwxr-xr-x mongodb
如你所见,我的主文件夹有读写我的权限,所有者...其他用户没有权限,因此我的主文件夹的内容不能被其他用户(root 除外)列出
当然,您不想向主目录上的其他用户授予写入或读取权限,但您希望他们可以访问目标文件夹。这是可以使用 x 标志的地方。当在文件上设置 x 标志时,意味着该文件可以被执行,因此它被称为执行标志...但是当在文件夹上设置此标志并且 r(读)或 w(写)标志均未设置时。这意味着同一组中的其他用户可以通过此文件夹到达更深的文件夹。
所以要确保mongodb用户能够访问、读取和写入/home/用户/mongodb文件夹...您的主文件夹应该为所有其他用户设置可执行标志(x 标志)。
chmod -R o+x /home/user/mongodb
之后,之前的输出示例应该如下所示
f: /home/scantlight/mongodb
dr-xr-xr-x /
drwxr-xr-x home
drwx-----x scantlight
drwxr-xr-x mongodb
注意所有其他用户的 x 权限...如果这没有帮助:)...只需检查里面的文件权限/home/用户/mongodb文件夹中包含的文件的权限可能存在问题?