Aller au contenu

[Java] Lancer une commande root


fabien29200

Messages recommandés

Hello à tous !

Dans le cadre d'une "révision" de Swing, j'ai voulu faire une petite appli qui serait amenée à lancer des commandes en root (sous Linux bien sûr).

J'essaie depuis hier après-midi et je n'ai toujours pas réussi à lancer une commande en root ... :craint:

Je passe bien évidemment par la classe Runtime.

J'ai d'abord tenté de lancer la commande "su". Mais j'ai une erreur comme quoi su ne se lance pas hors d'un terminal.

Je suis donc passé à sudo, mais je n'obtiens pas la demande du mot de passe dans l'InputStream du process.

J'ai essayé ensuite ssh, mais là encore une erreur : "exec(/usr/lib64/misc/ssh-askpass): No such file or directory"

Bref, j'ai pas mal cherché sur le net, et ça a visiblement l'air très complexe de faire lancer une élévation de privilège à Java ...

Quelqu'un a déjà été confronté à ce problème ?

Lien vers le commentaire
Partager sur d’autres sites

Hm donc il faut une élévation de privilèges.

Effectivement tu peux utiliser su ou sudo, mais tu n'as pas une lib pour l'utiliser directement plutôt que de lancer le binaire ?

Au pire tu peux utiliser expect, mais ça rajoute encore un layer.

Sinon pour ssh-askpass, ça ne va pas le faire, à moins que tu compte t'en servir pour récup le passe dans ton programme.

Lien vers le commentaire
Partager sur d’autres sites

Je ne sais pas si tu vois bien ce que je veux faire.

Je veux qu'un utilisateur lance le logiciel (en mode utilisateur) et que le logiciel lui demande le mot de passe root pour ensuite lancer des commandes root.

Mais lancer les commandes dans le logiciel avec la classe Java pour lancer des commandes externes.

Lien vers le commentaire
Partager sur d’autres sites

Je pense que j'ai compris, encore que j'ai du mal à comprendre quand tu mets un "mais" entre deux phrases affirmatives :craint:

Je ne connais pas java ni les classes pour lancer un logiciel. Mais je n'ai jamais eu de problèmes pour lancer un su ou un sudo depuis un script (perl, sh, bash) ou un code compilé en c (avec un fork+execlp).

Est ce que tu connais expect (tu as peut être une classe qui le ré-implémente en java ceci dit), ça me semble répondre à ton besoin : Tu lances le sudo tacomande grâce à expect puis tu te débrouille pour qu'il lui file le mot de passe quand il le demande.

Ce n'est pas compliqué. Pour une connexion ssh par exemple, j'avais fait ça :

 \"The authenticity\"	{send yes\n; exp_continue}
 \"assword\"		   {send $PASS\r; exp_continue}
}

Et ça fonctionne tout seul.

Lien vers le commentaire
Partager sur d’autres sites

;)

En fait, dans le cadre de mon boulot, je vais probablement être amené à bosser en Swing.

Pour m'y remettre, j'ai pris un cas concret : faire une interface d'admin linux.

Bon évidemment, pour l'instant je me suis + préoccupé de la structuration du code (MVC, listeners, SwingWorker, AbstractAction, i18n ....) que de mettre 10 000 fonctionnalités. Et pour cause, à l'heure actuelle, ça ne fait que lspci et lsusb :up:

Et je n'ai pas encore géré la demande graphique du mot de passe, il est mis en dur dans le code ;)

Mais voilà, c'était l'idée.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...