2010-08-08 9 views
3

J'ai un programme qui exécute un tas de tâches en tant que root au lancement. Après cela, il doit passer à un utilisateur différent. Comment cela peut-il être fait?Abandonner les privilèges root?

Et je me demandais simplement, est-il possible de réacquérir root sans relancer le programme?

+2

Voir http://stackoverflow.com/questions/3357737/dropping-root-privileges (la réponse est principalement indépendante de la langue). – Gilles

Répondre

3

La réponse courte est d'utiliser la fonction setuid().

Il n'est pas possible de réacquérir les privilèges root après le passage à un utilisateur non root.

+1

"Il n'est pas possible de réacquérir les privilèges root après le passage à un utilisateur non root." En fait, c'est * l'essentiel * de supprimer les privilèges de superutilisateur. Vous voulez limiter l'impact des failles de sécurité dans votre programme. Si vous pouviez ré-escalader, tout exploit ciblant votre programme le pourrait aussi ... – sleske

+0

@sleske: en fait, si votre UID effectif n'est pas root, et que l'implémentation prend en charge _POSIX_SAVED_IDS, vous pouvez retrouver l'UID effectif d'origine. – ninjalj