бит setuid включен, но программа не может открыть файл суперпользователя

У меня есть файл superuser.cpp, созданный суперпользователем с правами доступа 770. Теперь суперпользователь создает файл setuidDemonstration.cpp, в котором superuser.cpp открывается с помощью open("superuser.cpp", O_RDONLY). .cpp и объектный файл setuidDemonstration.cpp имеют разрешения rwxrwxr-x. Теперь мои вопросы: -

  1. Когда я запускал программу setuidDemonstration, как в обычном режиме, так и в режиме суперпользователя, она не могла открыть superuser.cpp. Почему? По крайней мере, режим суперпользователя должен был открыть его.

  2. Теперь я делаю sudo chmod 4775 setuidDemonstration. Это должно позволить программе открыть superuser.cpp даже в обычном режиме, потому что во время выполнения она получит euid суперпользователя, поскольку бит setuid был установлен при запуске sudo chmod 4775 setuidDemonstration. Но не смог. Кроме того, когда я напечатал euid при запуске из обычного режима, он напечатал 1000, а не 0. Почему?

ОБНОВЛЕНИЕ: Спасибо, что указали на ошибку. Я удалил «/» из пути к файлу, и теперь он работает для суперпользователя. Но даже сейчас, после sudo chmod 4775 setuidDemonstration, программа запуска в обычном режиме не могла открыть файл. Пожалуйста, объясните.


person AvinashK    schedule 03.09.2013    source источник
comment
Действительно ли файл superuser.cpp находится непосредственно в /?   -  person cnicutar    schedule 03.09.2013
comment
@cnicutar... да, он находится в том же каталоге, что и setuidDemonstration.cpp   -  person AvinashK    schedule 03.09.2013
comment
Вы полностью уверены, что понимаете, что такое / и чем он отличается от текущего каталога?   -  person cnicutar    schedule 03.09.2013
comment
@cnicutar... пожалуйста. увидеть обновление   -  person AvinashK    schedule 03.09.2013


Ответы (1)


Потому что /superuser.cpp — это имя файла в корне файловой системы, а не в текущем рабочем каталоге. Используйте superuser.cpp или ./superuser.cpp, если файл находится по тому же пути, что и вы, когда запускаете программу.

person Emil Vikström    schedule 03.09.2013