Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/09/2021, à 17:40

Omega38

[RESOLU] Appel d'un script sh necessitant d'être sudo depuis java

Bonjour à tous,

J'ai un programme java qui appelle un script renommant une clé USB par la commande

sudo dosfslabel $1 LENOMDELACLE

$1 étant le chemin de la clé envoyé par le programme java.

Je souhaite ne pas avoir à saisir plusieurs fois le mot de passe sudo lorsque je travaille plusieurs clé successivement.

Une première solution consiste à ce que le script demande le mot de passe utilisateur avec la commande

export SUDO_ASKPASS=/usr/bin/ssh-askpass

et à augmenter le "timestamp" de la session.
Cela fonctionne, mais l'augmentation du "timestamp" ne me convient pas.

J'ai essayé une seconde solution consistant à modifier le sudoers par visudo en ajoutant la ligne :

user ALL=(ALL) NOPASSWD:/media/...../monscript.sh

Le mot de passe n'est pas demandé, mais la clé n'est pas renommée.
Je dois faire une erreur dans la mise en œuvre de cette solution, mais je ne vois pas laquelle.

Par ailleurs, je n'ai pas trouvé un moyen d'envoyer le mot de passe dans un paramètre depuis le programme java.

Merci de votre aide.

Dernière modification par Omega38 (Le 17/09/2021, à 13:54)

Hors ligne

#2 Le 16/09/2021, à 21:53

soshy

Re : [RESOLU] Appel d'un script sh necessitant d'être sudo depuis java

Salut,
En gardant ta ligne dans sudoers et en retirant sudo à l'intérieur du script (il faut invoquer le script avec sudo en contre partie) ça ne fonctionne pas ?

Une autre option, ça serai au démarrage de ton programme, vérifier qu'il a les droits root, sinon qu'il se relance automatiquement avec sudo ou gksudo

Dernière modification par soshy (Le 16/09/2021, à 21:57)

Hors ligne

#3 Le 17/09/2021, à 13:50

Omega38

Re : [RESOLU] Appel d'un script sh necessitant d'être sudo depuis java

Bonjour,

Merci de ta réponse, j'ai testé ta première solution, mais malheureusement, elle ne fonctionne pas. Je n'ai pas compris ce que tu proposes dans ta seconde idée, pourrais-tu me donner plus d'explication?

Entre temps, je viens de trouver une solution qui me paraît relativement propre et que je propose ici, si cela peut intéresser quelqu'un :

  • le programme java demande à son lancement le mot de passe administrateur et le stocke dans une variable,

  • le script est lancé depuis le programme java en passant 2 paramètres : le point de montage de la clé, et le mot de passe administrateur

  • la commande est modifiée dans le fichier sh de la façon suivante :

    echo $2 | sudo -S dosfslabel $1 NOMDELACLE

    avec $1 = point de montage et $2 mot de passe

Le mot de passe est perdu lors de la fermeture du programme java et doit être réintroduit lors du lancement suivant.

Hors ligne

#4 Le 17/09/2021, à 21:40

soshy

Re : [RESOLU] Appel d'un script sh necessitant d'être sudo depuis java

ça marche tant mieux, mais c'est un antipattern, une mauvaise façon de faire.

Les 2 options correcte de procéder sont :
- parvenir à mettre en place le nopasswd sur le script
- Que le programme vérifie si il a été lancé en sudo, sinon, qu'il se relance avec sudo ou gksudo

Si je ne dis pas de bêtise, si tu lances ton programme en sudo à la main, il devrait fonctionner, donc l'astuce, c'est que le programme vérifie qu'il a été lancé avec les droits d'administration, et sinon, il s'auto relance mais avec sudo/gksudo.
Concrètement, je ne l'ai jamais fait, mais j'imagine que ça doit être possible et que ça donnerait un truc du genre

if (!isRoot()) {
     System.exec("gksudo java -jar /path/to/jar/file")
     System.exit()
}

Franchement, si un programme autre que le système me demande le mot de passe administrateur, jamais je l'utilise. Concrètement, on ne sait pas ce que le programme va en faire...

Dernière modification par soshy (Le 17/09/2021, à 21:46)

Hors ligne