Ubuntu

啟動獨角獸時不允許操作

  • April 13, 2018

我主要按照本指南在 Ubuntu (Amazon EC2) 上創建了 nginx/unicorn/capistrato 設置。我想一切都設置好了,但是當我啟動 Unicorn 時,我在日誌中得到(很多)這個錯誤:

E, [2012-09-08T08:57:20.658092 #12356] ERROR -- : Operation not permitted (Errno::EPERM)
/home/deployer/apps/bridgekalenderen.no/shared/bundle/ruby/1.9.1/gems/unicorn-4.3.1/lib/unicorn/worker.rb:82:in `initgroups'

我看到它與使用者的權限有關,但我無法弄清楚我遺漏了什麼。如果我使用 sudo(或者,真的是 rvmsudo)啟動伺服器,它會很好地啟動。

使用者具有 sudo 功能,我已經對應用程序進行了多次 chmod,所以那裡的文件權限應該沒問題。/tmp 中的獨角獸套接字歸部署者使用者所有,所以這也不應該是問題。

有人知道在哪裡看嗎?

更新:

經過一番探勘,我發現它歸結為Process.initgroups拋出 EPERM 的呼叫。我已經在 irb 中驗證了這一點。我無法弄清楚導致錯誤的原因。使用者可以閱讀/etc/group

我終於弄明白了。問題是部署者使用者的主要組是錯誤的。它應該是“員工”,但應該是“部署者”。這意味著獨角獸試圖將新工作程序的所有權移交給它應該使用的組,但只有 root 可以這樣做。

以防萬一其他人需要知道,我通過如下編輯更改了主要組/etc/passwd

deployer:x:1002:50:,,,:/home/deployer:/bin/bash

‘50’ 是 ‘staff’ 的 gid。一開始是1002。要獲取“員工”組的 gid,請執行以下操作:

cat /etc/group | grep staff

它會說一些類似的東西:

staff:x:50:<comma separated list of users in this group>

gid 是“x”之後的數字。

如果我理解你,你試圖在沒有sudo普通使用者的情況下啟動服務。這將不起作用,並且會給您帶來錯誤,例如您收到的錯誤Operation not allowed。在大多數(如果不是全部)情況下都是如此,因為任何服務都需要以下一項或多項來完成其工作:

  1. 在 < 1024 的埠上綁定/偵聽。
  2. 讀取非 root 使用者無法讀取的文件。
  3. 寫入非 root 使用者不可寫的文件。
  4. 可能還有更多(我不記得了)。

引用自:https://serverfault.com/questions/425529