실제 사용자 ID와 유효 사용자 ID의 차이점에 대한 기사를 읽었습니다. 얻은 줄 알았는데 질문이 있습니다. 제가 이해한 바에 따르면 아래 예에서는 명령이 유효한 사용자로 $ id -un
반환되어야 합니다 .root
jack
$ 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 -un
root
jack
내가 무엇을 놓치고 있나요?
[편집] 더 구체적으로 말하면 둘 다 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
( root
0)이며 예상됩니다. 유효 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
. 차이점을 즉시 알 수 있습니다. 쉘 프롬프트 #
는 $
.