Page 1 sur 1

Qui accede au filesystem : apache ou php ?

Posté : 15 avr. 2013, 10:25
par Santiago
Bonjour à tous,

Je suis Santiago, nouveau sur le forum.
Je ne programme pas du tout en PHP (ou alors vraiment très peu).
Mais je suis surtout ici parce que j'administre des serveurs qui hébergent les sites de mes collègues qui développent.
J'aimerais aller un peu plus loin que le simple
apt-get install apache2 php5 mysql-server
Aussi j'espère que vous me pardonnerez mes première questions qui seront certainement très simplistes.

Tout d'abord, j'aimerais séparer apache et php. Pour l'instant dans le seul but de faire joujou et plus tard avec toutes les possibilitées d'évolution que vous connaissez surement mieux que moi.
Je travaille donc à adminitrer apache d'une part et php-fpm d'autre part.

Ma première question concerne l'écriture sur le disque.
Qui a besoin d'accéder au fichier à écrire au final. Apache (mon utilisateur httpd) ou php-fpm (mon utilisateur phpd) ?

Merci de votre aide.
Cordialement
Santiago

Re: Qui accede au filesystem : apache ou php ?

Posté : 15 avr. 2013, 11:35
par moogli
salut,


généralement il s'agit d'apache, si php est exécuté depuis apache (en tant que module, cas le plus classique) avec l'utilisateur qui fait tourner le serveur.

en CGI à priori je dirais l'utilisateur qui fait tourner le demon (donc phpd dans ton cas).

le plus simple étant de créer un fichier rapidement dans un répertoire ou l'utilisateur supposé n'a pas le droit d'écrire (mais l'autre si ;))
un simple
<?php
file_put_contents('/path/to./file.ext',' blabla');
suffit, s'il y a erreur tu as ta réponse :)

@+

Re: Qui accede au filesystem : apache ou php ?

Posté : 15 avr. 2013, 11:38
par Sékiltoyai
Bonjour et bienvenue,

Cela dépend quels fichiers. Tes développeurs vont en général produire deux types de fichiers:
* Les fichiers statiques, accédés directement par apache (donc avec l'utilisateur www-data)
* Les fichiers php, exécutés donc accédés par php-fpm (donc avec l'utilisateur de php-fpm)

Les développeurs peuvent éventuellement également produire et modifier les fichiers du disque local via le script php (pour permettre aux utilisateurs de poster des vidéos, des images, etc). Là encore, fonction du code, le fichier sera soit accédé directement par apache, soit transmis via le script php.

Ceci dit, une chose est immuable, c'est que ton serveur apache n'aura jamais à modifier les fichiers. Il n'y a que si tu déploies du webdav, du svn ou du git sur ton serveur que ce sera le cas, donc dans des cas très particuliers. Il n'y a pas de réponse unique, une pratique simple consisterait à faire un truc du genre:
* A chowner les fichiers statiques (qui n'auront jamais à être modifiés) par www-data:www-data, et chmoder en 0644 ou 0444
* A chowner les autres fichiers (scripts php et fichiers dynamiques) par php:php ou php:www-data et chmoder en 0644, voire si tu veux être plus précis:
** Fichiers de configuration des scripts php en php:php et 0440
** Scripts php en php:php et 0444
** Fichiers dynamiques en php:www-data et 0640 ou php:php et 0644
Idéalement il serait bien également d'isoler les vhosts les uns des autres mais cela demande plus de travail.
A défaut de politique, tout le /var/www/ en php:php et 0644, ça marchera dans tous les cas (apache pourra lire, php pourra écrire).

Il faut que les développeurs s'impliquent dans la définition de la politique de sécurité, qu'ils soient capables de dire exactement ce qu'ils ont besoin de faire dans leurs scripts, et interdire tout le reste.

NB: Je précise évidemment que ça ne marche que pour ton setup vu que tu utilises php-fpm.

Cordialement
Emmanuel Thierry