Sto provando a fare la cosa sicura e ho un programma che deve essere eseguito come root per eliminare i suoi privilegi quando non ne ha bisogno. Funziona bene se ho chmod
il mio binario con il bit SUID e lo faccio appartenere a root, poiché ora ho UID = qualche utente e EUID = root, quindi posso usare seteuid(0)
e seteuid(getuid())
rispettivamente per aumentare e rilasciare i diritti di amministratore.Come utilizzare setuid() da root per diventare utente, con la possibilità di diventare nuovamente root in seguito?
Ma se uso sudo
invece di impostare SUID, quindi UID == EUID == 0, e quindi chiamare seteuid(getuid())
non avrà alcun effetto. E non posso semplicemente cambiare lo UID
con un certo valore da qualche utente casuale, dato che la pagina man setuid()
afferma chiaramente che se viene chiamata da un programma in esecuzione come root, si perdono i privilegi per sempre, senza alcuna speranza di farli tornare indietro.
Quindi, come posso fare in modo che il mio programma perda temporaneamente i suoi privilegi quando viene eseguito utilizzando sudo
?
È necessario tornare all'UID dell'utente che ha eseguito 'sudo' o solo a un utente casuale, con privilegi inferiori? –
Mi accontenterò di "nessuno". ma se conosci un modo semplice per ottenere il chiamante sudo, sono interessato. – Florian
meh, è facile, solo bisogno di 'getenv (" SUDO_UID ")'. – Florian