有没有办法创建一个可以被 Linux 中的任何人终止的进程?

有没有办法创建一个可以被 Linux 中的任何人终止的进程?

例如,我想在 Ubuntu 服务器上秘密地在后台运行一个进程,但只要除我之外的任何人登录服务器,该进程就必须由该用户终止。是否可以创建这样的进程?(我有帐户sudo并且可以修改/etc/bash.bashrc

谢谢!

答案1

请注意,以下内容可能会以各种方式危害您的系统安全。

创建一个脚本来负责终止您的进程(我们称之为进程 P)。然后授予所有用户在 sudoers 中运行此脚本的权限。最后在 中添加对此脚本的适当调用,并使用 sudo /etc/bashrc

举个例子,假设您知道您的进程是从哪里启动的/usr/local/sbin/myproc,并且您想在有人登录后立即终止所有这些进程,因此您将使用简单的 grep 和 kill 策略来终止它们。

因此,首先将以下内容放入/usr/local/sbin/killmyprocs

#!/bin/sh

ps auxw|grep [m]yproc|awk '{ print $2 }'|xargs kill -TERM > /dev/null 2>&1

# end of file.

如果您真的继续并实施此操作,您可能希望做一些稍微复杂的事情。因此,请确保创建一个脚本,该脚本可以捕获适当的信号并以安全的方式执行操作。

/etc/sudoers其次,通过添加以下内容授予所有用户运行此脚本的权限:

ALL ALL = (root) NOPASSWD: /usr/local/sbin/killmyprocs

第三步,也是最后一步,是在脚本中添加 sudo 调用/etc/bashrc

[ "`id -n -u`" != "<my_username>" ] && sudo /usr/local/sbin/killmyprocs

用您自己的帐户替换,以避免在您自己登录时终止您的“秘密”进程。

总结一下:1)创建一个不产生任何输出但会终止您想要终止的进程的脚本,2)/etc/sudoers为系统上的每个用户添加适当的条目,以便能够以 root 身份执行该脚本,3)通过 sudo 向您的脚本添加调用/etc/bashrc(或/etc/profile)。

需要注意的是:(/etc/bashrc或者/etc/profile说)只为交互式 shell 获取源代码。这意味着用户可以轻松地执行 ssh yourhost 'ps auxw' 并从进程表中找到您的进程,它不会被上面介绍的机制杀死,因为没有参考 shell 初始化文件。有一种解决方法,ForceCommand在 'sshd_config' 中使用,但这留给读者练习。

最后,我想再次提醒大家,这样做显然存在安全隐患。这听起来很像是试图在你没有完全访问权限的系统上安装后门,但这并不是我真正关心的问题(如果你不得不在超级用户上问这些问题,你很快就会被发现)。

答案2

你的意思是什么“该进程必须被该用户终止”?

A) 您想让用户终止他/她不拥有的进程吗?

编写一个脚本来终止该进程,然后设置 setuid chmod u+s(除非您知道自己在做什么,否则这可能是一个巨大的安全漏洞。)

或者

B) 您希望该进程注意到用户登录并自行终止?

嗯,这就是你要做的。

相关内容