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

我有启动进程的userA和userB:

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

然后我有一个作为用户C运行的Web应用程序,pipe理这些进程(挂起,恢复,终止和查杀)。

我怎么能给userC的权限来做到这一点? 为了安全,我想避免给userC root权限。

我完全控制userC。 一种可能是将用户ID更改为userA,但那么userB呢?

更新:进程pipe理与第三方模块执行,所以不能申请sudo没有重大的重写。

让用户分享一个uid是一个非常皱眉的实践。

build议:

  • 看看sudo命令。 这是“如何以其他用户身份运行命令”的goto解决scheme:您可以在/etc/sudoers文件中指定允许哪些用户(或组等)作为不同用户运行命令的条目,并且什么情况。 其configuration也可以放在LDAP目录中。
  • 如果这是一个生产环境(或者您计划最终放置在生产环境中的东西),则认为userA / userB是“应用程序用户”的最佳实践。 这是一个名称很容易传达其预期目的( 甲骨文 ,networking应用程序等),而不是任何用户认为“他们的”个人帐户的帐户。 理想情况下,没有人应该能够以该用户身份login(即禁用密码),如果您希望用户获得该用户的shell访问权限,则应该通过sudo abtraction完成。 (即允许用户执行sudo su - oracle来获得一个oracle shell的angular色),这就迫使用户在成为应用程序用户之前以自己的身份login,并留下更好的审计线索。
  • 如果这些解决scheme都不可行,那么您可能希望使用@ Hex的build议,即使用terminal多路复用器(如screentmux ,但仍build议使用login和共享应用程序帐户之间的一些抽象。 除非进程有某种types的terminal交互,否则你应该尽量避免这种情况。
  1. 将由用户A / B运行的可执行文件设置为用户C.

  2. 利润

我会build议Monit和sudo组合工作控制…

Monit将处理应用程序的开始/停止/状态。

拥有Monit权利的Sudo会给你协作的方面。

请参阅: 允许用户运行特定的监视操作

可能最好使用userA / userB下的代理进程读取每个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 

你可以让工作进程读取控制文件…但是,他们不会继续,他们会。