logo Homepage
+  NewbieContest
|-+  Divers» Linux» fichier txt en php sous fedora
Username:
Password:
Pages: [1]
  Imprimer  
Auteur Fil de discussion: fichier txt en php sous fedora  (Lu 6241 fois)
romaindu86

Profil challenge

Classement : 268/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 34


Voir le profil
« le: 15 Août 2010 à 10:21:39 »

Bonjour, j'ai un script qui créer un fichier texte sous windows cela marche très bien seulement sous ferdora impossible d'en créer un en php.J'ai donner les droit 0777 au dossier et même tester en les donnant aux dossier parent.Je ne vois pas d'ou vient le problème.

Code:
$fp = fopen("monfichier.txt",'a+');

fwrite($fp, "message");

fclose($fp);

J'ai bien sur essayer en changeant "a+" en "a", "w"...
Journalisée

Ce n’est pas parce qu'une épreuve est difficile qu’on n’ose pas la faire, c’est parce qu’on n’ose pas la faire qu’elle apparait difficile.
_o_
Relecteur

Profil challenge

Classement : 42/54283

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #1 le: 15 Août 2010 à 10:59:47 »

J'ai donner les droit 0777 au dossier et même tester en les donnant aux dossier parent.

Très super méga mauvaise idée. Le premier truc à faire est de revenir aux permissions de départ. Avant de bidouiller des permissions n'importe comment, on pose les choses :
- sous quel utilisateur tourne Apache (ou qui exécute le script si ce n'est pas Apache) ?
- quel est le propriétaire du répertoire dans lequel tu souhaites écrire, et quels sont ses droits ?
- même question pour tous les répertoires parents.
- qui doit pouvoir lire ce fichier après sa génération ?
Et seulement à partir de ce moment là, on pose les bons propriétaires et permissions.

Citation
J'ai bien sur essayer en changeant "a+" en "a", "w"...

Bon, mais quelle est l'erreur donnée par PHP ? S'il est fortement déconseillé d'activer l'affichage des erreurs sur un serveur en production, c'est par contre tout à fait utile à des fins de débogage.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
romaindu86

Profil challenge

Classement : 268/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 34


Voir le profil
« #2 le: 15 Août 2010 à 12:13:17 »

Je ne c'est pas comment autoriser l'affichage des erreur. le chemin qui mène jusqu'à mon répertoire est "/var/www/html/monscript.php".
Je me connecte avec un user :"romain" qui n'a pour l'ensemble de ces répertoire(qui appartiennent au root) que le droit de lecture.Le but du script "monscript.php" est juste de créer un fichier texte dans le même répertoire.De plus c'est le script lui même qui lira ce fichier texte par la suite enfin je teste avec un fichier texte mais ensuite se serra un fichier png,mon script récupère une image png et exécute une commande Linux qui lit le texte sur cette image.
Journalisée

Ce n’est pas parce qu'une épreuve est difficile qu’on n’ose pas la faire, c’est parce qu’on n’ose pas la faire qu’elle apparait difficile.
_o_
Relecteur

Profil challenge

Classement : 42/54283

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #3 le: 15 Août 2010 à 12:29:47 »

Il va falloir être un peu plus précis.

Le script est exécuté par Apache ou par php-client ?
Dans le premier cas, pourquoi me parles-tu de l'utilisateur romain ? Et sous quelle identité fonctionne Apache ?
Dans le deuxième cas, pourquoi mettre le script sous /var/www/html ?

Et surtout, comment peux-tu être sûr que le fichier va être créé dans ce répertoire là, alors que tu ne précises pas le chemin en absolu dans ton fopen ? Il faut toujours se méfier de la notion de répertoire courant, très dépendante de l'environnement d'exécution.
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
romaindu86

Profil challenge

Classement : 268/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 34


Voir le profil
« #4 le: 15 Août 2010 à 12:37:07 »

Citation
Le script est exécuté par Apache ou par php-client ?
par un client php : LAMP

Citation
dans le premier cas, pourquoi me parles-tu de l'utilisateur romain ?
Car au lancement de fedora je me connecte sous l'utilisateur "romain"

Citation
Et sous quelle identité fonctionne Apache ?
Désolé mes connaissance étant réduite sous linux je ne vois pas ce que cela veut dire

Citation
Dans le deuxième cas, pourquoi mettre le script sous /var/www/html ?
car avec LAMP les script doivent être placés dans ce répertoire

Citation
Et surtout, comment peux-tu être sûr que le fichier va être créé dans ce répertoire là, alors que tu ne précises pas le chemin en absolu dans ton fopen ?
Car mon script php est citué dans ce même répertoire
Journalisée

Ce n’est pas parce qu'une épreuve est difficile qu’on n’ose pas la faire, c’est parce qu’on n’ose pas la faire qu’elle apparait difficile.
_o_
Relecteur

Profil challenge

Classement : 42/54283

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #5 le: 15 Août 2010 à 14:04:53 »

C'est pas encore gagné. Plus simple : ton script, tu l'exécutes sur une ligne de commande ou dans un navigateur ?

On va faire l'hypothèse que c'est le navigateur, donc apache. Dans ce cas, on se fiche de l'utilisateur sous lequel tu te connectes.

Pour connaître l'identité sous laquelle tourne Apache, le plus simple dans ton cas, tape la ligne de commande suivante et donne nous le résultat :
Code:
ps -eaf | egrep "(apache|httpd)" | grep -v grep
(je parie pour un utilisateur apache pour le process maître et www-data pour les autres)

Ensuite, quels sont les droits du répertoire :
Code:
ls -ld /var/www/html
(je parie qu'il appartient à root au lieu de www-data)
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
romaindu86

Profil challenge

Classement : 268/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 34


Voir le profil
« #6 le: 15 Août 2010 à 23:19:48 »

Citation
-eaf | egrep "(apache|httpd)" | grep -v grep

Code:
[romain@hote ~]$ ps -eaf | egrep "(apache|httpd)" | grep -v grep
root      1603     1  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1645  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1646  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1647  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1648  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1649  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1650  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1651  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1652  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd

Citation
ls -ld /var/www/html
Code:
[romain@hote ~]$ ls -ld /var/www/html
drwxrwxrwx. 2 romain romain 4096 15 août  15:52 /var/www/html

j'exécute mon script dans un navigateur.cela changrrais quelque chose que je l'exécute en ligne de commande?


Journalisée

Ce n’est pas parce qu'une épreuve est difficile qu’on n’ose pas la faire, c’est parce qu’on n’ose pas la faire qu’elle apparait difficile.
_o_
Relecteur

Profil challenge

Classement : 42/54283

Membre Héroïque
*
Hors ligne Hors ligne
Messages: 1258


Voir le profil
« #7 le: 16 Août 2010 à 07:33:41 »

Code:
root      1603     1  0 02:14 ?        00:00:00 /usr/sbin/httpd
apache    1645  1603  0 02:14 ?        00:00:00 /usr/sbin/httpd

Le process root est le maître, qui a la possibilité d'ouvrir le port 80 en écoute et gère les requêtes reçues vers ses fils. Ceux-ci fonctionnent sous l'identité apache, pour éviter les catastrophes en cas de faille.

Code:
drwxrwxrwx. 2 romain romain 4096 15 août  15:52 /var/www/html

Ce n'est pas normal, que ce soit du point de vue des permissions comme du propriétaire. En toute logique, le propriétaire devrait être apache et seul lui devrait pouvoir modifier le contenu (voir même le lire si on est facho) :
Code:
chown -R apache:apache  /var/www/html
chmod 755  /var/www/html

Attention, cela a pour conséquence qu'un utilisateur simple (dont romain) n'a plus le droit d'éditer les fichiers contenus dans le répertoire en question. Deux solutions possibles :
- utiliser sudo pour éditer les fichiers.
- utiliser le groupe en ajoutant l'utilisateur romain au groupe apache et donner les droits de modifications au groupe dans le répertoire (chmod -r g+w /var/www/html ).

A partir de là, tu reviens à une situation correcte. Et si ça ne marche pas, il sera temps de voir, mais il vaut mieux éviter de bricoler les permissions. Je te conseille quand même de spécifier le nom du fichier en absolu dans ton fopen, et d'activer temporairement l'affichage des erreurs PHP pour débugger (Cf. la doc PHP pour ce dernier point).

j'exécute mon script dans un navigateur.cela changrrais quelque chose que je l'exécute en ligne de commande?

Oui, tu changerais l'environnement d'exécution (pas de contrainte sur le répertoire dans lequel mettre le script, exécution sous l'identité de l'utilisateur qui le lance, etc...). Cela nécessite un package particulier (par exemple php5-cli sous debian).
Journalisée

Les épreuves de hack de NC sont trop faciles ? Et pourtant ! Bienvenue dans la vraie vie : http://thedailywtf.com/Articles/So-You-Hacked-Our-Site!.aspx
romaindu86

Profil challenge

Classement : 268/54283

Néophyte
*
Hors ligne Hors ligne
Messages: 34


Voir le profil
« #8 le: 16 Août 2010 à 10:45:52 »

Je te remercie pour toutes ces précisions le problème était bien en rapport avec les droits,je n'avais deja pas penser que en lançant mon script en ligne de commande l'utilisateur ne serrais plus le même,tout fonctionne parfaitement même en créent un groupe avec apache.Encore merci pour ce temps accordé à répondre à mes questions.
Journalisée

Ce n’est pas parce qu'une épreuve est difficile qu’on n’ose pas la faire, c’est parce qu’on n’ose pas la faire qu’elle apparait difficile.
Pages: [1]
  Imprimer  
 
Aller à: