Próbuję zrobić coś bezpiecznego i mieć program, który musi działać jako root, aby zrzucić jego uprawnienia, gdy ich nie potrzebuje. Działa to dobrze, jeśli mój kod binarny jest ustawiony na bit SUID i sprawi, że będzie on należał do katalogu głównego, ponieważ teraz mam UID = pewien użytkownik, a EUID = root, więc mogę użyć odpowiednio seteuid(0)
i seteuid(getuid())
, aby podnieść i zrzucić uprawnienia administratora.Jak korzystać z setuid() z katalogu głównego, aby stać się użytkownikiem, z możliwością późniejszego odzyskania uprawnień administratora?
Ale jeśli użyję sudo
zamiast ustawiania SUID, to UID == EUID == 0, a więc wywołanie seteuid(getuid())
nie będzie miało żadnego efektu. I nie mogę po prostu zmienić UID
na jakąś wartość od jakiegoś losowego użytkownika, ponieważ strona man setuid()
wyraźnie stwierdza, że jeśli zostanie wywołana z programu działającego jako root, stracimy przywileje na dobre, bez nadziei na odzyskanie ich.
Co zrobić, aby mój program stracił czasowo swoje uprawnienia podczas uruchamiania z użyciem sudo
?
Czy musisz powrócić do UID użytkownika, który uruchomił 'sudo', czy tylko do przypadkowego, mniej uprzywilejowanego użytkownika? –
Będę zadowolić się "nikim". ale jeśli znasz prosty sposób na uzyskanie rozmówcy sudo, jestem zainteresowany. – Florian
meh, to proste, wystarczy 'getenv (" SUDO_UID ")'. – Florian