我正在做一个 upstart 作业,我需要以另一个用户的身份运行一个可执行文件。没有什么特别的,比如su
提供,也没有随之而来的混乱的 SELinux 上下文。快速的互联网搜索建议runuser
完成su
这项任务,但runuser
在 Ubuntu 13.10 上找不到。
我应该在 Ubuntu 上使用吗su
?它是否足够智能,可以避免完全授权?生成的作业是否可以移植到其他发行版,还是会遇到 SELinux 问题?
最终,在新创工作中改变用户的最佳方法是什么?
更新
显然,upstart >= 1.4 支持setuid
和setgid
,但它们的局限性在于它们会影响所有作业前*/后*脚本,而不仅仅是主脚本/执行。如果能有一种方法正确地将单个命令交给另一个用户,那就太好了。我考虑过使用stop-start-daemon
,但它与 upstart 重叠太多,可能会导致expect
行为异常。
答案1
有一个错误报告关于这个问题。
建议解决此限制的方法是创建单独的作业来处理以 root 身份运行时的前置/后置条件。您需要正确设置启动/停止条件:模拟前置节 (pre-job.conf) 的作业必须在当前为您的作业 (main-job.conf) 定义的条件下启动,当前作业必须在前置作业启动时运行,模拟后置节 (post-job.conf) 的作业必须在主作业停止时启动。