我有一个具有以下权限的二进制文件。
-rwsr-xr-x. 1 root root
因此,当某个用户 X 尝试执行该二进制文件时,它将以 root 身份运行。此外,用户可以使用
kill -9
任何方式从其 ID 中终止此进程(以 root 身份运行),以防止用户终止该进程。
答案1
用户能够终止该进程是因为该进程是由 启动的,Effective UID
但root
本身却Real UID
由 启动。其他用户将无法终止该进程。
您可以尝试为以下项设置 SETUID 和 SETGID 位id
:
# chmod u+s,g+s $(which id)
然后比较输出:
id
和
sudo id
你会看到差异。
您还可以尝试使用 来终止一个已设置 SETUID 和 SETGID 位并由当前用户启动的进程sudo -u SOMEOTHERUSER
。您会发现它无法被终止。
我猜 SETUID 和 SETGID 位的目的不是让 root 拥有进程,而只是提升特权,但让进程归执行用户所有。而且我怀疑无论你是否愿意,你都无法改变它(除非破解内核之类的?)。