Hébergement multi-sites sous Debian 3.1
Sommaire
Introduction
Ce document décrit la procédure complète de mise en place d'un hébergement multi-site sur un serveur Apache par l'intermédiaire des Vhosts et de sous-domaines. La plateforme d'installation utilisée est une Debian Sarge 3.1.
Tous les produits installés dans cette procédure sont libre d'utilisation.
Commentaire(s)/Correction(s)
Merci de me contacter pour tout commentaire ou correction.
Pour cette installation, nous partirons du principe que la machine cible dispose d'une connexion Internet.
Prérequis
Pour cette procédure, la machine cible doit être installée avec les composants suivants:
- La dernière distribution stable de Debian (Sarge 3.1)
- Le dernier package Apache (1.3.33-6sarge3)
- Le dernier package php (4:4.3.10-18)
- Le dernier package mySQL-server (4.0.24-10sarge2)
Pour mettre en place tout cet environnement, il vous suffit d'installer la version de base de Debian, puis de télécharger les packages nécessaires à votre installation. Pensez à mettre à jour votre système avant d'installer.
[hostname]$ apt-get update [hostname]$ apt-get upgrade [hostname]$ apt-get install apache mysql-server php4 phpmyadmin
Mise en place
Nous allons créer deux scripts pour cet article: un script de création et un de suppression. Le premier créera un nouveau compte utilisateur qui ne pourra pas se loguer en mode console à notre serveur (mais aura quand même l'accès en FTP), ainsi qu'un répertoire www, le fichier de config apache associé et éventuellement une base mySQL. Le second script supprimera tout ce que le premier aura mis en place.
Toutes les manipulations sont à faire en tant qu'utilisateur root sur la machine. Pour commencer, créons les deux fichiers et affectons les droits de lecture/écriture/exécution uniquement à l'utilisateur root.
[hostname]$ touch createWebAccount.sh [hostname]$ touch removeWebAccount.sh [hostname]$ chmod 700 *WebAccount.sh
Maintenant, nous pouvons successivement éditer chacun des deux fichiers de script afin de les alimenter. Et pour ce faire, rien de mieux que ce bon vieux VI. Notez que vous pouvez très bien utiliser tout autre éditeur de text suivant vos préférences.
[hostname]$ vi createWebAccount.sh
Puis ...
[hostname]$ vi removeWebAccount.sh
Voici le contenu de chacun des ces deux fichiers de script.
#!/bin/sh clear # --- Recuperation des parametres --- echo -n "Username : "; read login; echo -n "Password : "; read password; passmysql=$password echo # --- creation du user (le programme s'arrete par securite si le user existe deja ) --- /usr/sbin/useradd -G vhosts -d /home/$login -s /bin/false $login 2>/dev/null if [ $? -ne 0 ] then echo "[X] User $login already exist, operation aborted !" else echo "$login:$password"|chpasswd echo "[+] User \"$login\" created" # --- creation des repertoires --- /bin/mkdir -p /home/$login/logs /var/www/$login /var/www/$login/www /home/$login/usr/bin cp /bin/ls /home/$login/usr/bin cp /bin/pwd /home/$login/usr/bin chmod u=x,g=x,o=x /home/$login/usr/bin/ls chmod u=x,g=x,o=x /home/$login/usr/bin/pwd echo "[+] Directories created" # --- creation du lien symbolique "www" necessaire a Proftpd --- cd /home/$login/ ln -s /var/www/$login/www/ www echo "[+] Link \"www\" created" # --- modifications des droits sur les dossiers --- chown -R $login:vhosts /var/www/$login/ chown -R $login /home/$login/ chmod -R 755 /var/www/ echo "[+] Rights changed" # --- creation du virtual host (inclus dans httpd.conf) --- echo " <VirtualHost *> ServerName $login.spin0us.net DocumentRoot /var/www/$login/www/ ErrorLog /home/$login/logs/error.log CustomLog /home/$login/logs/access.log combined <Directory /var/www/$login/www/> AllowOverride All Options -Indexes Order Deny,Allow Allow from all </Directory> LogLevel warn ServerSignature On </VirtualHost> " >> /etc/apache2/sites-available/$login a2ensite $login >/dev/null echo "[+] VirtualHost Apache created" /etc/init.d/apache2 reload >/dev/null echo "[!] Apache configuration reloaded" # --- mysql --- echo -n "Do you need mySQL database for this account ? (y/[n]) " read ans if [ _$ans = _y -o _$ans = _Y ] then echo -n "Enter root password for mysql : "; read passroot; # --- creation de la base --- /usr/bin/mysqladmin -u root -p$passroot create $login echo "[+] MySQL database \"$login\" created" # --- creation du compte + db + droits --- /usr/bin/mysql -u root --password=$passroot mysql <<END_COMMANDS GRANT ALL ON $login.* TO "$login"@"localhost" IDENTIFIED BY '$passmysql'; FLUSH PRIVILEGES; END_COMMANDS # --- redemarrage de la base --- /usr/bin/mysqladmin -u root -p$passroot reload echo "[+] User MySQL \"$login\" created" fi fi echo echo
#!/bin/bash # --- Recuperation des parametres --- echo -n "Username : "; read login; # --- Suppression du user --- /usr/sbin/userdel $login echo "[-] User $login removed." # --- Suppression du repertoire www--- /bin/rm -R -f /home/$login /bin/rm -R -f /var/www/$login echo "[-] Home directory removed." # --- Suppression du virtual host--- a2dissite $login >/dev/null rm -f /etc/apache2/sites-available/$login echo "[-] Virtualhosts $login removed." # --- Suppression de la base de donnee et de l'utilisateur--- echo -n "Do you want to remove mySQL database for this account ? (y/[n]) " read ans if [ _$ans = _y -o _$ans = _Y ] then mysql -u root --password=...PASSMYSQL... mysql <<END_COMMANDS REVOKE ALL ON *.* FROM $login@localhost; REVOKE ALL ON $login.* FROM $login@localhost; DELETE FROM mysql.user WHERE user='$login'; DROP DATABASE IF EXISTS $login; FLUSH PRIVILEGES; END_COMMANDS /usr/bin/mysqladmin -u root -p"...PASSMYSQL..." reload fi # --- On recharge la configuration de apache --- /etc/init.d/apache2 reload >/dev/null echo "[!] Apache reloaded ..." echo "[!] Account $login successfully removed."
ATTENTION, dans le second script pensez bien à remplacer les ...PASSMYSQL... par votre mot de passe root pour mySQL.
Utilisation
Pour utiliser ces deux scripts, rien de plus simple. Il vous suffit de les lancer et de répondre aux questions qui vous sont posées.