fabien29200 Posté(e) le 4 novembre 2008 Partager Posté(e) le 4 novembre 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 4 novembre 2008 Partager Posté(e) le 4 novembre 2008 Ton programme tourne en root ou pas ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 4 novembre 2008 Auteur Partager Posté(e) le 4 novembre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 4 novembre 2008 Partager Posté(e) le 4 novembre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 4 novembre 2008 Auteur Partager Posté(e) le 4 novembre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 4 novembre 2008 Partager Posté(e) le 4 novembre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 4 novembre 2008 Auteur Partager Posté(e) le 4 novembre 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 6 novembre 2008 Partager Posté(e) le 6 novembre 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 6 novembre 2008 Auteur Partager Posté(e) le 6 novembre 2008 Oui, c'est ce que ça fait. Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 6 novembre 2008 Partager Posté(e) le 6 novembre 2008 une sorte de gksu, gksudo, kdesu ou kdesudo Lien vers le commentaire Partager sur d’autres sites More sharing options...
Charles.w Posté(e) le 6 novembre 2008 Partager Posté(e) le 6 novembre 2008 du judo quoi Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 7 novembre 2008 Auteur Partager Posté(e) le 7 novembre 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.