Я пытаюсь сделать что-то безопасное, и у меня есть программа, которая должна запускаться от имени root, чтобы отказаться от ее привилегий, когда она им не нужна. Это хорошо работает, если я chmod
мой двоичный код с битом SUID и сделать его принадлежащим root, так как теперь у меня есть UID = некоторый пользователь и EUID = root, поэтому я могу использовать seteuid(0)
и seteuid(getuid())
соответственно, чтобы повысить и отказаться от прав администратора.
Но если я использую sudo
вместо установки SUID, тогда UID == EUID == 0, и поэтому вызов seteuid(getuid())
не будет иметь никакого эффекта. И я не могу просто изменить UID
на какое-то значение от какого-то случайного пользователя, так как в man-странице setuid()
четко указано, что если она вызывается из программы, запущенной с правами root, то теряет привилегии навсегда, без надежды возвращая их.
Итак, как мне заставить мою программу временно потерять свои привилегии при запуске с помощью sudo
?