Shell
$ ls -l
итого 8
-rwsr--r-x 1 user user 40 авг 31 12:52 bar.sh
-rw-r----- 1 user user 9 авг 31 04:23 foo
$
$
И его содержание:
Shell
$ cat bar.sh
#!/bin/bash
while true
do
sleep 1
done
$
Shell
$ whoami
fima
$
И информация обо мне.
Shell
$ id
uid=1001(fima) gid=1001(fima) группы=1001(fima)
$
Отсюда следует, то если я (fima, не user и не входящий в группу user), запущу сейчас процесс bar.sh (имею право), то у bar.sh будет RUID равный 1001, а вот EUID будет как у user (1000), поскольку user владеет bar.sh и у него установлены права s. Права s то и значит, что запущенному процессу присваивается EUID не того, кто процесс запустил а того, кто исполняемым файлом владеет. А владеет им user.
Shell
$ ./bar.sh
...
Shell
$ ps -eo pid,user,euid,ruid,egid,rgid,command | grep bar.sh | grep -v grep
2231 fima 1001 1001 1001 1001 /bin/bash ./bar.sh
$
Ничего не понятно. UID-ы везде 1001. Но, быть может EUID тогда меняется на UID владельца, когда в этом есть необходимость? А пусть bar.sh читает foo. fima к foo никакого отношения не имеет. Вот она и есть необходимость. Короче, сейчас у процесса bar.sh обязательно сменится EUID!
Shell
$ whoami
fima
$
$ cat bar.sh
#!/bin/bash
while true
do
cat foo
done
$
Запускаем bar.sh
Shell
...
cat: foo: Отказано в доступе
cat: foo: Отказано в доступе
cat: foo: Отказано в доступе
cat: foo: Отказано в доступе
...
Shell
$ ps -eo pid,user,euid,ruid,egid,rgid,command | grep bar.sh | grep -v grep
18225 fima 1001 1001 1001 1001 /bin/bash ./bar.sh
$