J'écris une application en utilisant C sous Linux. Dans mon application, j'ai besoin de faire quelques tâches au début avec un utilisateur normal (utilisateur non root) alors que j'ai besoin de faire certaines tâches avec l'utilisateur root au milieu de l'exécution. Par ailleurs, je ne peux pas modifier les configurations de l'utilisateur normal. Donc, je ne peux pas ajouter un utilisateur normal à sudoers. Je ne peux pas non plus modifier les configurations de système d'exploitation.Comment changer d'utilisateur pendant l'exécution en utilisant C sous Linux?
Ce que mon application fait vraiment est d'exécuter des applications, obtenir leurs sorties pour l'analyse.
Certaines applications doivent être exécutées avec root. J'utilise des multi-threads pour exécuter et analyser les sorties de ces applications en parallèle puis stocke le rapport de chaque application dans un singleton appelé Report. J'appelle ces applications en utilisant execvp
en sous-processus.
Le but principal de mon application est d'automatiser les tests de logiciels. Et la plupart des tâches sont nécessaires pour exécuter dans le propriétaire du logiciel qui ne doit pas être root.
Ainsi, le problème est
- comment puis-je changer d'utilisateur lors de l'exécution?
- Y at-il de toute façon que je peux implémenter cela dans 1 exécutable?
- Pour ce faire avec les API POSIX, c'est mieux.
- Exécuter mon application avec un utilisateur normal, fournir le mot de passe root à mon application, passer à root en utilisant le mot de passe root.
http://man7.org/linux/man-pages/man2/setuid.2.html – oakad
@oakad Merci, mais est-ce possible de lancer mon application avec un utilisateur normal, puis passer en root en utilisant le mot de passe root? –
Non, bien que vous puissiez générer un processus d'assistance séparé qui s'exécute en tant que root et communiquer avec lui via IPC. Une façon de faire est de définir le bit setuid sur l'assistant. Rendre l'assistant aussi minimal que possible, en lui donnant seulement les fonctions de base qui ont réellement besoin d'un accès root, et laissez votre application principale faire le reste. –