IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Exécuter une instruction de root dans un code JAVA


Sujet :

Linux

  1. #1
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut Exécuter une instruction de root dans un code JAVA
    Salut à tous,

    J'ai cette instruction en JAVA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cmd = new String[]{ "/bin/bash", "-c","sudo mkdir /root/Nouveaudossier"};
    
    Process p = Runtime.getRuntime().exec(cmd);
    le problème c'est que je dois entrer le mot de passe pour passer en mode root afin de pouvoir exécuter mon opération ...

    Que suggérez-vous de faire?

    Merci

  2. #2
    Membre confirmé Avatar de satenske
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 143
    Points : 477
    Points
    477
    Par défaut
    Et tu ne peux pas lancer ton programme en tant que root? :/

  3. #3
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Oui je peut (en utilisant le console...)

    Mais je veut le faire en ligne de code, en java !

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Je vois deux solutions possibles :

    • Une simple mais horriblement dangereuse : passer ton user en NOPASSWD dans /etc/sudoers (à proscrire !!!)
    • Une moins simple et plus sûr : se renseigner sur expect

    Cordialement,
    Idriss

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par L'aigle de Carthage Voir le message
    Salut à tous,

    J'ai cette instruction en JAVA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cmd = new String[]{ "/bin/bash", "-c","sudo mkdir /root/Nouveaudossier"};
    
    Process p = Runtime.getRuntime().exec(cmd);
    le problème c'est que je dois entrer le mot de passe pour passer en mode root afin de pouvoir exécuter mon opération ...

    Que suggérez-vous de faire?

    Merci
    vadé retro satanas !

    jamais il ne faut lancer d'action root depuis un binaire jamais !

    le prochain que je choppe à coder avec les pieds ce genre d'immondice, je me démerde pour inventer un amplificateur de douleur auto-alimenté, le rendre immortel, et le jeter dans un bocal géant d'acide, afin que sa souffrance soit non seulement éternelle mais aussi exponentielle !




    maintenant si tu as un besoin absolu parce que tu n'as pas d'autres solution, il faut que l'action lancée soit un script bash ou autre installé en même temps que l'application, lancé par l'application.... et seul ce dernier utilisera des droits sudo !!! mais pas l'application !!!! jamais !!!!

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 123
    Points
    28 123
    Par défaut
    C'est effectivement une erreur que de donner les droits root a toute une application, car la faille de securite est enorme.

    Pourquoi as-tu absolument besoin de creer ce dossier dans /root ? Est-ce que tu ne peux pas le creer ailleurs ?

  7. #7
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonsoir.

    Effectivement, je n'avais pas fait attention à la commande en question ... pourquoi dans /root ? Quelles données vont être stockées dans ce répertoire par la suite ? Il y a surement une autre solution plus propre et plus sure (faudrait nous en dire plus pour qu'on puisse t'orienter) ...

    Cordialement,
    Idriss

  8. #8
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    Il y a une solution. Passer par incron.
    Cet utilitaire surveille un répertoire et lance un script en réponse à la création, suppression,... d'un fichier.
    Si avec ton appli tu crée un fichier <mon_répertoire_a_créer> contenant une seule lignetu peut très simplement faire exécuter l'action par root à la création du fichier <mon_répertoire_a_créer>.

    Voici un exemple d'un script que j'ai fait pour sortir la somme md5 d'un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/bash
    ##############################
    #
    # script générant les hash md5
    # recoit en paramêtre => $1 : le répertoire / $2 :le nom du fichier
    #
    ###############################
    #
    # deplacement repertoire de création des md5
    cd $1
    # creation somme md5 seulement si ce n'est pas un fichier .md5'
    if [[ ${2#*.} != "md5" ]]
    	then
    		md5sum $2 > ${2%.*}".md5"
    fi
    voici la ligne que j'ai placé dans incrontab
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/<user>/md5 IN_CLOSE_WRITE,IN_MOVED_TO /home/<user>/scripts/incron_md5.sh $@ $#
    $@ => nom du répertoire surveillé
    $# => nom du fichier déplacé (IN_MOVED_TO) ou créé (IN_CLOSE_WRITE)
    /home/<user>/md5 => répertoire à surveiller
    /home/<user>/scripts/incron_md5.sh => script à appeler pour exécuter une action

    Avantage de cette méthode c'est que tu peux utiliser le même répertoire pour des actions différentes.
    Par exemple :
    fichier.crea => création d'un répertoire
    fichier.supp => suppression d'un répertoire
    ....

    Il suffit d'intégrer quelques tests dans le script de surveillance et tu fait ce que tu veux.

    Apparemment, il semble que tu ne puisse avoir qu'un seul script par répertoire surveillé.

  9. #9
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Merci pour vos suggestions ...

    En effet, je ne veux pas créer un dossier sous root (c'était juste un exemple pour vous expliquer mon problème) ...

    Je veut exécuter une instruction qui demande les privilèges d'un administrateur....

    1- Si je vais opter pour la solution du script, est ce que vous pouvez m'expliquer de plus par un exemple?

    2-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd = new String[]{ "/bin/bash", "-c",
    ce bout de code permet de "simuler" en quelques sorte le console, n'est ce pas? alors est ce qu'il y a un moyen permettant de simuler cette console mais directement en mode admin ... (je ne sais pas, y a t il une option à ajouter, un argument à modifier ... je dis n'importe quoi)?

    Merci pour vous tous !

  10. #10
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    J'ai testé avec ce script (que je l'ai nommé runinstance):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/expect -f
     
    set force_conservative 1;
     
    set timeout 3
    spawn sudo -s
    expect "password:\r"
    send -- "XXXXXXX\r"
    interact
    J'ai exécuté ce script à travers la commande :

    . runinstance
    mais j'ai eu comme réponse, dans la console:

    No command 'spawn' found, did you mean:
    Command 'spawg' from package 'spawg' (universe)
    spawn: command not found
    couldn't read file "password:\r": no such file or directory
    Le programme «*send*» se trouve dans les paquets suivants*:
    * mailutils-mh
    * nmh
    Essayez*: sudo apt-get install <paquet sélectionné>
    interact: command not found
    Que dois-je faire?

  11. #11
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Je me demande si cette solution est efficace ou bien y a til une personne qui a réussi à le faire fonctionner?

  12. #12
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    utiliser expect est encore une connerie (en terme de sécurité cette fois ci)

    il faut utiliser les clef ssh de connections.

  13. #13
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Je peut m'en passer de la sécurité !

    J'ai pas besoin de l'aspect sécurité ... je veut faire fonctionner cette instruction (quelque soit les risques !)

  14. #14
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Bonjour.

    Je t'ai déjà indiqué la solution la plus simple et la moins sécurisée ... encore une fois je ne te la conseil pas (c'est une faille énorme). Après c'est toi qui voit.

    Franchement, quant il est possible de ne pas négliger la sécurité, pourquoi s'en passer ? Je rejoint l'avis de frp31 : l'idée des clefs ssh est de loin, la meilleur solution ...

    • /etc/sudoers avec NOPASSWD : tout le monde qui arrive à se loguer sur ta session pourra exécuter des commandes root.
    • expect : c'est déjà mieux mais ton passwd sera visible depuis les sources (et le Java est facilement décompilable) ... sans parler d'autres risques d'incohérence en changeant le mot de passe, etc


    Cordialement,
    Idriss

  15. #15
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Si je change dans le fichier /etc/sudoers avec NOPASSWD, dois je redémarrer le PC pour appliquer les changements?

  16. #16
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 452
    Points
    19 452
    Par défaut
    Snif ... bon ben si tel est ton choix.

    Citation Envoyé par L'aigle de Carthage Voir le message
    Si je change dans le fichier /etc/sudoers avec NOPASSWD, dois je redémarrer le PC pour appliquer les changements?
    Non il suffit d'enregistrer le fichier normalement ...

    Encore une fois, renseignes toi sur SSH, c'est pas sorcier ...

    Idriss

  17. #17
    Membre averti Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Points : 410
    Points
    410
    Par défaut Et la solution C ?
    Bonjour,

    Désolé, j'arrive peut-être après le train ...

    Mais je souhaitais juste évoquer une solution que j'ai souvent mis en oeuvre sur ce genre de problème : rédiger l'algorithme nécessitant des droits systèmes élevés (system dependant donc...) en langage C.

    Partant de là, il suffit de coller le setUID bit au binaire que l'on donne en nue propriété à root (chmod u+s ... && chown root) et mettre une ligne setuid(0) dans le code C.

    L'avantage de cette solution, c'est qu'on peut faire pas mal de checks de sécurité avant d'acquérir les droits root comme par exemple, vérifier que le process appelant est bien celui prévu dans les conditions nominales, etc.

    @+

Discussions similaires

  1. introduire le mot de passe root dans un code JAVA
    Par L'aigle de Carthage dans le forum Linux
    Réponses: 9
    Dernier message: 06/05/2011, 12h32
  2. appel d'une vue pl/sql dans du code java
    Par coolcoolcool dans le forum Général Java
    Réponses: 5
    Dernier message: 08/09/2010, 13h49
  3. [HTML 5] Exécuter une instruction dans la console sur le client à partir d'un lien ?
    Par yoyolichalu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 19/02/2010, 12h05
  4. Exécution d'une instruction à chaque passage dans une boucle
    Par monichou86 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/11/2009, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo