#linux #permissions
#линукс #разрешения
Вопрос:
У меня есть исполняемый файл с битом suid (и битом sgid тоже).:
-rwsr-sr-x 1 flag03 level03 8627 Mar 5 2016 level03*
cat /etc/passwd
показывает следующий идентификатор для пользователей level03 и flag03:
level03:x:2003:2003::/home/user/level03:/bin/bash flag03:x:3003:3003::/home/flag/flag03:/bin/bash [...]
Более того, исполняемый файл, кажется, вызывает geteuid
и getegid
в начале.
Я ожидаю geteuid
вернуться 3003
из-за бита suid и getegid
вернуться 2003
, но когда я запущу ltrace ./level03
, вот результат:
__libc_start_main(0x80484a4, 1, 0xbffff7f4, 0x8048510, 0x8048580 lt;unfinished ...gt; getegid() = 2003 geteuid() = 2003 [...]
Мой вопрос: почему getegid()
возвращает 2003
, в то время как у владельца исполняемого файла есть uid 3003, а бит suid установлен?
Ответ №1:
Только что выяснил:
Ни gdb, ни ltrace , ни какое-либо другое внешнее программное обеспечение не запускают исполняемый execve
файл , они запускают его с execat
помощью, который выполняет код в рамках текущего процесса, таким образом, не изменяя никакого идентификатора.