setuid не меняет uid

Я работаю в Linux и пытаюсь выполнить программу на C setuid в линуксе Вот мой код:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>

int main()
{
    int ret;
    fprintf ( stderr, "Orig: %d   Effective: %d\n", getuid(), geteuid() );

    ret = setuid ( 122 );
    if ( ret < 0 )
    {
        perror ( "Problem in setuid  " );
        return ( 1 );
    }

    fprintf ( stderr, "UID : %d   Effective: %d\n", getuid(), geteuid() );
    execlp ( "/bin/id", "/bin/id", NULL );

    fprintf ( stderr, "Problem executing execlp\n" );
    return ( 0 );
}

После выполнения UID не изменяется. Выход:

[hauschild@hoare7 ~]$ ~sanjiv/bin/a.out
Orig: 155   Effective: 122
UID : 155   Effective: 122
uid=155(hauschild) gid=100(users) euid=122(sanjiv) groups=100(users)
[hauschild@hoare7 ~]$ 

Я смотрел на другие вопросы в SO, но не смог понять это. Разрешения на исполняемый файл rwsr-sr-x, Обратите внимание, как код выполняется до завершения, и состояние выхода отображается как 0, Тем не менее, когда я запускаю его через strace, это дает мне ошибку на setuid и существует с 1, следующее:

geteuid()                               = 155
getuid()                                = 155
write(2, "Orig: 155   Effective: 155\n", 27Orig: 155   Effective: 155
) = 27
setuid(122)                             = -1 EPERM (Operation not permitted)
write(2, "Problem in setuid  : Operation n"..., 45Problem in setuid  : Operation not permitted
) = 45
exit_group(1)                           = ?
+++ exited with 1 +++

Кто-нибудь может увидеть, что я могу делать не так?

1 ответ

Решение

В POSIX и Linux, setuid() только устанавливает эффективный UID процесса, если только эффективный UID не является корневым, и в этом случае он также устанавливает реальный UID и сохраненный set-user-ID. Чтобы установить реальный UID, используйте setreuid(), BSD setuid устанавливает их все независимо от эффективного UID процесса.

Чтобы установить реальный UID, используйте setreuid:

ret = setreuid(122, 122);
Другие вопросы по тегам