#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