我该如何制造$EUID与$UID不同的情况?(涉及IT技术)

3
这可能是个愚蠢的问题,但我没有正确理解EUID和UID。
真实ID和有效ID的描述很清楚,我懂了。根据我在Google和电子书中找到的信息,在使用su、sudo或SUID时,有效ID应该改变。此外,据我所知,在Bash中,UID应该包含真实ID,而EUID应该包含有效ID。
我的假设是,当我使用su、sudo或SUID时,EUID和UID应该是不同的,但每次我尝试echo $EUID和echo $UID时,两者的结果都相同。
另外,我尝试了id -u和id -r -u,它们始终是相同的。
有人能向我解释一下,在什么情况下以及何时确切地EUID和UID是不同的吗?
1个回答

5

默认情况下,Bash会降低权限。有一种特殊的特权模式set -p

# copy bash executable
$ sudo cp /usr/bin/bash ./bash
# set the suid mode
$ chmod +s ./bash
$ ls -l bash
-rwsr-sr-x 1 root root 903504 05-29 23:48 ./bash*
# run it
$ ./bash -p -c 'echo $UID $EUID'
1000 0

2
此外,由于sudosu都设置了setuid位,因此它们都以euid=0和uid=youruser启动。但是,在运行命令之前,它们会将uid和euid都设置为目标用户,因此您无法使用它们。解决方法是创建一个支持(非标准)EUID / UID变量且不会或可以被设置为不会出于安全原因而降低权限的shell的suid副本。这可以是kshzshbash -p - that other guy
你好 @thatotherguy,什么是“shell的SUID副本”?谢谢。 - Pedro A
一个设置了suid位的shell二进制文件,就像在这个答案示例中创建的那样。 - that other guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接