Как запустить программу как никто? - PullRequest
9 голосов
/ 16 сентября 2008

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

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

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

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

Ответы [ 5 ]

16 голосов
/ 16 сентября 2008

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

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

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

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

1 голос
/ 16 сентября 2008

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

0 голосов
/ 15 февраля 2013

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

0 голосов
/ 16 сентября 2008

Пользователь nobody - все еще пользователь. Я не уверен, что вы думаете о том, что программа запускается как никто, она не будет добавлять дополнительную безопасность. У вас больше шансов открыть себя другим проблемам.

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

0 голосов
/ 16 сентября 2008

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

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

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