Wiem, że włączenie setuid w skryptach ma problemy z bezpieczeństwem i dlatego jest domyślnie nieaktywne, ale spodziewam się, że zadziała dla plików wykonywalnych. Stworzyłem i wykonuję, który pokazuje UID jako wynik, postępując zgodnie z instrukcjami opisanymi w tym poście: Zezwalaj na setuid w skryptach powłoki
Ale zwraca ten sam identyfikator użytkownika (1000) zarówno przed uruchomieniem, jak i po nim sudo chmod +s ./setuid-test
. Myślę, że to oznacza, że setuid nie ma żadnego wpływu na mój plik wykonywalny, dlaczego i jak rozwiązać?
Kod źródłowy:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Zbudowany i działający z
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
Po uruchomieniu ls -la
otrzymuję:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
me@me:~$ ls -la setuid-test
---- zwraca -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
katalog, aby znaleźć punkt podłączenia mount | grep nameofmountpoint
. Czy jest tam nosuid
wymieniona flaga?