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