如何创建某些命令的 setuid 副本?

如何创建某些命令的 setuid 副本?

我正在读这本书How Linux Works,但有一点我不明白:

在普通的 Linux 系统上,大多数进程具有相同的effective user IDreal user ID。默认情况下,ps其他系统诊断程序会显示effective user ID。要查看系统上的有效用户 ID 和实际用户 ID,请尝试以下操作,但如果您发现系统上所有进程的两个用户 ID 列都相同,请不要感到惊讶:

$ ps -eo pid,euser,ruser,comm

要创建异常以便您可以看到列中的不同值,请尝试通过创建该sleep 命令的 setuid 副本、运行该副本几秒钟,然后ps在副本终止之前在另一个窗口中运行前面的命令来进行实验。

作者说:try experimenting by creating a setuid copy of ...,但是如何创建该sleep命令的 setuid 副本?谢谢。

答案1

首先在可以运行它的位置创建一个副本(即挂载的文件系统noexec不符合条件)。这是/tmp/我的示例。

sudo cp /bin/sleep /tmp/

(我过去总是从一开始sudo就确保副本属于;这为我以后节省了时间)。rootsudo chown …以下命令为文件设置 setuid 位

sudo chmod u+s /tmp/sleep

现在以普通用户身份在后台运行它:

/tmp/sleep 300 &

然后检查输出ps

ps -eo pid,euser,ruser,comm | grep sleep

结果是euser指向文件所有者,ruser指向执行的用户。

注意:使用 setuid 时,请记住它不适用于脚本

相关内容