Почему у процесса не устанавливается EUID, равный UID владельца исполнимого файла?

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
жучара
Сообщения: 1051
ОС: астралинукс

Почему у процесса не устанавливается EUID, равный UID владельца исполнимого файла?

Сообщение жучара »

Друзья! Смотрим что такое файл bar.sh

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: Отказано в доступе
...
Это просто занавес какой-то. Я и сам знаю, что fima нет прав на чтение foo. С правами и дурак прочтёт. Ты попробуй без прав прочесть. Для того и нужны, по-моему права s, чтобы просто-напросто устанавливать у процесса bar.sh EUID, равный 1000 и с ним уже читать файл foo. ЧЯДНТ? На всякий случай ps:

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
$
Спасибо, кто откликнется. Debian 12
Я просто читаю маны.
Спасибо сказали:
Shushandr
Сообщения: 87
ОС: Gentoo

Re: Почему у процесса не устанавливается EUID, равный UID владельца исполнимого файла?

Сообщение Shushandr »

Для того и нужны, по-моему права s, чтобы ...
Давайте, начните с того, что найдите нам авторитативную цитату из документации.
Llama3 писал(а):The information about the "s" access right in Linux is documented in various places. Here are a few sources:

man pages: You can find detailed information about file permissions, including the setuid and setgid bits, in the chmod and chown man pages. To access these man pages, open a terminal and type man chmod or man chown.
Linux documentation project: The Linux Documentation Project (LDP) has a comprehensive guide to Linux file permissions, including a section on setuid and setgid. You can find it at www.tldp.org/LDP/intro-linux/html/sect_03_04.html.
POSIX standard: The POSIX (Portable Operating System Interface) standard defines the behavior of setuid and setgid bits. You can find the POSIX standard documentation at pubs.opengroup.org/onlinepubs/9699919799/.
Linux kernel documentation: The Linux kernel documentation also covers file permissions, including setuid and setgid. You can find it at www.kernel.org/doc/html/latest/filesystems.html.
GNU coreutils documentation: The GNU coreutils package, which includes the chmod and chown commands, has documentation that covers file permissions, including setuid and setgid. You can find it at www.gnu.org/software/coreutils/manual/coreutils.html.

These sources provide detailed information about the "s" access right in Linux, including its behavior, usage, and implications.
Последний раз редактировалось Shushandr 31.08.2024 16:47, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 1051
ОС: астралинукс

Re: Почему у процесса не устанавливается EUID, равный UID владельца исполнимого файла?

Сообщение жучара »

Shushandr писал:
31.08.2024 14:30
Для того и нужны, по-моему права s, чтобы ...
Давайте, начните с того, что найдите нам авторитативную цитату из документации.
на придирание к словам похоже. Вообще я не знаю, что вас убедит. Но что у меня есть:

https://vds-admin.ru/freebsd/permissions-prava-dostupa-i-failovye-flagi-v-operatsionnykh-sistemakh-unix
Иногда, запущенный процесс, может во время выполнения, менять свои идентификаторы. Это происходит, когда в правах доступа на файл, установлены дополнительные биты, SUID ( Set user ID - бит смены идентификатора пользователя ) и SGID ( Set group ID - бит смены идентификатора группы ). Когда пользователь или процесс запускает файл, у которого установлен один из этих битов, процессу, временно присваиваются права владельца данного файла ( а не того, кто его запускает ).
https://help.ubuntu.ru/wiki/%D1%81%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%B0_unix#%D0%B1%D0%B8%D1%82%D1%8B_suid_sgid_%D0%B8_sticky
Когда пользователь или процесс запускает исполняемый файл с установленным одним из этих битов, файлу временно назначаются права его (файла) владельца или группы (в зависимости от того, какой бит задан).
Ну вот тут ещё можно прочесть:
https://linuxhandbook.com/suid-sgid-sticky-bit/
When the SUID bit is set on an executable file, this means that the file will be executed with the same permissions as the owner of the executable file.
и так далее. А поиск suid debian ничего не даёт, увы.

...хотя даёт:
https://www.debian.org/doc/manuals/debian-handbook/sect.rights-management.ru.html#sect.rights-management.perm

These two rights allow any user to execute the program with the rights of its owner or its group, respectively. This mechanism grants access to features requiring higher level permissions than those you would usually have.
википедия:
https://ru.wikipedia.org/wiki/Suid#A%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82_setuid_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD_%D0%B4%D0%BB%D1%8F_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D0%B5%D0%BC%D0%BE%D0%B3%D0%BE_%D1%84%D0%B0%D0%B9%D0%BB%D0%B0

Но при запуске на выполнение файла с атрибутом setuid любым пользователем, запущенный процесс работает от идентификатора пользователя, являющегося владельцем файла — операционная система назначет этому процессу EUID, соответствующий UID владельца файла.
Я просто читаю маны.
Спасибо сказали:
Shushandr
Сообщения: 87
ОС: Gentoo

Re: Почему у процесса не устанавливается EUID, равный UID владельца исполнимого файла?

Сообщение Shushandr »

Llama3 писал(а):«В Linux, бит SUID работает только для исполняемых файлов, которые загружаются напрямую в память, а не для скриптов, которые интерпретируются shell'ом.»

«Когда вы запускаете скрипт, shell (например, bash) интерпретирует скрипт и выполняет команды, но сам shell не наследует права владельца файла. Поэтому, даже если вы установили бит SUID на скрипте, он не будет работать.»

Например, в документации Linux (man-pages) для команды chmod написано:
"The set-user-ID and set-group-ID bits have no effect on shell scripts."
(Биты set-user-ID и set-group-ID не имеют никакого эффекта на shell-скрипты.)
Аналогичная информация содержится в документации Linux для команды execve:
"The set-user-ID and set-group-ID bits are ignored for scripts."
(Биты set-user-ID и set-group-ID игнорируются для скриптов.)
Эта информация также подтверждается в различных источниках по безопасности и программированию, таких как "Linux Security Cookbook" и "Advanced Linux Programming".
«Сделайте скрипт исполняемым файлом, используя ... инструменты, такие как shc (https://github.com/neurobin/shc
Спасибо сказали: