我正在尝试使用默认值运行mongod,因此它使用的是/data/db
目录。我更改了数据目录的所有者
sudo chown mongodb:mongodb /data -R
像许多其他人一样,我在第一次运行mongod
时收到以下错误:
2017-04-11T12:32:25.932-0500 I STORAGE [initandlisten] exception in initAndListen: 28596 Unable to determine status of lock file in the data directory /data/db: boost::filesystem::status: Permission denied: "/data/db/mongod.lock", terminating
这是有道理的,但没有意义的是我实际运行它的唯一方法mongod
是如果我:
chmod 777 /data -R
如果 i
chmod 666 /data -R
我得到同样的错误。既然这应该是数据目录,为什么需要执行权限。
我将我的用户添加到MongoDB组
sudo usermod -g mongodb myuser
然后我尝试了
chmod 770 /data -R
即使我是mongodb
组的成员,它仍然失败。
我为什么要搞砸这一切?因为我想适当地保护数据目录,并且不想以 777 安全性运行。
所以问题是:
- 为什么需要执行权限
- 为什么当我是 mongodb 组的成员时,我无法运行它?
目录需要具有执行权限,但目录中的文件不需要执行权限。 此外,正如 @franklinsijo 所指出的,-R 应该是 chmod 的第一个参数。
为了解决问题,我会执行以下操作:
$ sudo chmod -R 770 /data
$ sudo find /data -type f -exec chmod 660 {} ;
这将首先授予/data 执行权限下的所有内容,然后将所有正常文件返回到仅具有读取和写入,但不执行。