web-dev-qa-db-fra.com

java.io.FileNotFoundException (autorisation refusée) malgré chmod 777

J'ai été confronté à un problème étrange lors de l'écriture de l'application Grails déployée sur Tomcat.

Après avoir créé un contrôleur de test simple, je souhaite écrire le contenu du test dans le package

package com.domain.controller

import Java.io.File;
import Java.io.PrintWriter;

class TestController {

        def index() {
                // test
                try {
                        PrintWriter writer = new PrintWriter("/home/user/domains/domain.com/public_html/the-file-name.txt");
                        writer.println("The first line");
                        writer.println("The second line");
                        writer.close();
                } catch (IOException e) {
                        throw new RuntimeException(e);
                }
        }
}

Je reçois une exception:

Classe Java.io.FileNotFoundException Message /home/user/domains/domain.com/public_html/the-file-name.txt (Brak dostępu)

J'ai mis le chmod à 777 dans /home/user/domains/domain.com/public_html/. Et Tomcat7.Tomcat7 est propriétaire. J'ai également essayé de créer ce fichier avec les droits d'accès 777 et la propriété définie sur Tomcat7, mais j'obtiens toujours une exception:

ls -al /home/user/domains/domain.com/public_html
razem 16
drwxrwxrwx 3 Tomcat7 Tomcat7 4096 01-08 23:25 .
drwxr-xr-x 8 user    user    4096 12-16 17:14 ..
-rwxrwxrwx 1 Tomcat7 Tomcat7    0 01-08 23:25 the-file-name.txt

Quelles conditions d'OS dois-je également rencontrer?

Je serais très reconnaissant si quelqu'un pouvait clarifier le problème.


MODIFIER:

J'ai créé le répertoire sous /path1, jeu 777. Les fichiers sont parfaitement stockés . J'ai également créé le répertoire sous /path2/testdir, mais path2 ne dispose pas des autorisations 777 et chown. Cela fonctionne aussi. J'ai également testé la testdir avec les caractères . et _, fonctionne également.

Je suis très investigateur et ne peux pas comprendre le comportement.

19
Athlan

Assurez-vous que vous avez également lu et exécuté l'accès à tous les répertoires parents.

Exemple: chmod o+x /home/user

20
JustinKSU

Enfin, j'ai résolu le problème. Un des répertoires de path n’ayant pas l’autorisation exécutable pour un autre groupe, ainsi, comme @JustinKSU l’a suggéré, il n’était pas possible de parcourir l’ensemble du chemin.

chmod o+x /home/user a résolu le problème.

6
Athlan

J'ai rencontré ce problème lors de la création d'un travail Jenkins. J'avais ajouté l'utilisateur jenkins au groupe Tomcat7, mais le travail Jenkins échouait lorsqu'il était supposé copier des artefacts dans le répertoire d'instance Tomcat.

En fin de compte, tout ce dont j'avais besoin pour résoudre ce problème était de redémarrer le service Jenkins.

1
Abdull

FileNotFoundException se produit: 

quand un fichier avec le chemin spécifié n'existe pas. Il faudra aussi être jeté si le fichier existe mais pour certains la raison est inaccessible, par exemple lorsqu’on tente d’ouvrir un fichier fichier en lecture seule pour l'écriture.

Le fichier est là et il a les droits d'écriture en fonction de ce que vous avez envoyé.

Dans certains cas, si le fichier auquel vous essayez d'accéder pour une opération de lecture/écriture est ouvert par un autre programme, cette erreur se produit. Utilisez lsof | grep the-file-name.txt pour voir s’il est ouvert. 

1
user987339

Même symptôme lorsque vous avez activé selinux
Vous pouvez vérifier l’état avec sestatus et le désactiver avec setenforce 0

Cela peut résoudre votre problème à court terme, assurez-vous simplement qu’il est résistant au redémarrage. 

0
MonoThreaded