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

StackOverflow https://stackoverflow.com/questions/66870

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хочу, чтобы процесс с привилегиями пользователя (не root) запускал новые процессы от имени пользователя. nobody.Я попробовал прямой вызов setuid это терпит неудачу с -1 EPERM на Ubuntu 8.04:

#include <sys/types.h>
#include <unistd.h>

int main() { 
       setuid(65534);
       while (1);
       return 0;
}

Как мне это сделать?

Это было полезно?

Решение

Ты воля требуют помощи и большого доверия со стороны вашего системного администратора.Обычные пользователи не могут запускать выбранный ими исполняемый файл от имени других пользователей и точка.

Она может добавить ваше заявление в /etc/sudoers с правильными настройками, и вы сможете запустить его, как и sudo -u nobody.Это будет работать как для сценариев, так и для двоичных исполняемых файлов.

Другой вариант, что она сделает chown nobody и chmod +s в вашем двоичном исполняемом файле, и вы сможете выполнить его напрямую.Эту задачу необходимо повторять каждый раз при изменении исполняемого файла.

Это также может сработать для сценариев, если вы создадите крошечный вспомогательный исполняемый файл, который просто выполняет exec("/home/you/bin/your-application").Этот исполняемый файл можно сделать suid-nobody (см. выше), и вы можете свободно изменять его. your-application.

Другие советы

Насколько я знаю, вы не можете этого сделать, если вы не являетесь пользователем root или у вас не настроен sudo, позволяющий переключать пользователей.Или вы можете настроить бит suid для своего исполняемого файла и сделать его никем не принадлежащим.Но для этого также требуется root-доступ.

Пользователь «никто» по-прежнему остается пользователем.Я не уверен, каковы ваши доводы в пользу запуска программы от имени кого-либо, это не добавит никакой дополнительной безопасности.Вы с большей вероятностью откроете себя для других проблем.

Я бы последовал рекомендации отряда и использовал вспомогательное приложение.

calife является альтернативой sudo.

Calife — это небольшая программа, которая позволяет системному администратору UNIX стать пользователем root (или другим пользователем) на своих машинах, не вводя пароль root, а только свой собственный.

я побежал через setuid-песочница проект сегодня, читая LWN, который делает то, что я ищу, правильным способом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top