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 !