таким образом, у меня есть эта простая программа 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)
Это может быть результатом установки опции монтирования 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)
Поскольку Вы видите в этом Unix. SE Q& удар setuid-bit-seems-to-have-no-effect-on-bash
обнаруживает, что был запущен корень SUID (UID! =EUID) и использование его корневое питание выбросить это питание, сбрасывая EUID к UID
Больше деталей в связанный ответ