我正在读这本书How Linux Works
,但有一点我不明白:
在普通的 Linux 系统上,大多数进程具有相同的
effective user ID
和real 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
就确保副本属于;这为我以后节省了时间)。root
sudo chown …
以下命令为文件设置 setuid 位:
sudo chmod u+s /tmp/sleep
现在以普通用户身份在后台运行它:
/tmp/sleep 300 &
然后检查输出ps
:
ps -eo pid,euser,ruser,comm | grep sleep
结果是euser
指向文件所有者,ruser
指向执行的用户。
注意:使用 setuid 时,请记住它不适用于脚本。