Способ изменить эффективный идентификатор пользователя работающей программы? - PullRequest
4 голосов
/ 25 марта 2010

Я пишу простой менеджер пакетов и хотел бы автоматически попробовать sudo, если программа не запускается от имени пользователя root. Я нашел функцию с именем seteuid , которая выглядит так, как будто это именно то, что мне нужно, но у меня нет прав для ее запуска. Пока что все, о чем я могу думать, это bash-скрипт, который нужно проверить, прежде чем они перейдут к реальному двоичному файлу, но я бы хотел сделать все это как C ++, если это возможно.

Есть ли способ изменить euid процесса после его запуска? Или способ вызвать sudo?

Ответы [ 2 ]

4 голосов
/ 25 марта 2010

Вот как работают эти функции.

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

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

Вы не можете вызвать sudo (кроме, конечно, через fork / exec). Вы можете быть программой наподобие sudo, в которой установлен setuid и которая решает, когда использовать эту удивительную мощность соответствующим образом.

3 голосов
/ 25 марта 2010

Как bmargulies говорит в своем ответе , вы можете сделать это, если ваш двоичный файл принадлежит root и установлен бит setuid - но тогда вам нужно будет реализовать часть аутентификации (проверяя, что пользователю действительно разрешено стать пользователем root) тоже.

Вы бы по существу переписали sudo в своем приложении - лучший способ справиться с этим - сделать то, что вы предложили самостоятельно, и установить приложение с помощью сценария-оболочки, который использует /usr/bin/id, чтобы проверить, является ли он root, а если нет, позвоните по номеру sudo (или su).

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