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

Java Discussion :

Utilisation de l'Api java.io.FilePermission


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut Utilisation de l'Api java.io.FilePermission
    Bonjour;


    J'ai un petit problème d'utilisation d'api. Voila je souhaite à partir d'un programme java executer des commandes Linux. Mais le problème c'est que visiblement java me refuse l'execution de ma commande. Voici l'erreur lorsque je souhaite executé la commande ifconfig : "access denied (java.io.FilePermission <> execute)"

    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
    16
    17
    18
    19
    20
    21
     
     public String F_sExecuteCommande(String l_sCommande){
     
                //Création de l'objet Runtime et assignemant du "runtime"
                Runtime runtime = Runtime.getRuntime();
                //Création d'un nouveau processus  destiné à gérer la commande
                Process process = null;
                try{
                     //gestion des permissions d'execution sur le systeme de fichier
     
                    //execution de la commande
                    runtime.exec(l_sCommande);
                    return "Fonction exécuté" ;
                } catch(Exception err) {
                    err.printStackTrace();
                    return "Probleme lors de l'execution de la fonction " + err.getMessage();
                }
     
     
        }
    }
    Quelqu'un connait il l'utilisation de cette Api pour pouvoir exécuter des commandes systemes ?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Ta commande n'est tout simplement pas un exécutable !

    a++

    PS : Attention à bien traiter les flux d'E/S du process !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut
    Tu peux être plus précis s'il te plait ....

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Il te dit que ifconfig est peut être un script bash, ou perl, ou python et pas un binaire exécutable. J'ai pas de linux sous la main pour vérifier tout de suite.

    Edit : Note que la JVM te dit que t'as pas les droits d'exécution aussi. Je sais pas s'il faut être root pour exécuter ifconfig. Mais peut être.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Normalement ifconfig est utilisable par tous, mais peut-être n'est-ce pas le cas dans ton environnement.

    Vérifie les droits d'accès comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    olivier@rivendell:~$ ls -l /sbin/ifconfig
    -rwxr-xr-x 1 root root 72560 2008-11-11 18:11 /sbin/ifconfig
    Il faut que tous les utilisateurs aient le droit 'x', donc d'exécution.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut
    J'ai vérifié avec la commande que tu m'as donné et cela me donne le même résultat que toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    m09be@ubuntu:~$ ls -l /sbin/ifconfig
    -rwxr-xr-x 1 root root 61808 2007-12-13 11:51 /sbin/ifconfig
    c'est donc que le problème ne vient pas des droits sur mon poste ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut
    Bon j'ai opté pour une autre solution qui est de créer directemet un scritpt shell executable et à partir de l'interface mettre le chemin du script pour que java exécute le script grace à la fonction getruntime(). Mais mon problème reste persitant j'ai toujours la même erreur qui remonte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    access denied (java.io.FilePermission /home/m09be/ScriptShell.sh execute)
    Pourtant puisque j'ai rendu mon script executable cela devrait fonctionner, et java refuse toujours de l'executé

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Ta commande n'est tout simplement pas un exécutable !
    Je pense qu'il veut dire par la , que tu peux Uniquement lancer un exécutable avec runtime.exec() et donc pas de script shell. Donc si tu veux continuer à utiliser runtime.exec() pour lancer une commande , il faut que tu appels un programme qui va exécuter ton script.

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Un script shell est un exécutable.

    Peut-on voir l'appel à la fonction également ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Process process = Runtime.getRuntime().exec("/bin/sh", "-c", "ifconfig -a");
    Genre ça ?

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Plutôt genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F_sExecuteCommande("macommande");

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut
    Voici ma fonction pour exécuter mon script

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    package CommandeSystem.ExecuteCommande;
     
     
     
     
    public class C_ExecuteCommande {
     
        public C_ExecuteCommande (){
     
        }
     
     
        public String F_sExecuteCommande(String l_sCommande){
     
                //Création de l'objet Runtime et assignemant du "runtime"
                Runtime runtime = Runtime.getRuntime();
                //Création d'un nouveau processus  destiné à gérer la commande
                Process process = null;
                try{
                    process = runtime.exec(l_sCommande);
                    return "Fonction exécuté"  ;
                } catch(Exception err) {
                    err.printStackTrace();
                    return "Probleme lors de l'execution de la fonction " + err.getMessage() ;
                }
     
     
        }
    }

    Et voici mon appel à ma fonction


    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    package Interface;
     
    import CommandeSystem.ExecuteCommande.C_ExecuteCommande;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
     
    public class C_ServletPost extends HttpServlet {
     
      public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
    	//response.setContentType("text/html");
     
            String l_sCommande = request.getParameter("ChampText");
     
            C_ServletInterface1 O_InterfacePrincipale = new C_ServletInterface1();
            O_InterfacePrincipale .doGet(request, response);
     
     
            C_ExecuteCommande O_Commande = new C_ExecuteCommande();
            PrintWriter out = response.getWriter();
            out.print(O_Commande.F_sExecuteCommande(l_sCommande));
     
       }
    }

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut
    Et voici mon script shell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #! /bin/sh
    ifconfig

    Jai oublié de précisé que j'étais en local avec Tomacat 5.5 .Je suis dans une servlet est ce que cela pose problème ? car sur certain forum on parle de signature quand il y a des accès refusé.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String l_sCommande = request.getParameter("ChampText");
    Oui mais ici tu récupères quoi comme String ? juste "ifconfig" ?

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Citation Envoyé par Marie.B Voir le message
    Et voici mon script shell

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #! /bin/sh
    ifconfig

    Jai oublié de précisé que j'étais en local avec Tomacat 5.5 .Je suis dans une servlet est ce que cela pose problème ? car sur certain forum on parle de signature quand il y a des accès refusé.
    Oui, cela pose problème. Notamment pour éviter que tout un chacun exécute n'importe quelle commande auquel il n'aurait pas accès. Tu devrais donc effectivement signer ton .war (ou ton .jar, je ne sais pas).

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut
    Citation Envoyé par Elendhil Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String l_sCommande = request.getParameter("ChampText");
    Oui mais ici tu récupères quoi comme String ? juste "ifconfig" ?

    Ici je récupère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /home/m09be/ScriptShell.sh
    qui me permet d'exécuter mon script

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 72
    Par défaut
    Bon je pense avoir trouvé, le problème était dans la configuration de tomcat , il faut modifier le fichier catalina.policy qui bloquait la servlet lors de l'execution de la commande.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/04/2013, 21h13
  2. Utiliser des APIs Java en Flex
    Par tiboudchou dans le forum Flex
    Réponses: 10
    Dernier message: 18/06/2009, 17h06
  3. [Java] Utiliser une API Java en PHP
    Par Antoun dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/10/2007, 12h19
  4. utilisation d'une API java avec du C#, est ce possible
    Par iamspacy dans le forum C++/CLI
    Réponses: 1
    Dernier message: 29/05/2007, 08h00

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