TOMCAT - Servlet - Création d'un fichier sur le disque - Permission denied !

kriesgraf Messages postés 33 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 17 février 2021 - 8 janv. 2009 à 16:46
kriesgraf Messages postés 33 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 17 février 2021 - 9 janv. 2009 à 09:58
Exposé du problème:


Sur une machine Debian/Linux où j'ai installé un serveur TOMCAT 5.5,
J'ai démarré le serveur sous le user "root",
Dans un servlet j'essaie de créer un fichier sur la machine,
Le fichier est "/data/test.txt",
Les droits sur le répertoire sont les suivants:

drwxr-xr-x  6 root root  4096 2009-01-08 19:11 data

Le serveur m'affiche la page "Apache Tomcat-5_5 - Rapport d'erreur" avec la pile d'erreur suivante:

java.io.IOException: Permission denied
     java.io.UnixFileSystem.createFileExclusively(Native Method)
     java.io.File.createNewFile(File.java:850)
     com.eclipsetotale.HelloServlet.doGet(HelloServlet.java:53)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:802)



Mon code source est le suivant:


protected void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException
 {
  String  qui= request.getParameter("qui");
  PrintWriter out= response.getWriter();
  
  response.setContentType("text/html");
  out.println("<head><title>Tutorial WTP</title></head>");
  out.println("");
  out.println("SN: " + serialVersionUID + "!
");
  out.println("Bonjour " + qui + "!");
  out.println("");


     File file = new File("/data/", "test.txt");  
     file.createNewFile();
     FileOutputStream stream= new FileOutputStream(file);
     OutputStreamWriter fout = new OutputStreamWriter(stream);
     fout.write(qui);
     fout.flush();
     stream.flush();
     fout.close();
     stream.close();
 }

Questions:

Pour supprimer cette erreur:
1) Le serveur TOMCAT n'a pas les permissions "root", il faut configurer ça où ?
2) Il faut rajouter les paramètres/permissions "root" à l'objet "FileOutputStream" ou "File", ou bien ajouter une ligne de commande où ?

Merci d'avance
kriesgraf

1 réponse

kriesgraf Messages postés 33 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 17 février 2021
9 janv. 2009 à 09:58
1) J'ai essayé de changer le userid dans le fichier : /etc/init.d/tomcat5.5

    Clé : TOMCAT5_USER

En mettant le userid "root", tomcat5.5 ne démarrait plus du tout, car il ne pouvait plus accéder au fichier:

    /var/lib/tomcat5.5/work/Catalina/localhost/manager/SESSIONS.ser

Alors j'ai regardé les droits sur ce fichier:

    -rw-r--r-- 1 tomcat55 nogroup

Du coup j'ai changé les droits sur le répertoire : /data

    chown tomcat55 /data

Et maintenant ça marche.

2) J'ai quand même rajouté dans la méthode "doGet" l'instruction :

    System.setSecurityManager(null);

3) Est-ce réellement nécessaire ?

kriesgraf
0
Rejoignez-nous