我有启动进程的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目录中。 sudo abtraction完成。 (即允许用户执行sudo su - oracle来获得一个oracle shell的angular色),这就迫使用户在成为应用程序用户之前以自己的身份login,并留下更好的审计线索。 screen或tmux ,但仍build议使用login和共享应用程序帐户之间的一些抽象。 除非进程有某种types的terminal交互,否则你应该尽量避免这种情况。 将由用户A / B运行的可执行文件设置为用户C.
?
利润
我会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
你可以让工作进程读取控制文件…但是,他们不会继续,他们会。