эффективный идентификатор пользователя, не изменяющийся при установке uid для укоренения

Я в настоящее время читаю книгу по программированию с C, я добрался до части, где я добрался для записи программы, которая отобразит реальный uid и эффективный uid, на котором выполняется файл. После компиляции кода с gcc я ввел команду для наблюдения текущего uOwner и gOwner ls- l id_demo вывод - это

-rwxrwxr-x 1 user user 8629 Sep 21 13:04 id_demo

я затем выполняю программу, которая это сам, это - то, что я получаю:

real uid: 1000 effective uid: 1000 пока все хорошо.

Я затем ввел команду для изменения владельца файла sudo chown root:root ./id_demo ls -l подтверждает, что владелец был изменен на корень;

-rwxrwxr-x 1 root root 8629 Sep 21 13:04 id_demo

снова, выполнение шоу программы real uid и uid как 1 000. Последний шаг, после который uid должен быть 0, это: sudo chmod u+s ./uid_demo но для меня они остаются как 1 000, где в книге вывод, ясно показывают, чтобы быть этим:

real uid: 1000 effective uid: 0

какие-либо идеи, почему это происходит?

ОБНОВЛЕНИЕ

исходный код id_demo:

#include <stdio.h>

int main ()
{
    printf("real uid: %d\n", getuid());
    printf("effective uid: %d\n", geteuid());
}

ОБНОВИТЕ 2 Снимка экрана

enter image description here

ls -l testuid

0
задан 21 September 2013 в 17:49

2 ответа

Вы изменили suid только для пользователя root (u+s, если владелец - root). До chmod a+s ./uid_demo.

РЕДАКТИРОВАТЬ после того, как ОП опубликовал код: работает для меня.

xxxxx@xxxxx:~$ cat > test.c
#include <stdio.h>

int main ()
{
    printf("real uid: %d\n", getuid());
    printf("effective uid: %d\n", geteuid());
}
xxxxx@xxxxx:~$ gcc -o testuid test.c
xxxxx@xxxxx:~$ ./testuid 
real uid: 1000
effective uid: 1000
xxxxx@xxxxx:~$ sudo chown root:root testuid
xxxxx@xxxxx:~$ sudo chmod a+s testuid
xxxxx@xxxxx:~$ ./testuid 
real uid: 1000
effective uid: 0
xxxxx@xxxxx:~$ ls -l testuid
-rwsrwsr-x 1 root root 8625 Sep 21 14:45 testuid

Вот что вы можете сделать: (i) делать все с нуля, как показано выше. Если это не работает, вы можете попробовать использовать strace, чтобы увидеть, что происходит.

0
ответ дан 21 September 2013 в 17:49

Мы поняли это. Причиной является ecryptfs -монтированный домашний каталог. Выходные данные mount содержат следующую строку:

/home/evgeny/.Private on /home/evgeny type ecryptfs 

Это означает, что домашний каталог на самом деле не является частью корневой файловой системы (которая имеет необходимый флаг suid), а является собственной виртуальной файловой системой. по-видимому, по умолчанию он не поддерживает двоичные файлы setuid. Я успешно воспроизвел проблему с тестовым пользователем, у которого есть зашифрованный домашний каталог.

Можно добавить флаг suid к ecryptfs с помощью следующей команды:

sudo mount -i -o remount,suid /home/evgeny

Я не уверен, насколько это безопасно, или как изменить его навсегда, чтобы он выживет перезагрузки.

0
ответ дан 21 September 2013 в 17:49

Другие вопросы по тегам:

Похожие вопросы: