Я знаю, що включення налаштування в сценаріях має проблеми із безпекою, тому воно за замовчуванням неактивне, але очікую, що воно працює для виконуваних файлів. Я створив і виконавчий файл, який показує uid як вихід, дотримуючись інструкцій, описаних у цій публікації: Дозволити налаштування на скриптах оболонки
Але він повертає той самий uid (1000) як до, так і після запуску sudo chmod +s ./setuid-test
. Я думаю, це означає, що setuid не впливає на мій виконуваний файл, чому і як це вирішити?
Вихідний код:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Побудовано та працює з
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
Під час бігу ls -la
я отримую ось що:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
me@me:~$ ls -la setuid-test
---- повертається -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
у каталог, щоб знайти точку монтажу, потім mount | grep nameofmountpoint
. Чи там nosuid
перелічено прапор?