Я пытаюсь сделать исполняемый скрипт Python с установленным битом setuid.Программа, принадлежащая пользователю 'bgmc', должна создать несколько файлов в каталоге '/ home / bgmc', но вызывается другим пользователем, 'client'.Действительно, я не хочу, чтобы пользователь 'client' изменял файлы, созданные программой.Я использовал c-wrapper для вызова программы (см. setuid для сценариев оболочки ):
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("/home/bgmc/myprogram.sh");
return 0;
}
Я установил бит setuid программы.Когда c-скомпилированная программа принадлежит пользователю root, программа работает хорошо и создает ожидаемый файл.Свойства скомпилированной программы в таком случае следующие:
8 -rws--x--x 1 root root 4657 Mar 2 16:25 myprogram
Однако, когда я изменяю группу пользователей myprogram на bgmc: bgmc, программа больше не может создать файл: «Отказано в доступе».Я попытался изменить строку:
setuid(0);
с помощью:
setuid(1002);
, поскольку 1002 - это идентификатор пользователя 'bgmc' (для этого я использовал команду "id -u bgmc")но это не помогло.
Я бы предпочел не предоставлять root-доступ к программе.Есть ли способ предотвратить это?