Как запустить программу от имени пользователя?
Вопрос
Я хочу, чтобы процесс с привилегиями пользователя (не 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, который делает то, что я ищу, правильным способом.