geteuid возвращает неверное значение

#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 помощью, который выполняет код в рамках текущего процесса, таким образом, не изменяя никакого идентификатора.