유효한 사용자 ID와 실제 사용자 ID: 내 예에서 루트를 유효한 ID로 반환하지 않는 이유는 무엇입니까?

유효한 사용자 ID와 실제 사용자 ID: 내 예에서 루트를 유효한 ID로 반환하지 않는 이유는 무엇입니까?

실제 사용자 ID와 유효 사용자 ID의 차이점에 대한 기사를 읽었습니다. 얻은 줄 알았는데 질문이 있습니다. 제가 이해한 바에 따르면 아래 예에서는 명령이 유효한 사용자로 $ id -un반환되어야 합니다 .rootjack

$ sudo cp /usr/bin/bash /usr/bin/bashroot
$ sudo chmod u+s /usr/bin/bashroot
$ ls -l /usr/bin/bashroot 
-rwsr-xr-x 1 root root 1234376 oct.  25 15:42 /usr/bin/bashroot

$ bashroot

$ id -un
jack

$ id -unr
jack

bashroot은 setuid이고 속해 있으므로 내 이해로는 대신 반환될 것으로 root예상했습니다 .$ id -unrootjack

내가 무엇을 놓치고 있나요?

[편집] 더 구체적으로 말하면 둘 다 setuid를 가지고 있는데 왜 /usr/bin/bashroot그렇게 행동하지 않습니까?/usr/bin/passwd

$ ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 63960 févr.  7  2020 /usr/bin/passwd

$ ls -l /usr/bin/bashroot 
-rwsr-xr-x 1 root root 1234376 oct.  25 15:42 /usr/bin/bashroot

$ passwd
Changing password for jack.
Current password: 

그런 다음 다른 터미널에서 다음을 수행합니다.

$ bashroot

$ ps -a | grep passwd
1682362 pts/3    00:00:00 passwd
$ ps -eo pid,ruid,euid | grep 1682362
1682362  1000     0

$ ps -a | grep bashroot
1682405 pts/4    00:00:00 bashroot
$ ps -eo pid,ruid,euid | grep 1682405
1682405  1000  1000

유효 UID는 passwd( root0)이며 예상됩니다. 유효 UID가 1000 대신 1000 bashroot( jack) 인 이유는 무엇입니까 root?

[편집 2: 운영 체제]

$ cat /etc/debian_version 
11.6
$ uname -a
Linux d11work 5.10.0-20-amd64 #1 SMP Debian 5.10.158-2 (2022-12-13) x86_64 GNU/Linux
$ bash --version
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)

[편집 3] 참조스티븐 키트의 답변:

$ bashroot -p

# id -un
root

# id -unr
jack 

답변1

Bash는 이를 강제합니다: setuid이지만 실행 중이 아닌 경우특권 모드에서(find -p), 유효 사용자 ID를 실제 사용자 ID로 설정합니다.

쉘 시작 시 유효 사용자(그룹) ID가 실제 사용자(그룹) ID와 동일하지 않고 -p이 옵션이 제공되지 않으면 이러한 작업이 수행되고 유효 사용자(그룹) ID가 실제 사용자(그룹) ID로 설정됩니다. 사용자 ID. 시작 시 이 옵션을 제공 하면 -p유효 사용자 ID가 재설정되지 않습니다. 이 옵션을 끄면 유효 사용자 및 그룹 ID가 실제 사용자 및 그룹 ID로 설정됩니다.

원하는 효과를 얻으려면 를 실행해야 합니다 bashroot -p. 차이점을 즉시 알 수 있습니다. 쉘 프롬프트 #$.

관련 정보