Нет системного вызова, который позволил бы процессу получить привилегии root.Можно ожидать, что seteuid
будет работать таким образом, но он может использоваться только процессами с корневыми процессами (непривилегированные процессы могут устанавливать euid только равным uid).
sudo
особенный, потому что его исполняемый файлФайл имеет права доступа setuid.Это означает, что когда sudo
запускается, он запускается как пользователь, который владеет им (root), а не как пользователь, выполняющий его.sudo
может проверить, есть ли у вас root-доступ, проверив свой пароль и прочитав файл конфигурации.Если проверка прошла успешно, она вызывает fork
и execve
для выполнения запрошенной вами команды.
Чтобы получить привилегии root в непривилегированном приложении, вам нужно будет перепрыгнуть через несколько циклов.Вы можете использовать fork
/ execve
для вызова sudo
для вашей собственной команды.После аутентификации у вас будет привилегированный дочерний процесс.Вы можете передать специальный аргумент или переменную среды, чтобы дочерний процесс мог перейти к коду, который предназначен для привилегирования.Родительский процесс будет просто ждать завершения дочернего процесса.