Après diverses configurations, voici celle que j'ai choisie pour pour faire du développement web sur mon PC, sans avoir à passer en root, une fois la config terminée.
Conventions
Les commandes à lancer en root sont précédés par un #, celles en simple utilisateur sont préfixées par $.
Installation des paquets de base
Pour installer un serveur web avec php et mysql :
yum install httpd php mysql-server php-mysql
Démarrage par défaut des services
Pour que apache et le serveur mysql soient démarrés au lancement de l'ordinateur :
# systemctl enable httpd.service
# systemctl enable mysqld.service
# systemctl start httpd.service
# systemctl start mysqld.service
Emplacement des développements
J'ai choisi de développer dans mon home. Pour pouvoir l'afficher sur mon serveur, il faut utiliser le module userdir. Pour cela ajouter dans /etc/httpd/conf/httpd.conf :
<IfModule mod_userdir.c> UserDir public_html </IfModule>
<Directory /home/*/public_html>
Options Indexes FollowSymLinks
</Directory>
La section directory permet de lister les répertoires public_html. Elle n'est pas obligatoire, mais évite des erreurs 403 - forbidden quand on liste un répertoire.
Les fichiers de mon site seront ainsi dans $HOME/public_html (répertoire à créer), et accessibles via http://localhost/~nomUtilisateur
Partage des fichiers entre l'utilisateur et le serveur web
Permettre à apache d'ouvrir/écrire des fichiers créés par un utilisateur
Droits et groupes d'utilisateurs
Pour ne pas avoir à passer en root pour pouvoir modifier les fichiers, il faut :
- que apache soit capable de lire et modifier les fichiers que je crée
- que je sois capable de lire, écrire, supprimer, etc. les fichiers qu'apache crée
Pour cela, je place mon user dans le groupe apache.
# usermod -a -G apache thomas
Ainsi, il me suffira de changer le groupe des fichiers que je crée :
$ chgrp -R apache ~/public_html
Selinux
Pas de problèmes de droits ici, puisque par défaut les fichiers créés par un utilisateur classique sont lisibles par tous. Par contre, il faut assouplir les règles selinux pour permettre à apache d'accéder aux fichiers des utilisateurs. Pour celà, lancer (en root) :
# setsebool httpd_read_user_content 1
# setsebool httpd_enable_homedirs 1
# setsebool httpd_unified 1
Permettre à un utilisateur de gérer les fichiers créés par apache
Enfin, il faut que les fichiers créés par apache soient modifiables par les utilisateurs du groupe apache. Avant, il suffisait d'ajouter "umask 002" dans /etc/sysconfig/htttpd. Maintenant, avec la gestion des services par systemd, seules les variables d'environnement sont lues dans /etc/sysconfig/htttpd.
Pour que le umask soit pris en compte, il faut insérer dans la section [Service] du fichier /lib/systemd/system/httpd.service la ligne :
UMask=0002
Pour plus d'informations sur les conditions d'exécution, consulter le man de systemd.exec.
Ensuite, recharger la config et relancer apache :
# systemctl daemon-reload
# systemctl restart httpd.service
Autoriser la consultation des logs aux users du groupe apache.
Attention, les logs sont une cible d'attaques, ne peut utiliser cette config en production ! Les fichiers à l'intérieur du répertoire /var/log/htppd/ sont déjà lisibles par tout le monde (droits rw-rw-r--). Par contre, un user simple ne peut pas ouvrir ce répertoire. Une solution est de changer le groupe du répertoire, et de permettre aux users de l'ouvrir :
# chgrp apache /var/log/httpd
# chmod g+rX /var/log/httpd
Et voila, vous êtes prêts !
- Détails
- Écrit par Thomas Bouffon
- Publication : 25 juillet 2012