Ubuntu
啟動獨角獸時不允許操作
我主要按照本指南在 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。在大多數(如果不是全部)情況下都是如此,因為任何服務都需要以下一項或多項來完成其工作:
- 在 < 1024 的埠上綁定/偵聽。
- 讀取非 root 使用者無法讀取的文件。
- 寫入非 root 使用者不可寫的文件。
- 可能還有更多(我不記得了)。