Пользовательский идентификатор, C программа

таким образом, у меня есть эта простая программа C:

#include<stdio.h>

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

Я компилирую его:

user@user:~/Desktop$ gcc -o uid_demo uid_demo.c

Я Взгляд на полномочия:

user@user:~/Desktop$ ls -l uid_demo
-rwxr-xr-x 1 user user 8512 set 17 11:30 uid_demo

и выполненный это:

user@user:~/Desktop$ ./uid_demo

real uid: 1000

effective uid: 1000

Все хорошо, я продолжаю:

user@user:~/Desktop$ sudo chown root:root uid_demo
user@user:~/Desktop$ ls -l uid_demo
-rwxr-xr-x 1 root root 8512 set 17 11:30 uid_demo

И

user@user:~/Desktop$ sudo chmod u+s uid_demo
user@user:~/Desktop$ ls -l uid_demo
-rwsr-xr-x 1 root root 8512 set 17 11:30 uid_demo

Здесь прибывает проблема:

user@user:~/Desktop$ ./uid_demo

real uid: 1000

effective uid: 1000

Я ожидал видеть реальный uid: 1000 и эффективный uid: 0

Что я пропускаю?

А-ч и конечно:

user@user:~/Desktop$ id user
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),131(sambashare)
0
задан 17 September 2017 в 04:17

2 ответа

Это может быть результатом установки опции монтирования nosuid в файловой системе, где расположен исполняемый файл. Для иллюстрации, учитывая

$ cat uid_demo.c 
#include<stdio.h>
#include <unistd.h>
#include <sys/types.h>

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

, то

$ gcc -o uid_demo uid_demo.c 
$ sudo chown root:root uid_demo
$ sudo chmod u+s uid_demo
$ ls -l uid_demo
-rwsrwxr-x 1 root root 8512 Sep 17 07:53 uid_demo
$ 
$ ./uid_demo 

real uid: 1000

effective uid: 0

работает как ожидалось; однако при повторном использовании как nosuid бит suid все еще присутствует, но игнорируется:

$ sudo mount -o remount,nosuid /home
$ ls -l uid_demo
-rwsrwxr-x 1 root root 8512 Sep 17 07:53 uid_demo
$ 
$ ./uid_demo 

real uid: 1000

effective uid: 1000

При условии, что вы знаете точку монтирования, где находится файл, вы можете увидеть параметры монтирования его файловой системы. срезав выходные данные команды mount, например

$ mount | grep /home
/dev/sda6 on /home type ext4 (rw,nosuid,relatime,data=ordered)
0
ответ дан 2 November 2019 в 06:18

Поскольку Вы видите в этом Unix. SE Q& удар setuid-bit-seems-to-have-no-effect-on-bash

обнаруживает, что был запущен корень SUID (UID! =EUID) и использование его корневое питание выбросить это питание, сбрасывая EUID к UID

Больше деталей в связанный ответ

0
ответ дан 2 November 2019 в 06:18

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

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