Domanda
Va bene quindi la mia domanda è semplice, ma io sono un po nuovo C e speravo che qualcuno mi potrebbe aiutare. Voglio cambiare ad un altro utente in C. Per esempio, so che la password dell'utente, e se l'utente digita: ./change user1 Cambierà a user1. So che questo può essere un problema di sicurezza in questo momento, ma io non sono preoccupato per la sicurezza in questo momento.
Soluzione
Si vuole utilizzare setuid che può essere trovato in unistd.h
quindi è disponibile sui sistemi POSIX (in modo che qualsiasi Linux / Unix falvour dovrebbe essere ok)
Dalla pagina man
Se il processo ha i privilegi appropriati, setuid () stabilisce il reale ID dell'utente, efficace l'ID utente e i salvati set-user-ID del processo chiamante per UID.
Se il processo non dispone di privilegi appropriati, ma uid è uguale a quella reale ID utente o il set-user-ID salvato, setuid () definiscono l'ID utente effettivo UID; l'ID utente reale e salvati set-user-ID restano invariati.
La funzione setuid () non pregiudica la lista dei gruppi supplementari in alcun modo.
Altri suggerimenti
È possibile chiamare il binario su
(ad esempio attraverso system()
o una combinazione di fork()
e una delle funzioni exec
), che conosce tutte le complessità di credenziali di cambiamento, sia Unix-genericamente e sul particolare sistema operativo. Il terminale è condiviso e continua ad appartenere all'utente originale.
Alcune di queste complicazioni non gestiti da una semplice chiamata setuid()
sono gruppi, rappresentano invalidante e limiti delle risorse.
Se questo è solo per divertimento, setuid()
preceduto da setgid()
e initgroups()
sarà probabilmente sufficiente per voi.
Devi trovare l'UID utilizzando getpwuid () . Afterwords è necessario impostare l'UID nel programma con setuid () seguita dall'applicazione / funzione che si intenzione di correre con questi nuovi diritti, ad esempio il guscio. Per avviare un'applicazione con il corrente uso UID sistema () .