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