Как я могу создать ситуацию, когда $ EUID отличается от $ UID? - PullRequest
2 голосов
/ 29 мая 2020

Это может быть глупый вопрос, но я неправильно понимаю EUID и UID.
Описание настоящего и эффективного идентификатора ясно, и я его понимаю. На основе того, что я нашел в Google и электронных книгах, при использовании su, sudo или SUID эффективный идентификатор должен измениться. Кроме того, насколько я понимаю, UID в Bash должен содержать реальный идентификатор, а EUID должен содержать эффективный идентификатор.

Мое предположение - EUID и UID должно отличаться, когда я использую su, sudo или SUID, но всякий раз, когда я пытаюсь echo $EUID и echo $UID, результат обоих то же самое.
Кроме того, я пробовал id -u и id -r -u, и снова они всегда одинаковы.

Может ли кто-нибудь объяснить мне, когда и в какой именно ситуации $EUID и $UID являются разные?

1 Ответ

4 голосов
/ 30 мая 2020

По умолчанию 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
...