Modification de Apache : Suexec pour un vhost spécifique

Attention : vous n’êtes pas connecté(e). Votre adresse IP sera visible de tout le monde si vous faites des modifications. Si vous vous connectez ou créez un compte, vos modifications seront attribuées à votre propre nom d’utilisateur(rice) et vous aurez d’autres avantages.

La modification peut être annulée. Veuillez vérifier les différences ci-dessous pour voir si c’est bien ce que vous voulez faire, puis publier ces changements pour finaliser l’annulation de cette modification.

Version actuelle Votre texte
Ligne 1 : Ligne 1 :
{{ArticleHead|Adadov}}
 
{{Obsolète
== Introduction ==
| cause = La gestion des utilisateurs se fait via PHP-FPM
| nouveau = LAMP: Utiliser un utilisateur spécifique pour un vhost
}}


Il existe de multiples cas où on a besoin que le serveur Apache puisse écrire sur des fichiers, dans ce cas on donne généralement le droit à l'utilisateur Apache sur ce fichier et c'est tout.<br />
Il existe de multiples cas où on a besoin que le serveur Apache puisse écrire sur des fichiers, dans ce cas on donne généralement le droit à l'utilisateur Apache sur ce fichier et c'est tout.<br />
Ligne 9 : Ligne 6 :


C'est justement dans ce dernier cas qu'il devient utile que ces scripts soient lancés avec les droits de l'utilisateur qui sert au webmaster au lieu de l'utilisateur Apache.
C'est justement dans ce dernier cas qu'il devient utile que ces scripts soient lancés avec les droits de l'utilisateur qui sert au webmaster au lieu de l'utilisateur Apache.
{{-}}
 
 
== Présentation ==
== Présentation ==


Ligne 18 : Ligne 16 :


Et pour finir il faudra créer un wrapper pour chaque utilisateur, il s'agit là d'une histoire de droits d'exécution qu'on verra plus tard.
Et pour finir il faudra créer un wrapper pour chaque utilisateur, il s'agit là d'une histoire de droits d'exécution qu'on verra plus tard.


== Apache ==
== Apache ==


=== Installation des modules ===
=== Installation des modules ===
Ligne 25 : Ligne 25 :
Sous CentOS l'installation se fait très simplement, mod_fcgid est disponible directement sur les repository de la distribution et mod_suphp est disponible sur rpmforge.
Sous CentOS l'installation se fait très simplement, mod_fcgid est disponible directement sur les repository de la distribution et mod_suphp est disponible sur rpmforge.


{{LxTerm|user=root|text=yum install mod_fcgid
yum install mod_fcgid
yum install mod_suphp}}
yum install mod_suphp


=== Configuration d'Apache ===
=== Configuration d'Apache ===
Ligne 35 : Ligne 35 :
Ensuite il faut configurer les vhosts, pour ça j'ai fait un template afin de simplifier la création de nouveau vhosts.
Ensuite il faut configurer les vhosts, pour ça j'ai fait un template afin de simplifier la création de nouveau vhosts.


<syntaxhighlight lang="apache">
<VirtualHost *:80>
<VirtualHost *:80>
 
ServerName {DOM}
ServerName {DOM}
ServerAlias *.{DOM}
ServerAlias *.{DOM}
 
DocumentRoot /web/{FOLD}
DocumentRoot /web/{FOLD}
 
CustomLog logs/{DOM}.log combined
CustomLog logs/{DOM}.log combined
 
Options FollowSymlinks
Options FollowSymlinks
 
<IfModule mod_fcgid.c>
<IfModule mod_fcgid.c>
Alias /fcgi-bin/ /var/www/cgi-bin/
Alias /fcgi-bin/ /var/www/cgi-bin/
<Location /fcgi-bin/>
<Location /fcgi-bin/>
SetHandler fcgid-script
SetHandler fcgid-script
Options +ExecCGI
Options +ExecCGI
</Location>
</Location>
SuexecUserGroup {UID} {GID}
SuexecUserGroup {UID} {GID}
<Directory /web/{FOLD}>
<Directory /web/{FOLD}>
Options +ExecCGI -Indexes IncludesNOEXEC FollowSymlinks
Options +ExecCGI -Indexes IncludesNOEXEC FollowSymlinks
AddHandler php-fcgi .php
AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/{UID}/php-{UID}
Action php-fcgi /fcgi-bin/{UID}/php-{UID}
FCGIWrapper /var/www/cgi-bin/{UID}/php-{UID} .php
FCGIWrapper /var/www/cgi-bin/{UID}/php-{UID} .php
Allow from all
Allow from all
AllowOverride All
AllowOverride All
</Directory>
</Directory>
</IfModule>
</IfModule>
</VirtualHost>
</VirtualHost>
</syntaxhighlight>


  {DOM} = Le nom de domaine associé au vhosts.
  {DOM} = Le nom de domaine associé au vhosts.
Ligne 71 : Ligne 70 :
  {GID} = Le groupe qui servira pour l'exécution des scripts.
  {GID} = Le groupe qui servira pour l'exécution des scripts.


{{Info|Dans le cas où le vhost ne serait disponible que pour un nom d'hôte particulier, il faudrait enlever la ligne '''ServerAlias''' et adapter le '''ServerName'''}}
{{Info|tip=Dans le cas où le vhost ne serait disponible que pour un nom d'hôte particulier, il faudrait enlever la ligne '''ServerAlias''' et adapter le '''ServerName'''}}


== Les Wrapper ==
== Les Wrapper ==
Ligne 78 : Ligne 77 :
Il doit absolument se situer dans un dossier dont les uid et gid sont identiques à ceux entrés dans la configuration d'Apache et aux siens.<br />
Il doit absolument se situer dans un dossier dont les uid et gid sont identiques à ceux entrés dans la configuration d'Apache et aux siens.<br />
Il contiendra la définition de plusieurs variables pour PHP et la ligne de commande pour l'exécution.
Il contiendra la définition de plusieurs variables pour PHP et la ligne de commande pour l'exécution.
<syntaxhighlight lang="bash">
 
#!/bin/sh
#!/bin/sh
export PHPRC=/web/config/{UID}
export PHPRC=/web/{UID}/etc
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=1
export PHP_FCGI_CHILDREN=1
exec /usr/bin/php-cgi
exec /usr/bin/php-cgi
</syntaxhighlight>


On oubliera pas de spécifier un chemin vers un fichier php.ini particulier afin de pouvoir redéfinir certaines options comme on le souhaite et éviter ainsi des problèmes.
On oubliera pas de spécifier un chemin vers un fichier php.ini particulier afin de pouvoir redéfinir certaines options comme on le souhaite et éviter ainsi des problèmes.
Ligne 97 : Ligne 95 :
En effet vu que ce n'est plus Apache qui vient écrire les fichiers il devient compliqué de laisser tous les fichiers de session dans le même dossier, puis c'est pas très sécurisé non plus.<br />
En effet vu que ce n'est plus Apache qui vient écrire les fichiers il devient compliqué de laisser tous les fichiers de session dans le même dossier, puis c'est pas très sécurisé non plus.<br />
Donc on va modifier la directive '''session.save_path''' pour la faire pointer vers un dossier où seul l'utilisateur concerné aura le droit d'écriture (et de préférence hors du dossier contenant le site).
Donc on va modifier la directive '''session.save_path''' pour la faire pointer vers un dossier où seul l'utilisateur concerné aura le droit d'écriture (et de préférence hors du dossier contenant le site).
[[Category:SysAdmin]]
[[Catégorie:Serveur Web]]
[[Catégorie:Apache|Suexec]]
Notez bien que toutes les contributions à Adadov.net wiki peuvent être modifiées, transformées ou supprimées par d’autres utilisateurs. Si vous ne désirez pas que vos écrits soient modifiés contre votre gré, merci de ne pas les soumettre ici.
Vous nous promettez aussi que vous avez écrit ceci vous-même ou que vous l’avez copié d’une source placée dans le domaine public ou d’une ressource libre similaire (voir AdadovNet:Copyrights pour plus de détails). N’utilisez aucun travail sous droits d’auteur sans autorisation expresse !
Annuler Aide pour la modification (s’ouvre dans une nouvelle fenêtre)