Node.js
授予非root使用者對root擁有文件的讀取權限?
如何允許非 root 使用者執行的程序讀取特定的 root 擁有的文件?
我在 Linux/Ubuntu 下執行 node.js。我不想以 root 權限執行我的程序,但必須只讀訪問幾個 root 擁有的文件。
我目前無法讀取這些文件(證書密鑰文件),除非我通過
sudo node ...
. 除了這些文件之外,該程序表現良好,能夠在其自己的應用程序使用者 ID 下啟動時成功執行。我希望我可以做一些事情,比如為文件設置一個符號連結,這些文件設置權限以允許應用程序使用者 id 對它們進行讀取授權。由於證書文件是由一個單獨的程序自動維護和更新的,我寧願不觸摸或複制它們。
…但是也歡迎“不要以 root 身份執行”類別中的任何其他類型的解決方案。
您可以添加一個新組即
nodeJS
組,將使用者添加到組而不是更改文件的組,最後更改組讀取文件的權限。groupadd nodeJS usermod userName -g nodeJS link -s rootOwnedFile linkToRootOwnedFile chgrp nodeJS linkToRootOwnedFile chmod g+r linkToRootOwneFile
這實際上可以通過訪問控制列表來完成。這樣,即使更改了文件、添加了新文件或更改了文件的權限,您仍然可以使用 Node.js 使用者訪問它們。只需在證書的父目錄上執行以下操作:
setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /path/to/certificates
代替
nodeJSUser
實際使用者。該-m
選項的第一部分將設置目前 ACL,逗號後的所有內容都將為新文件設置預設值。-R
使其遞歸。請注意,如果證書儲存在沒有執行訪問權限的根目錄下(例如
chmod 700
),那麼這將不起作用。例如,如果證書儲存在/root/certs
,因為/root
是 chmod700
,則其他使用者無法訪問該目錄中的任何內容,即使他們對文件本身俱有權限。為此,您可以將此目錄綁定到另一個目錄並從那裡訪問它。mkdir /certs mount --bind /certs /root/certs setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /certs