fabien29200 Posted November 4, 2008 Share Posted November 4, 2008 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 ... 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 ? Link to comment Share on other sites More sharing options...
theocrite Posted November 4, 2008 Share Posted November 4, 2008 Ton programme tourne en root ou pas ? Link to comment Share on other sites More sharing options...
fabien29200 Posted November 4, 2008 Author Share Posted November 4, 2008 Non, justement. Le but serait de demander à l'utilisateur un mot de passe (root pour su ou ssh, celui de l'utilisateur pour sudo) et de le passer en entrée du process. Link to comment Share on other sites More sharing options...
theocrite Posted November 4, 2008 Share Posted November 4, 2008 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. Link to comment Share on other sites More sharing options...
fabien29200 Posted November 4, 2008 Author Share Posted November 4, 2008 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. Link to comment Share on other sites More sharing options...
theocrite Posted November 4, 2008 Share Posted November 4, 2008 Je pense que j'ai compris, encore que j'ai du mal à comprendre quand tu mets un "mais" entre deux phrases affirmatives 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. Link to comment Share on other sites More sharing options...
fabien29200 Posted November 4, 2008 Author Share Posted November 4, 2008 Bon, j'ai réussi à faire marcher le sudo. Ca devait être juste le fait qu'au moment du Debug, la thread chargée de récupérer la sortie standard du process n'avait pas encore récupéré le texte demandant le mot de passe. Mais en balançant le mot de passe, ça fonctionne Link to comment Share on other sites More sharing options...
lorinc Posted November 6, 2008 Share Posted November 6, 2008 En fait, ton programme fais à peu près ceci : 1. Afficher une fenêtre demandant le mdp root 2. Récupérer l'entrée de l'utilisateur 3. lancer la commande "sudo programme_à_lancer" en recopiant le mdp lu sur l'entrée standard du process ainsi créé. C'est ça ? Link to comment Share on other sites More sharing options...
fabien29200 Posted November 6, 2008 Author Share Posted November 6, 2008 Oui, c'est ce que ça fait. Link to comment Share on other sites More sharing options...
lorinc Posted November 6, 2008 Share Posted November 6, 2008 une sorte de gksu, gksudo, kdesu ou kdesudo Link to comment Share on other sites More sharing options...
Charles.w Posted November 6, 2008 Share Posted November 6, 2008 du judo quoi Link to comment Share on other sites More sharing options...
fabien29200 Posted November 7, 2008 Author Share Posted November 7, 2008 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 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.