Как установить бит setuid в программе пользователя без полномочий root? - PullRequest
0 голосов
/ 02 марта 2012

Я пытаюсь сделать исполняемый скрипт 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-доступ к программе.Есть ли способ предотвратить это?

1 Ответ

2 голосов
/ 02 марта 2012

Не уверен насчет этого, поскольку ваш вопрос очень редок по информации, но вы забыли сбросить разрешения для файла после смены владельца?В большинстве систем любое изменение владельца автоматически удаляет бит setuid, и вы должны добавить его самостоятельно, если хотите.

Также обратите внимание, что сценарии оболочки setuid представляют собой главную уязвимость;Вот почему ядро ​​не позволяет вам напрямую создавать setuid сценария оболочки.По крайней мере, вы должны:

  1. Использовать execve вместо system для его вызова и
  2. Очистить все из среды (или передать новую пустую среду вexecve).

Как и сейчас, любой, кто может запустить программу, может заставить ее делать что угодно, управляя переменными среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...