执行二进制文件时权限被拒绝

执行二进制文件时权限被拒绝

我用过这些指示在我的 OS X 机器上安装 mongodb。不过,我没有使文件归root所有,我使用了本地用户(markdsievers),并安装到/usr/local/mongodbusr/local/mongodb_data。我已将所有文件和子目录 chmod 和 chown 为rwxrwxr-x markdsievers staff.

作为用户,markdsievers我可以使用以下命令启动数据库而不会出现错误:

$ sudo mongod --dbpath=/usr/local/mongodb_data

但是,如果我这样开始:

$ mongod --dbpath=/usr/local/mongodb_data/

我得到:

Unable to create / open lock file for lockfilepath: /usr/local/mongodb_data/mongod.lock errno:13 Permission denied

我在这里缺少什么?

答案1

首先,顺便说一句:将 mongo 数据存储在其中/usr/local/mongodb_data似乎有点奇怪;大多数幕后存储位于/var/,或者,对于自行安装的应用程序,位于/var/local/。请参阅hier(7)文件系统层次结构标准更多细节。 (FHS 的命名是错误的:因为它是描述性的,而不是规定性的,所以它是不是一个标准。但值得一读。)

您的mongodb.lock文件归您所有,root因为您执行了:

sudo mongod --dbpath=/usr/local/mongodb_data

sudo(8)以不同的方式执行程序有效用户id(有关详细信息seteuid(2),请参阅setreuid(2))。因为您没有指定任何其他用户的选项-u,所以sudo(8)默认为该root帐户。因此,您的锁定文件是使用root所有者和组创建的。 (比较sudo id一下id看看有什么变化。)

但奇怪的是,当您停止数据库时,锁定文件应该已被删除mongod。确保正确停止它——不仅是为了删除锁定文件——而且还为了让您知道数据已正确保存到磁盘。

答案2

做一个ls -l /usr/local/mongodb_data/mongod.lock

我敢打赌,既然您首先以用户“root”身份运行,那么该文件就已经存在,并且归 root 所有。删除它,我打赌它可以作为用户“markdsievers”工作。

相关内容