Mongodb

如何在 Linux 中以非 root 使用者身份執行 MongoDB?

  • March 16, 2018

我可以將 MongoDB 啟動為$sudo service mongod start. 當我開始時沒有sudo它給我這個錯誤:

/etc/init.d/mongod: line 58: ulimit: open files: cannot modify limit: Operation not permitted
/etc/init.d/mongod: line 60: ulimit: max user processes: cannot modify limit: Operation not permitted
Starting mongod: runuser: may not be used by non-root users
  1. 現在,我已將所有我能找到的 mongo 目錄上的所有權更改為非 root 使用者,即/var/lib/mongo, var/log/mongodb, data/db,var/run/mongodb
$sudo chown -R nonRootUser:nonRootUser [directory]
  1. 我刪除了mongod.lock文件

3)我也--repair跑過

它仍然給我同樣的錯誤。

我也試過

$mongod --fork --logpath /var/log/mongodb.log

about to fork child process, waiting until server is ready for connections.
forked process: 18566
ERROR: child process failed, exited with error number 1

mongod.log 文件說:

2016-03-17T15:03:49.053+0000 I NETWORK  [initandlisten] waiting for connections on port 27017
2016-03-17T15:03:54.144+0000 I CONTROL  [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends

它是亞馬遜 Linux。我可以像 $mongod 一樣啟動它,但我想將它作為守護程序執行,以便它連續執行。

nonRootUser 是我在 ec2-user 之外創建的一個新使用者。如果您不是 ec2 使用者,可能存在一些與執行守護程序相關的配置問題?

更新:將所有內容的所有權更改為 ec2-user,仍然得到與以前完全相同的錯誤。

您提到您使用rpm安裝程序在 Amazon Linux AMI 上安裝 MongoDB。執行此操作時,將mongod在系統上創建使用者,並且所有相應的文件都由mongod使用者創建和擁有。啟動由 安裝的 MongoDB 時rpm,該命令必須由 執行root或使用 執行sudo。這是因為 init 腳本必須執行一個更改使用者命令,以便該mongod程序可以作為mongod使用者的子程序派生。

未能使用rootsudo啟動服務會導致您在上面引用的錯誤。

/etc/init.d/mongod: line 58: ulimit: open files: cannot modify limit: Operation not permitted
/etc/init.d/mongod: line 60: ulimit: max user processes: cannot modify limit: Operation not permitted
Starting mongod: runuser: may not be used by non-root users

因此,為了作為服務執行,您必須使用sudoor rootmongod除了授予使用者一個 shell,為其分配一個密碼,以該使用者身份登錄,然後執行服務之外,沒有簡單的方法可以解決這個問題。這仍然會導致嘗試修改的錯誤,ulimits通常不建議這樣做。

要在不將 MongoDB 作為服務執行的情況下啟動 MongoDB,因為您使用了rpm,所以mongod二進製文件應該在您的路徑中,所以以下應該可以工作

mongod --dbpath /path/to/data --logpath /path/to/mongod.log --fork

請注意,這樣做會以目前登錄的使用者身份執行它,這意味著所有數據文件都mongod.log必須可由該使用者寫入。理想情況下,這些文件應歸該使用者所有。

更改目錄和文件的權限後,不要忘記註銷並重新登錄。

我仍然無法執行它

$ service mongod start

它只能以 root 身份執行。

但或者,您可以像這樣將其作為守護程序執行:

$ mongod --fork --logpath to/logpath

為了安全起見,我為 logpath 創建了 data/log 目錄。是的,除了 Amazon Linux 上的 ec2-user 之外,您還可以創建其他使用者,他們也可以執行 mongodb

引用自:https://dba.stackexchange.com/questions/132544