Utilisateur de Runtime.exec (cmd)

Lorsque nous Runtime.exec(cmd) , de quel utilisateur sera-t-il exécuté? Par exemple, user1 (sur Unix) java -jar Test.jar . Dans ce programme, nous avons Runtime.exec("whoami") . Quel identifiant d’utilisateur devons-nous recevoir?


J’ai terminal terminal, où a été exécuté chrootuid cmd et il existe un programme java. Et en quelque sorte, whoami commande de ce pr. retourne NOT SAME ID utilisateur en tant que propriétaire de chrootuid , dont Jp est le nom. Quelqu’un peut-il expliquer cela?

Comme le dit @SLaks, le script sera exécuté en tant que même utilisateur que celui qui a lancé la JVM.

Fatigué:

  • la JVM est lancée dans un processus;
  • ce processus a beaucoup de données héritées de son parent, le long desquelles l’utilisateur qui l’a lancé;
  • l’API Java standard n’a aucun moyen de modifier l’utilisateur;
  • même si elle avait une telle puissance, changer l’utilisateur en cours d’exécution nécessiterait de toute façon des privilèges élevés.

Donc, voilà: le processus “forked” s’exécutera avec les mêmes informations d’identification que la JVM.


Maintenant, quelques informations supplémentaires sur l’exécution d’un processus séparé en général …

En Java, vous voulez vraiment utiliser ProcessBuilder au lieu de Runtime.exec() pour les raisons suivantes:

  • il vous permet de contrôler la sortie d’E / S;
  • il vous permet de spécifier les arguments de la ligne de commande “le bon sens” (pensez: argument avec des espaces);
  • cela vous permet de différer l’exécution ( .start() ).

Mais cela ne vous permet clairement pas de contrôler avec précision les ressources partagées, ni les modifications de privilèges, comme le font les API natives. Cependant, ProcessBuilder est bien mieux que Runtime.exec() , mais Java n’a pas encore connu de changement radical pour la gestion des processus, car le nouveau File java.nio.file est File : a revolution.

Tous les processus enfants sont exécutés avec le même utilisateur que le processus parent.