Etre propriétaire d'un fichier / dossier

Eléphanteau du PHP | 33 Messages

19 août 2011, 21:13

Bonjour,

Voilà je me pose une question toute bête.
Comment définir qui est propriétaire d'un fichier et/u d'un dossier.
Voici mon problème :
Sur un site que je développe en ce moment, j'ai des scripts php qui manipulent des fichiers (textes, xml, html, ...) en lecture, écriture.
Au passage une petite question, l'exécution c'est pour exécuter un script à l'intérieur depuis l'extérieur je suppose ?

La seule solution pour que mes scripts puissent manipuler (ouvrir / écrire) est que je passe en mode 777 ces fichiers en questions.
Or il y a là une grosse faille de sécurité me semble-t-il, non ?

Comment ses fesses, euh se fait-ce que le mode 755 ne suffise pas ?
Les scripts php sont sur le même serveur apache que les fichiers à manipuler.
Ils ne sont pas intrinsèquement propriétaire ?
Y'a-t-il une manipulation à faire ?

Merci d'avance de m'éclairer !

ugo

Mammouth du PHP | 2278 Messages

19 août 2011, 22:48

Probablement parce que tes répertoires et tes fichiers n'ont pas comme groupe le groupe de Apache ou de ce qui exécute httpd (le démon du serveur web)
1) Identifier ce compte
ps -ef|grep httpd
et tu vas avoir une liste de procès de ce genre:

Code : Tout sélectionner

root 2064 1 0 Aug16 ? 00:00:10 /usr/sbin/httpd apache 2105 2064 0 Aug16 ? 00:00:00 /usr/sbin/httpd apache 2106 2064 0 Aug16 ? 00:00:00 /usr/sbin/httpd apache 2107 2064 0 Aug16 ? 00:00:01 /usr/sbin/httpd apache 2108 2064 0 Aug16 ? 00:00:00 /usr/sbin/httpd apache 2109 2064 0 Aug16 ? 00:00:01 /usr/sbin/httpd apache 2110 2064 0 Aug16 ? 00:00:00 /usr/sbin/httpd apache 2111 2064 0 Aug16 ? 00:00:01 /usr/sbin/httpd apache 2112 2064 0 Aug16 ? 00:00:00 /usr/sbin/httpd apache 2113 2064 0 Aug16 ? 00:00:00 /usr/sbin/httpd bilou 29635 8350 0 22:20 pts/0 00:00:00 grep --color=auto httpd
j'ignore la dernière ligne (bilou c'est moi qui ai tapé la commande, la première que je ne comprends pas, et je conclus que c'est apache qui exécute httpd
Sauf erreurs (22h30...)
2) À partir de là,
a) soit tu mets apache propriétaire du répertoire racine de ton site web (pour moi c'est /var/www/htdocs/),mais ca te complique car tu dois passer en root pour modifier quelque chose là-dedans
b) soit tu te rends propriétaire du dossier racine du site web, tu mets apache dans le groupe de ce dossier et tu changes les droits à l'endroit où apache devra écrire.
remarque N'oublie pas -R sur des dossiers qui existent:
syntaxes de la solution b)

Code : Tout sélectionner

su ou sudo //suivant ce qui existe sur ton système chown -R moimeme /var/www/htdocs chgrp -R apache /var/www/htdocs chmod -R 740 /var/www/htdocs // moi je mets 744 mais je pense que c'est inutile chmod -R 770 /var/www/htdocs/mon_site/les_fichiers/
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 33 Messages

19 août 2011, 23:17

Bonsoir,

Merci Sirakawa de ta réponse rapide.
Tes commandes sont des commandes Linux, le soucis est que je n'ai pas la main sur le serveur.
Le site est hébergé chez un pro, j'ai juste un accès classique phpmyadmin et ftp !
Je peux translater tout ça en commandes php ? pour "chown" et "chmod" ok mais pour "ps -ef|grep httpd" ?
Et je n'ai pas accès aux répertoire racines bien sur, seulement à partir d'un répertoire /www/ qui contient le site.
Ça complique là non ?
Faut que je demande à l'hébergeur à tout les coups ?

ugo

Mammouth du PHP | 2278 Messages

19 août 2011, 23:51

demande à l'hébergeur parce que ce soir je suis trop crevé pour réfléchir davantage.
Je viens juste de regarder chez mon hébergeur. Avec Filezilla (ftp...) je peux changer les droits, mais je n'arrive pas à identifier les comptes propriétaires (ça doit être moi) et autres...
tu peix aussi essyer system ("commande"). (regarde la doc pour d'autres solutions, exec, passthru mais jene garantis pas que ça fera ce que tu veux...)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

devlop78
Invité n'ayant pas de compte PHPfrance

20 août 2011, 00:26

De toutes façons, le chown ne fonctionnera que si tu es root, à moins que Linux ait été configuré autrement (ce dont je doute). Il serait trop facile de faire un chown sur un fichier qui possède un IUD et de le mettre en propriétaire Root, ce qui aurait pour conséquence de le faire tourner sous Root ... Sinon, tout ce que est accessible avec ton droit de propriétaire l'est avec shell, shell_exec, passthru, etc

Mammouth du PHP | 2278 Messages

20 août 2011, 09:45

De toutes façons, le chown ne fonctionnera que si tu es root, à moins que Linux ait été configuré autrement (ce dont je doute). Il serait trop facile de faire un chown sur un fichier qui possède un IUD et de le mettre en propriétaire Root, ce qui aurait pour conséquence de le faire tourner sous Root ... Sinon, tout ce que est accessible avec ton droit de propriétaire l'est avec shell, shell_exec, passthru, etc
C'est marrant de faire une remarque pareille, quand j'avais commencé ma série des chown par su ou sudo !!!
L'hébergé est sûrement propriétaire de son répertoire chez l'hébergeur et il serait étonnant qu'il n'ait pas tous les droits dessus.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

devlop78
Invité n'ayant pas de compte PHPfrance

20 août 2011, 15:32

Moi c'est ta réponse que je ne comprends pas bien ... Faire un su (root) ou un sudo revient à devenir admin, donc pas de soucis. Pour ce qui est de PHP ou hébergeur, rien à voir, PHP se plie aux limites de l'os, et c'est lui qui dit si le chown est possible ou pas. Par défaut, mon debian ne l'autorise pas et c'est tout à fait normal. Comme je le dis plus haut, ce serait un risque de sécurité.

Mammouth du PHP | 2278 Messages

20 août 2011, 15:52

Je ne parlais pas de l'hébergeur quand j'ai fait ma première réponse.
Par ailleurs, je ne vois pas pourquoi root ne rendrait pas un autre utilisateur propriétaire du ROOT_DIRECTORY, à partir de quoi celui-ci pourrait le manipuler. Autrement, la moindre modification du site web supposerait une intervention de root...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 33 Messages

23 août 2011, 18:00

Bonjour,

J'ai lancé le sujet, je vois qu'il a fait des émules !
Plus sérieusement j'attendais la réponse de l'hébergeur.
Je viens ici vous demander votre avis, je ne suis pas assez chevronné pour savoir comment envisager leur réponse.
Je ne sais quoi penser de leur réponse, ... la voici donc :
<<
Cher client,
Le modèle de sécurité du serveur qui vous héberge est un modèle ancien mais éprouvé basé sur le php safe_mode et la dissociation des uid.

Celui-ci repose sur un principe simple de vérification au niveau des uid (uid du propriétaire du script == uid du répertoire accédé). Ce n'est donc pas une faille béante de placer des répertoires en 777 dans ce contexte, puisque les seuls scripts pouvant y accéder sont ceux que *vous* avez uploadé en ftp. C'est d'ailleurs pour cela que php est exécuté en tant que nobody. Un script uploadé malicieusement, ne peut pas écrire ou lire de fichiers sur le serveur. aucun répertoire n'appartenant à noboby.


Comme je vous le disait plus haut, ce modèle est historique et peut adapté aux nouveau cms (mis à part joolma). Si vous le souhaitez nous pouvons créer un nouveau compte pour cet hébergement sur un serveur disposant du modèle de sécurité actuel qui ne présente pas cette difficulté pour la gestion des fichiers (mais alors pour le coup ne nous faites pas de répertoires en 777 :)

Cordialement,
XXX

>>

Il a raison Mr XXX ?
Ou bien ?
Si je comprends bien, seuls les fichiers uploadés via ftp avec mes identifiants sont "étiquettés via uid" propriétaires ?
Pour les scripts Uploadés malicieusement ... comment est-ce possible sans mes identifiants, et donc qu'il n'obtienne pas l'uid propriétaire ?

Qu'en pensez-vous ?

Merci à vous !

ugo

Eléphanteau du PHP | 33 Messages

26 août 2011, 22:00

peronne n'a d'avis, je suis étonné ! :shock: :!: :?: