Développer un site dans votre home

30/06/2008

Ce week-end, un ami est passé à la maison et nous avons discuté de la facilité d’utiliser Windows pour développer un site html/php alors que sous Linux nous nous trouvons vite bloqué par des droits… Effectivement, la configuration de Apache vous demande de développer dans /var/www/html mais votre utilisateur n’a pas du tout le droit de toucher ce répertoire. Cela complique les choses pour un néophyte et peut même être bloquant.

Il existe une solution pour passer outre cela, je vais vous montrer ce que j’ai expliqué à cet ami pour pouvoir développer dans /home/votre_login sans aucune difficulté.

//**Note: En lisant ce ticket, remplacez votre_login par votre login Linux**//

Apache a un module nommé “mod_user” généralement installé sur vos distribution. Voici comment faire.

Tout d’abord, nous allons créer un répertoire dans votre home qui se nommera “public_html”. Puis nous changeons les droits de ce répertoire pour que le groupe apache puisse y accéder:

cd /home/votre_login
mkdir /home/votre_login/public_html
chmod -R 755 /home/votre_login/public_html

Maintenant le souci c’est que, même si vous avez laissé la lecture à tout le monde sur le répertoire “public_html”, le répertoire “/home/votre_login” n’est pas “traversable”. Nous allons changer cela:

cd /home
chmod 711 /home/votre_login

Cette commande va permettre à tout le monde de “traverser” votre répertoire. Cela ne veut pas dire que tout le monde pourra “lire” mais juste descendre jusqu’à des répertoires qui seront authorisés. “public_html” est justement un répertoire que nous laissons en lecture autorisé.

Reste maintenant à activer la configuration “mod_user” pour apache:

su -c "gedit /etc/httpd/conf/httpd.conf"
ou sur Ubuntu:
sudo gedit /etc/httpd/conf/httpd.conf

Après avoir tapé votre mot de passe, l’éditeur s’ouvre. Chercher ce bloc:

<IfModule mod_userdir.c>
   #
   # UserDir is disabled by default since it can confirm the presence
   # of a username on the system (depending on home directory
   # permissions).
   #
   UserDir disable

   #
   # To enable requests to /~user/ to serve the user's public_html
   # directory, remove the "UserDir disable" line above, and uncomment
   # the following line instead:
   #
   #UserDir public_html

</IfModule>

Ce que vous devez faire, c’est : -ajouter un dièse devant “UserDir disable” -enlever celui qui est devant “UserDir public_html”.

Vous devriez donc avoir cela:

<IfModule mod_userdir.c>
   #
   # UserDir is disabled by default since it can confirm the presence
   # of a username on the system (depending on home directory
   # permissions).
   #
   #UserDir disable

   #
   # To enable requests to /~user/ to serve the user's public_html
   # directory, remove the "UserDir disable" line above, and uncomment
   # the following line instead:
   #
   UserDir public_html

</IfModule>

Il doit y avoir, généralement juste en dessous, un bloc “Directory” de cette forme:

<Directory /home/*/public_html>

Enlevez alors tous les dièses depuis cette ligne jusqu’à inclut.

Maintenant, relancez Apache:

su -c "/etc/init.d/httpd restart"

Allez dans votre répertoire /home/votre_login/public_html et créez un fichier index.html… tapez un peu de code HTML ou simplement “Hello”. Enfin, ouvrez un navigateur et allez sur l’adresse: http://127.0.0.1/~votre_login/index.html et admirrez le fonctionnement.

Voilà, vous ne serez plus bloqué par les droits du répertoire /var/www/html et vous pourrez travailler facilement. Attention tout de même, cette configuration **ne doit pas être une configuration de production**, elle ne doit servir que pour développer un site.

Ça peut vous intéresser aussi


Poste de développement PHP sous Fedora

Linux est un système parfait pour développer. Simple d’installation,...


Monter un partage webdav sharepoint sur Linux

Quand on m’a posé cette question, au boulot, chez un ...


Optimisons un peu notre Linux en limitant les accès disques

Que vous ayez un SSD ou non, je pense que ...


Docker Apache Mysql PHP

Ce matin un collègue me demande “comment tu ferais ...

Merci de m'aider à financer mes services

Si vous avez apprécié cet article, je vous serai reconnaissant de m'aider à me payer une petite bière :)

Si vous voulez en savoir plus sur l'utilisation de flattr sur mon blog, lisez cette page: Ayez pitié de moi

Commentaires

Ajouter un commentaire

Guillaume - 30/06/2008

“Attention tout de même, cette configuration ne doit pas être une configuration de production, elle ne doit servir que pour développer un site.”

2 questions à ce propos : - Pourquoi ? - En ce cas, quelle configuration de production adopter ?

Metal3d - 30/06/2008

Parce que tu ouvres un accès de traversée au répertoire de ton user, ce qui est plus risqué.

En plus de cela, tu auras des soucis pour configurer ton chemin pour un domaine précis puisque Apache attend le nom de l’user avec le tilde “~” dans l’url…

En plus tu annonce explicitement que tu as un user nommé tel quel dans ta config…

En prod, on place les sites comme spécifié dans /var/www ou /var/www/html. Ce répertoire, si possible monté avec depuis un autre disque, devra prendre les droits apache ou www-data. Seule l’utilisateur “système” nommé apache ou www-data devra y accèder. Le fait est que tu ne peux pas te loguer en SSH avec les users système. De ce fait, tu n’annonce pas à la terre entière qu’un user “guillaume” existe sur ton serveur, tu n’a pas ouvert des droits de travers à n’importe quel utilisateur, etc…

Il vaut mieux travailler avec logique et normalisations. Le module mod_user ne sert pas à de la prod.

Guillaume - 01/07/2008

On trouve souvent de l’aide pour des environnements de développement mais beaucoup moins pour mettre en place un environnement de production. Donc, merci pour ces éclaircissements :)

Ajouter un commentaire

(*) Votre e-mail ne sera ni revendu, ni rendu public, ni utilisé pour vous proposer des mails commerciaux. Il n'est utilisé que pour vous contacter en cas de souci avec le contenu du commentaire, ou pour vous prévenir d'un nouveau commentaire si vous avez coché la case prévue à cet effet.