有効なユーザー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 bashrootjack)の理由は何ですか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]参照Steven Kitの答え:

$ 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。違いをすぐに知ることができます。シェルプロンプト#$

関連情報