Как использовать setuid bin для доступа к другому исполняемому файлу?

У меня есть программа на C, которая получает свое имя, добавляет строку «.script» в конец и выполняет результирующий скрипт. Моя цель состоит в том, чтобы исполняемый файл C имел установленный бит setuid, а сценарий принадлежал эффективному uid. Но когда я тестирую его, он дает мне отказ в разрешении. Я добавил печать для реального и эффективного uid, и euid устанавливается. Два файла отображаются как:

-rwsr-xr-x. 1 ts00001 ts00001     8792 Oct  9 08:54 testing
-rwxr-x---. 1 ts00001 ts00001       21 Oct  9 08:15 testing.script

Выполнение программы дает мне:

ts00086@rofrpna bin:0 $ ./testing
uid = 223336, euid = 202223
/bin/bash: /usr/local/bin/testing.script: Permission denied
ts00086@rofrpna bin:126 $

Итак... Какой смысл я здесь не вижу?

Программа C выглядит следующим образом:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

char ** duplicateArray(char ** input);

int main(int ac, char **av)
{
        int i;
        char script[1024];

        printf("uid = %d, euid = %d\n", getuid(), geteuid());

        realpath(av[0], script);
        strcat(script, ".script");

        printf("script result = %d\n", execv(script, av));
        printf("errno = %d\n", errno);

        return 0;
}

person Robert Nix    schedule 09.10.2017    source источник
comment
Я считаю, что проблема связана с отсутствием прав на чтение файла. попробуйте chmod 750 testing.script, а затем запустите скрипт и дайте мне знать, помогло ли это...   -  person Leonardo Alves Machado    schedule 09.10.2017
comment
@LeonardoAlvesMachado В верхней части поста уже указано 750 с разрешения testing.script   -  person Tom Karzes    schedule 09.10.2017