Longtemps je me suis cassé la tête et les dents à coup de chmod et chown pour résoudre la question de comment mettre son dossier www dans home pour chaque utilisateur linux. Aujourd’hui, je vous présente un moyen simple d’y parvenir avec le module Apache userdir.Avant de connaitre l’astuce que je vais vous présenter, je me torturais, comme beaucoup d’auters j’imagine, à configurer apache d’une part, et des permissions tarabiscotées à coup de chmod d’autre part. C’était sans compter sur un petit module apache fort pratique, à savoir userdir.
Pourquoi mettre son dossier www dans le répertoire /home de l’utilisateur ?
D’abord parce que c’est plus propre : chaque utilisateur à son login et son mot de passe, et donc son répertoire. Ainsi on sépare bien toutes nos entités et on s’y retrouve plus facilement.
Ensuite, parce que c’est plus sécurisé : Comme dit juste avant, on ferme tout et chaque utilisateur accède à son espace et pas celui des autres, grâce à son login/mot de passe. De plus, si comme moi vous avez installé votre /home sur une partition distincte de la partition système, vous ne risquez pas de perdre vos données web si jamais quelque chose tournait mal et que vous vouliez récupérer votre boulot.
Ce qu’on va faire
Création d’un espace individuel pour chaque site
Activation du module Apache UserDir
Configuration d’un virtual host associé
Avant de commencer
Toutes les manipulations présentées ici sont réalisées sur un système Debian 7 Wheezy, mais ça fonctionne également sur tout système de base Debian avec Apache2 d’installé, comme Ubuntu. Il va de soit que tout se passe en ligne de commande et qu’un minimum de connaissance du shell est nécessaire.
On y va 🙂
Création d’un utilisateur
1 2 3 | sudo adduser wplabs |
Activation du module Apache userdir
On active le module (1ère commande), puis on modifie sa configuration (2ème commande)
1 2 3 4 | sudo a2enmod userdir sudo nano /etc/apache2/mods-available/userdir.conf |
Dans le fichier de config, on a juste un truc à modifier : public_html qu’on va transformer en www aux lignes 2 et 5. On pourrait très bien garder le nom « public_html », mais on va garder la cohérence du dossier /var/www.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <IfModule mod_userdir.c> UserDir public_html UserDir disabled root <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> </IfModule> |
Voilà ce que ça donne :
Ce qu’on a fait ici c’est simplement dire que les fichiers visibles et accessibles (nos sites) se trouvent toujours dans le dossier /home/*/www (l’astérisque sert à dire n’importe quel utilisateur). Pensez à sauvegarder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <IfModule mod_userdir.c> UserDir www UserDir disabled root <Directory /home/*/www> AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec <Limit GET POST OPTIONS> Order allow,deny Allow from all </Limit> <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> </IfModule> |
Création du virtualhost
On se rend dans le dossier des vhost, et on commence par jeter un oeil à celui par défaut.
1 2 3 4 | cd /etc/apache2/sites-available/ sudo nano default |
Ça c’est mon vhost par défaut. Le votre est peut etre différent, mais ce qui importe c’est qu’il indique DocumentRoot /home/*/www
Vous remarquez ? Comme dans mon userdir.conf 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <VirtualHost *:80> ServerAdmin neovea@gmail.com DocumentRoot /home/*/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /home/*/www/> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all </Directory> </VirtualHost> |
Vu qu’il est bon, on le copie colle en le renommant du nom de notre site, et on l’édite.
1 2 3 4 | sudo cp default wplabs sudo nano wplabs |
Renseignez bien le chemin tel qu’il existe cette fois ci, cf lignes 5 et 10, et faites en sorte d’avoir un alias/name valide, sans quoi ça ne fonctionnera pas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <VirtualHost *:80> ServerAdmin neovea@gmail.com ServerAlias wplabs.desirelabs.fr ServerName wplabs.desirelabs.fr DocumentRoot /home/wplabs/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /home/wplabs/www/> Options Indexes FollowSymLinks MultiViews AllowOverride all Order allow,deny allow from all </Directory> </VirtualHost> |
Activation du site et reload d’apache
Le reload est important, il permet de prendre en compte le nouveau site activé, mais aussi le module qui a été activé, userdir.
1 2 3 4 | sudo a2ensite wplabs sudo service apache2 reload |
Création du site et tests
Rien de méchant, on se connecte avec le user qu’on a créé précédemment, et on lui fait créer un dossier www dans son propre espace.
1 2 3 4 5 | su wplabs cd mkdir www |
Alors oui c’est vrai on pourrait mettre tous les fichiers du site à la racine du user, mais je préfère procéder ainsi et me garder la liberté de pouvoir mettre des choses à côté du répertoire de mon site si je le souhaite, comme mes backups de base de données par exemple, ou simplement une nouvelle version du site en cours de développement.
Testez votre site en créant un bête index.html dans www et profitez 🙂
Fini la prise de tête avec chmod !