授予管理其他用户进程的权限

授予管理其他用户进程的权限

我有用户 A 和用户 B 启动进程:

userA@server:~$ ./some_command.sh &
[1] 30889

然后我有一个以用户 C 身份运行的 Web 应用程序来管理这些进程(暂停、恢复、终止和终止)。

我如何授权用户 C 执行此操作?出于安全考虑,我希望避免授予用户 C root 权限。

我完全控制用户 C。一种可能性是将用户 ID 更改为与用户 A 相同,但那么用户 B 怎么办?

更新:进程管理是由第三方模块执行的,因此如果不进行重大重写就无法应用 sudo。

答案1

让用户共享一个 uid 是一种非常不受欢迎的做法。

建议:

  • 查看sudo命令。这是“如何以其他用户身份运行命令”的解决方案:在文件中指定条目,/etc/sudoers指示哪些用户(或组等)可以以不同用户身份运行命令,以及在什么情况下可以运行。其配置也可以放入 LDAP 目录中。
  • 如果这是生产环境(或你计划最终放置在生产环境中的东西),那么以下做法是最佳做法:用户A/用户B成为“应用程序用户”。这是一个帐户,其名称很容易传达其预期用途(神谕网络应用程序等),而不是任何用户认为的“他们的”个人帐户。理想情况下,没有人能够以该用户身份登录(即禁用密码),如果您希望用户获得该用户的 shell 访问权限,则应通过sudo抽象来实现。(即允许用户执行sudo su - oracle以获取神谕shell) 这会强制用户在成为应用程序用户之前以自己的身份登录,并留下更好的审计跟踪。
  • 如果这两种解决方案都不可行,您可能需要遵循 @Hex 的建议,使用终端多路复用器(如screen或 )tmux,尽管仍然建议在登录和共享应用程序帐户之间进行一些抽象。除非这些进程有某种形式的终端交互

答案2

  1. 将用户 A/B 运行的可执行文件的 UID 设置为用户 C。

  2. 利润

答案3

我建议使用 Monit 和 sudo 来控制作业......

Monit 将处理应用程序的启动/停止/状态。

具有 Monit 权限的 Sudo 将为您提供协作方面。

看:允许用户运行特定的监控操作

答案4

最好使用用户 A/用户 B 下的代理进程读取每个 PID 的控制文件。

some_command.sh

thecommand &
CTL=/var/run/%1.ctl
echo %1 > $CTL
while read -n 1 cmd; do
    case $cmd in
        k)
            kill %1
            exit $?
            ;;
        s)
            kill -TSTP %1
            ;;
        ...
done < $CTL

您可以让工作进程读取控制文件......但它们将无法继续,对吗?

相关内容