Bien que développé avec une distribution Debian 6 squeeze ce mini tutoriel sur la mise en place d'un environnement web peut servir d'exemple par son architecture pour d'autres distribution ou une distribution plus récente.
Au terme de nos manipulations on aura:
On commence par se connecter en ssh sur le serveur.
$ ssh root@90.90.90.90
password:
On crée deux utilisateurs, toto pour toto.com et titi pour titi.com
# adduser toto
Enter new UNIX password:
...
# adduser titi
Enter new UNIX password:
...
On crée les répertoires "logs" et "www" dans chaque répertoire personnel des utilisateurs:
# mkdir /home/toto/logs
# mkdir /home/toto/www
# mkdir /home/titi/logs
# mkdir /home/titi/www
Comme c'est root qui fait tout depuis le début on rends les droits sur ses répertoires aux utilisateurs respectifs:
# chown -R toto:toto /home/toto
# chown -R titi:titi /home/titi
On veux désormais interdire le shell à ces deux utilisateurs (donc pas de ssh non plus).
Si la ligne "/bin/false" n'existe pas dans le fichier "/etc/shells" ce qui est le cas ici ...
# cat /etc/shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
... on l'ajoute
# echo "/bin/false" >> /etc/shells
Maintenant on modifie le shell des utilisateurs.
# usermod -s /bin/false toto
# usermod -s /bin/false titi
On aurais pu créer les utilisateurs sans accès au shell directement avec la commande
# useradd -s /bin/false toto
On l'installe bien sûr
# apt-get install vsftpd
puis on modifie le fichier de configuration
# nano /etc/vsftpd.conf
# mode standalone du serveur
listen=YES
# autoriser ou non les connections annonymes
anonymous_enable=NO
# autoriser les utilisateurs locaux à se connecter
local_enable=YES
# permettre aux utilisateurs d'écrire
write_enable=YES
# umask des utilisateurs locaux.
local_umask=022
# restreindre les utilisateurs à leur répertoire personnel
chroot_local_user=YES
# Personnaliser le message d'accueil
ftpd_banner=Bienvenue sur 90.90.90.90
Il ne reste plus qu'à redémarrer le serveur
# /etc/init.d/vsftpd restart
Voila, désormais chaque utilisateur du système à un accès à son répertoire local en ftp.
Depuis vsftpd 3 > il faudra ajouter l'option
allow_writeable_chroot=YES
à votre fichier de configuration si vous souhaitez activer l'optionchroot_local_user=YES
.
Vérifiez la version de votre vsftpd :$ vsftpd -v
Voir au besoin le wiki Debian et/ou Debian Facile
Le serveur proprement dit
# apt-get install apache2
Une suite d'outils complémentaires
# apt-get install apache2-utils
A ce stade le serveur est fonctionnel pour des pages html placées dans /var/www/. Les noms de domaines, s'il redirigent bien vers 90.90.90.90, doivent aussi permettre d'accéder à ce répertoire.
Il faut maintenant créer un fichier de configuration pour chaque domaine dans le quel on inscrira, entre autre, les chemin vers les répertoires respectifs "logs" et "www" qui ont été créés plus haut.
Par convention, ces fichiers seront nommés comme le domaine qu'ils représente: toto.com.conf et titi.com.conf.
On les crée dans le répertoire /etc/apache2/sites-available/.
# nano /etc/apache2/sites-available/toto.com.conf
On crée alors deux hôtes virtuels pour chaque domaine, un pour www.toto.com et un pour toto.com (sans www) qui répondront sur le port 80.
<VirtualHost *:80>
ServerName www.toto.com
DocumentRoot /home/toto/www
ErrorLog /home/toto/logs/error_log
CustomLog /home/toto/logs/access_log combined
<Directory /home/toto/www>
Options ExecCGI -Indexes -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .pl
Order deny,allow
Allow from all
AllowOverride All
php_flag apc.cache_by_default On
</Directory>
<IfModule mpm_itk_module>
AssignUserId toto toto
</IfModule>
php_admin_value default_charset UTF-8
</VirtualHost>
<VirtualHost *:80>
ServerName toto.com
DocumentRoot /home/toto/www
ErrorLog /home/toto/logs/error_log
CustomLog /home/toto/logs/access_log combined
<Directory /home/toto/www>
Options ExecCGI -Indexes -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .pl
Order deny,allow
Allow from all
AllowOverride All
</Directory>
<IfModule mpm_itk_module>
AssignUserId toto toto
</IfModule>
php_admin_value default_charset UTF-8
</VirtualHost>
On répète la même opération mais pour le domaine titi.com.
# nano /etc/apache2/sites-available/titi.com.conf
...
On se rends maintenant dans le répertoire "sites-enabled", voisin de "sites-available", d'où l'on y créera des liens symboliques vers les deux fichiers fraichement créés.
# cd /etc/apache2/sites-enabled/
ln -s ../sites-available/toto.com.conf toto.com.conf
ln -s ../sites-available/titi.com.conf titi.com.conf
on peut aussi utiliser les outils a2ensite et a2dissite
Et enfin on relance le serveur Apache
# /etc/init.d/apache2 restart
On peut maintenant tester le bon fonctionnement des deux domaines en plaçant un fichier .html quelconque mais au contenu différent pour chaque domaine afin de constater une différence.
Attention, Php n'est pas encore installé, les pages .php ne seront donc pas interprétés mais lues comme de simple fichier texte.
# apt-get install php5 php5-dev php5-gd
On pourrais se contenter de
apt-get install php5
On redémarre Apache pour que les changements soient pris en compte
# /etc/init.d/apache2 restart
Voila c'est tout pour Php, installons maintenant MySql
# apt-get install mysql-server php5-mysql
Durant l'installation il est demandé de choisir un mot de passe, tachez de vous en souvenir.
Pour des raisons de sécurité et de logique il est conseillé de créer un utilisateur MySql et de lui attribuer une ou plusieurs base de données.
Pour cela connectons nous en tant que root MySql avec le mot de passe précédemment créé
# mysql -u root -p
Enter password:
Une fois sur le prompt MySql on crée un utilisateur et une bdd pour chaque domaine.
mysql> CREATE USER 'toto'@'localhost' IDENTIFIED BY 'mot_de_passe1';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT USAGE ON * . * TO 'toto'@'localhost' IDENTIFIED BY 'mot_de_passe1' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON `totodb` . * TO 'toto'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER 'titi'@'localhost' IDENTIFIED BY 'mot_de_passe2';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT USAGE ON * . * TO 'titi'@'localhost' IDENTIFIED BY 'mot_de_passe2' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON `titidb` . * TO 'titi'@'localhost';
Query OK, 0 rows affected (0.00 sec)
Voila qui est fait, on peut quitter le prompt MySql en tapant exit, quit, \q ou [CTRL+d].
Enfin pour conclure il ne nous reste plus qu'à installer un outil "graphique" pour administrer nos bases de données.
# apt-get install phpmyadmin
Qui sera accessible depuis les adresses:
Toute installation classique de PhpMyAdmin utilisera ce chemin pour accéder à l'interface d'administration. On peut modifier cela en modifiant l'alias dans le fichier "apache.conf" de phpmyadmin.
# nano /etc/phpmyadmin/apache.conf
Puis modifier la ligne
Alias /phpmyadmin /usr/share/phpmyadmin
par
Alias /ce_que_vous_voulez /usr/share/phpmyadmin
Il faudra alors entrer l'adresse "http://www.domaine.com/ce_que_vous_voulez" pour accéder à l'interface d'administration de phpmyadmin.
On ajoute un sous domaine un peu de la même manière que l'on crée un nouveau domaine.
On édite un fichier sd1.toto.com.conf dans le répertoire /etc/apache2/sites-available et on crée un lien symbolique de ce fichier dans le répertoire sites-enabled.
Le contenu du fichier sera plus succinct que ceux créés plus haut
<VirtualHost *:80>
DocumentRoot /home/toto/www
ServerName sd1.toto.com
<Directory /home/toto/www>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
On oubliera pas de redémarrer apache
# apache2ctl -t -D DUMP_MODULES
On peut aussi obtenir ces informations avec "phpinfo()"
À ce jour le fichier php.ini se situe dans /etc/php5/apache2/php.ini. Si jamais ce n'est pas le cas lisez le "phpinfo()", cette information est l'une des première retournée par cette fonction.
# nano /etc/apache2/conf.d/charset
dé-commenter la ligne
AddDefaultCharset UTF-8
# dig toto.com +short
90.90.90.90
Un peu plus à propos de la commande dig