Upstart - setuid 在启动后节中

Upstart - setuid 在启动后节中

我有这个暴发户脚本看起来有点像这样:

setuid userA
setgid userB

script
    # ... bunch of stuff run as userA
end script

post-start script
    # ... command run as userA

    # ... the following command needs to be run as root
    setuid root                  # <---- this is not legal syntax
    service myservice restart    # <---- I need to run this as root
end script

所以,我浏览了文档,发现 setuid 在内部不起作用post-start,并且userA不在 sudoer 列表中,所以我不能这样做sudo service myservice restart。事实上,在最理想的情况下,我实际上应该myservice以另一个用户的身份运行。

我该如何解决这个问题?我一整天都在挠头,没有任何解决方案。


正如答案所建议的,一种方法是创建其他当上一个 upstart 脚本运行时运行的 upstart 作业。因此,service myservice restart我们不是在 jobA 中创建它,而是在 jobA 运行时创建/etc/init/myservice-hook.conf并触发它(根据答案)。

在我这边,我设法通过删除两者来解决问题setuidsetgid以便脚本以 root 身份运行,然后有选择地放入sudo -u userA <command>脚本中。我将使用提供的答案,因为我认为它可以更好地隔离关注点。

答案1

一种选择是创建另一项工作,如下所示:

start on started jobA

task

exec service myservice restart

然后在启动后脚本中删除 setuid root 位及其下方的内容。

相关内容