Ale*_*lke 6 setuid systemd services capabilities
我有一项开始使用 systemd 的服务。服务用户和组更改为非特权用户。
[Service]
...
User=regular_user
Group=regular_user
...
Run Code Online (Sandbox Code Playgroud)
在某些时候,服务需要启动另一个进程,该进程有望成为 root。另一个进程设置了它的 's' 位,它setuid()
用来成为 root。
如果我启动它,这个过程就可以正常工作。然而,不知何故,当服务尝试启动它时,该setuid()
函数返回一个错误:
不允许操作。
我已经看到了一些有关功能的选项,但我不知道是否需要使用这些选项来使setuid()
功能在我的服务中正常工作。我尝试了一些东西,到目前为止没有任何帮助。
例如,我试过:
AmbientCapabilities=CAP_SETGID CAP_SETUID
SecureBits=keep-caps
Run Code Online (Sandbox Code Playgroud)
虽然这个过程似乎不再产生错误,但它仍然没有做它应该做的事情(同样,如果我在我的控制台中运行那个过程,它工作得很好!)
我实际上找到了NoNewPrivileges=选项,它允许我的进程子进程使用setuid()
.
从他们的说法来看,这当然不是一个可以轻易选择使用的选项。但是,默认值为:不允许该setuid()
功能。(他们所说的“提升特权”是什么意思。)
对我有用的是这样做:
NoNewPrivileges=false
Run Code Online (Sandbox Code Playgroud)
请注意,文档没有明确说明此选项的默认值在 Ubuntu 16.04 上为 true。这可能因操作系统而异。
归档时间: |
|
查看次数: |
1233 次 |
最近记录: |