如何允许非 root 用户执行的进程读取特定的 root 拥有的文件?
我在 Linux/Ubuntu 下运行 node.js。我不想以 root 权限运行我的进程,但必须只读访问几个 root 拥有的文件。
我目前无法读取这些文件(证书密钥文件),除非我通过sudo node ...
. 除了这些文件之外,该进程表现良好,能够在其自己的应用程序用户 ID 下启动时成功运行。
我希望我可以做一些事情,比如为文件设置一个符号链接,这些文件设置权限以允许应用程序用户 id 对它们进行读取授权。由于证书文件是由一个单独的进程自动维护和更新的,我宁愿不触摸或复制它们。
...但是也欢迎“不要以 root 身份运行”类别中的任何其他类型的解决方案。
您可以添加一个新组即
nodeJS
组,将用户添加到组而不是更改文件的组,最后更改组读取文件的权限。这实际上可以通过访问控制列表来完成。这样,即使更改了文件、添加了新文件或更改了文件的权限,您仍然可以使用 Node.js 用户访问它们。只需在证书的父目录上执行以下操作:
代替
nodeJSUser
实际用户。该-m
选项的第一部分将设置当前 ACL,逗号后的所有内容都将为新文件设置默认值。-R
使其递归。请注意,如果证书存储在没有执行访问权限的根目录下(例如
chmod 700
),那么这将不起作用。例如,如果证书存储在/root/certs
,因为/root
是 chmod700
,则其他用户无法访问该目录中的任何内容,即使他们对文件本身具有权限。为此,您可以将此目录绑定到另一个目录并从那里访问它。