有两种情况
- 您想在执行setuid程序时暂时放弃root特权
- 您想在执行setuid程序时永久放弃root特权…
- 您可以通过将euid设置为实际用户ID然后将uid更改为所需的任何内容来临时执行此操作。稍后,当您需要root特权时,可以将setuid设置为root,有效的userid将更改回root。这是因为保存的用户标识未更改。
- 您可以通过立即将uid更改为较少特权的用户ID来永久放弃特权。此后,无论如何您都无法获取root特权。
情况1:
setuid程序开始执行后
1.seteuid(600);2.setuid(1000);3.setuid(0);
在这种情况下,可以再次获得root特权。
+----+------+------------+ | uid|euid |saved-uid | |----|------|------------| 1.|1000| 0 | 0 | 2.|1000| 600 | 0 | 3.|1000| 1000 | 0 | 4.|1000| 0 | 0 | | | | | +------------------------+
情况2:
setuid程序开始执行后 ,
1.setuid(1000);2.setuid(0); +----+------+------------+ | uid|euid |saved-uid | |----|------|------------| 1.|1000|0 | 0 | 2.|1000|1000 | 1000 | | | | | +------------------------+
在这种情况下,您无法取回root特权。可以通过以下命令进行验证,
cat / proc / PROCID / task / PROCID /状态| 减
Uid: 1000 0 0 0Gid: 1000 0 0 0
此命令将显示一个Uid和Gid,它将具有4个字段(前三个字段是我们关注的字段)。像上面的东西
这三个字段代表uid,euid和saveed-user-id。您可以在setuid程序中引入一个暂停(来自用户的输入),并检查
cat/proc/PROCID/task/PROCID/status | less命令的每个步骤。在每个步骤中,您都可以检查保存的uid是否如前所述进行更改。
如果您的euid是root用户,并且更改了uid,则特权将被永久删除。如果有效的用户ID不是root用户,则保存的用户ID不会被触及,您可以在程序中随时重新获得root特权。



