実際のユーザー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]参照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
。違いをすぐに知ることができます。シェルプロンプト#
は$
。