2 votes

Pourquoi mon processus apache ne peut-il pas écrire dans mon fichier accessible en écriture dans le monde entier ?

J'ai ce problème et j'ai atteint une impasse, je voudrais essayer n'importe quoi mais j'ai atteint une impasse. Mon problème est le suivant :

J'ai un script Perl/CGI installé sur une machine Fedora 9 faisant tourner apache2, ce script a un fichier de configuration qui a été placé dans le même répertoire, ce fichier de configuration a des permissions 777.

Le script ne peut pas écrire dans le fichier. Il peut le lire mais en aucun cas je n'ai pu lui faire écrire dessus. Le fichier est détenu par le même utilisateur que celui qui fait tourner apache. J'ai écrit un petit script PHP pour tester et l'ai placé dans le même dossier. Le script PHP peut lire mais ne peut pas y écrire.

Je suis désespérée et je ne sais pas par où commencer, alors toute aide pour me mettre sur la bonne voie serait appréciée.

EDIT : Je peux ouvrir le fichier pour le modifier à partir de la ligne de commande ; c'est apache qui ne peut pas y accéder.

EDIT2 : la hiérarchie des dossiers /var/www/cgi-bin/script
Les permissions sont les suivantes
/var Root 755
www Racine 755
cgi-bin Root 755
script apache 755

EDIT : Le problème était dans selinux. Je l'ai désactivé et le script a eu accès au fichier. Merci à tous ceux qui ont contribué.

Merci d'avance

12voto

Douglas Leeder Points 29986

Est-ce que Apache fonctionne avec un profil selinux ou similaire qui l'empêche d'écrire dans ce répertoire ?

3voto

Philip Reynolds Points 5118

L'utilisateur apache n'a probablement pas les droits sur l'un des répertoires parents. Il doit avoir au moins l'autorisation d'exécuter dans tous les répertoires jusqu'au répertoire qui contient votre fichier.

EDIT : Bon, étant donné que c'est un site de programmation, un peu de code pourrait être dans l'ordre.

  1. Utilisez le chemin absolu du fichier à tester, et non le chemin relatif, pour vous assurer que vous êtes dans le bon répertoire.

  2. $ ! devrait imprimer une erreur "Permission Denied" s'il s'agit de permissions, pouvez-vous imprimer le problème avec :

    open(FILE, ">/path/to/file/config.ini") || die "Cannot open : $ !"; ... close(FILE) ;

2voto

Marko Points 13736

Peut-être qu'un autre processus a un verrou d'écriture sur le fichier ? Essayez lsof pour voir qui le tient ouvert.

2voto

Nik Reiman Points 16156

Le répertoire autorise-t-il le serveur Web à y écrire des fichiers ?

0voto

converter42 Points 3264

Je sais qu'un message précédent a abordé ce sujet, mais je pense que cela mérite d'être répété : Lorsque vous discutez d'un problème de cette nature, il est utile d'inclure le code pertinent et la sortie de l'exception. Si une opération d'E/S échoue, $ ! devrait contenir le message d'erreur du système, qui expliquerait pourquoi l'opération a échoué. Dire "ça n'a pas marché" ne nous donne pas vraiment d'éléments sur lesquels nous appuyer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X