当 $EUID 与 $UID 不同时,如何产生这种情况?

RK *_* KH 3 linux uuid sh

这可能是一个愚蠢的问题,但我不理解EUID也不UID正确。
真实身份证件和有效身份证件的描述很清楚,我明白了。根据我在 Google 和电子书中发现的内容,当使用susudo或 时SUID,有效 ID 应该更改。另外,据我了解UID,Bash 应该包含真实 ID 并且EUID应该包含有效 ID。

当我使用,EUID或者但每当我尝试并且两者的结果都是相同的时,我的假设是并且应该是不同的。 而且,我一次又一次地尝试,它们总是一样的。UIDsusudoSUIDecho $EUIDecho $UID
id -uid -r -u

有人可以向我解释一下到底在什么时候、什么情况$EUID$UID有不同吗?

Kam*_*Cuk 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
Run Code Online (Sandbox Code Playgroud)

  • 除此之外,由于 `sudo` 和 `su` 都设置了 setuid 位,因此它们都以 euid=0 和 uid=youruser 开头。但是,他们在运行命令之前将 uid 和 euid 设置为目标用户,因此您无法使用它们。方法是创建 shell 的 suid 副本,A. 支持(非标准)EUID/UID 变量,而 B. 出于安全原因不放弃或可以不放弃特权。这可以是“ksh”、“zsh”或“bash -p”。 (2认同)