Script de création de comptes Web
Tatane |
mercredi 27 juillet 2005 à 14:09 |
Debian |
#10 |
RSS
Je vous propose de découvrir ici un script shell de création de compte web.
Ce que j'appelle un "compte web" consiste en :
- la création d'un espace web
- la création d'une base de données par compte
- la création de l'accès FTP
- la configuration de tous les fichiers de conf nécessaire à celà ...
A quoi ça sert ?
Grace à ce script vous pourrez rapidement créer des hébergements Web sur votre serveur, à la manière d'un hébergement mutualisé.
C'est à dire qu'en fournissant au script un login, un mot de passe et un domaine, vous allez générer un espace web accessible par FTP, avec PHP5 ainsi qu'une base de données MySQL accessible via PHPMyAdmin.
Prérequis
Certains logiciels doivent déjà être installés et fonctionnels sur votre machine.
Ce script a été écrit et testé sous Debian Sarge, avec les logiciels suivant :
- Serveur FTP -> Proftpd 1.2.10
- Serveur Web -> Apache 1.3.33
- Serveur de base de données -> MySQL 4.0.24
- PHP 5.0.4-1 (DotDeb, package php5-cgi)
Principes
Chaque compte web est un compte système sur l'OS, donc à chaque compte correspond un user. Tous ces users seront créés dans le groupe (créé auparavant) vhosts.
Pour chaque user de cré nous avons donc un dossier supplémentaire dans /home, dans ce dossier seront redirigés les logs d'Apache pour le site correspondant, ainsi qu'un lien symbolique www qui pointera sur le répertoire web du compte.
Ce répertoire web se situe dans /var/www (racine d'Apache par défaut sous Debian).
Donc nous allons ainsi obtenir les arborescences de répertoires suivantes :

Comme indiqué sur le schéma ci-dessus, chaque répertoire situé dans /var/www contiendra un répertoire cgi-bin ou sera placé l'exécutable php5, ainsi qu'un répertoire www qui lui accueillera les fichiers des sites web.
Le répertoire cgi-bin est indispensable car Apache utilisera le mode suExec pour fonctionner, c'est à dire que pour chaque site (Virtual Host), Apache tournera avec les droits de l'utilisateur associé. (Je vous renvoie à l'article correspondant dans la section Debian de ce site).
Mais pourquoi ce lien symbolique www dans les homes des users ?
Tout simplement car, par défaut dans la configuration de Proftpd, les utilisateurs qui se connectent en FTP sont redirigés dans leur /home/%user%,
or je voulais qu'ils se connectent directement dans leur dossier /var/www/%user%/www, il faut donc les rediriger via une configuration de Proftpd :
ServerName "Tatane" ServerType standalone DeferWelcome off # reprise des transferts autoris?s AllowStoreRestart on AllowRetrieveRestart on # les users du groupe "vhosts" tombent dans leur /var/www/%user%/www grace au lien symbolique DefaultRoot ~/www vhosts # les autres tombent dans leur /home/nom_user/ DefaultRoot ~ # penser à ajouter les logs des connections et transferts du serveur SystemLog /var/log/proftpd/access.log TransferLog /var/log/proftpd/transferts.log
Voilà donc pour le principe général de fonctionnement, passons maintenant au script proprement dit.
Le script
Ce script s'exécute en console et est interactif, il n'est pas difficile de l'adapter afin de l'attaquer via une interface web (ce sera l'objet d'un prochain article).
Paramétrage
Le script commence par vous demander les informations nécessaires à la création du compte :
- login
- pass
- domaine
# récupération des paramêtres echo -n "Entrez le nom du compte à créer : "; read login; echo -n "Entrez son mot de passe : "; read password; passmysql=$password echo -n "Entrez le nom de domaine (sans \"www\", par exemple domaine.com) : "; read domaine; # vérification echo echo "Domaine : $domaine" echo "Compte : $login" echo "Passwd : $password" echo -n "Est-ce correct ? (o/[n]) " read ans if [ _$ans != _o -a _$ans != _O ] then echo "Bye !" fi
Création du user et des répertoires
Cette partie du script s'occupe de la création du user sur le système, de créer tous les répertoires et liens nécessaires, ainsi que de mettre en place les bonnes permissions d'accès aux fichiers.
# création du user (le programme s'arrête par sécurité si le user existe déjà ) /usr/sbin/useradd $login -p `perl -e "print crypt('$password',pwet)"` -g vhosts -d /home/$login -m -s /bin/bash if [ $? -ne 0 ] then echo "L'utilisateur $login existe déjà , opération annulée !" fi echo " + Utilisateur \"$login\" cr??\n" # création des répertoires /bin/mkdir /home/$login/logs /var/www/$login /var/www/$login/www echo " + Répertoires créés\n" # Copie de php5-cgi dans le répertoire cgi-bin de l'utilisateur /bin/cp -R /usr/lib/cgi-bin/ /var/www/$login/ echo " + php5-cgi copié\n" # création du lien symbolique "www" nécessaire à Proftpd cd /home/$login/ ln -s /var/www/$login/www/ www echo " + Lien \"www\" créé\n" # modifications des droits sur les dossiers chown -R $login:vhosts /var/www/$login/ chown -R $login /home/$login/ chmod -R 755 /var/www/ echo " + Droits modifiés\n"
Apache
Il faut maintenant indiquer à Apache que le domaine correspond au site spécifié, pour cela nous utilisons les Virtuals Host d'Apache.
Pour simplifier la gestion de ces derniers nous allons isoler chaque Virtual Host dans un fichier de configuration séparé. Il faut donc créer un répertoire /etc/apache/vhosts qui accueillera ces fichiers.
mkdir /etc/apache/vhosts
Ensuite il faut inclure ces fichiers dans le fichier de configuration principal d'Apache, c'est à dire /etc/apache/httpd.conf :
# tout à la fin de votre httpd.conf NameVirtualHost * Include vhosts/*.conf
Voici la portion qui permet de créer ce fameux Virtual Host :
# création du virtual host (inclus dans httpd.conf) echo " <VirtualHost *> ServerName $domaine DocumentRoot /var/www/$login/www/ ErrorLog /home/$login/logs/error.log CustomLog /home/$login/logs/access.log combined User $login Group vhosts ScriptAlias /cgi-bin/ /var/www/$login/cgi-bin/ <Directory /var/www/$login/www/> AllowOverride All Options -Indexes +ExecCGI Order Deny,Allow Allow from all </Directory> </VirtualHost> " >> /etc/apache/vhosts/$login.conf echo " + VirtualHost Apache créé\n\n"
Voilà , le gros du travail est fait, nous pouvons maintenant passer à la dernière étape qui est la création de la base de données.
MySQL
Tout d'abord une petite précision, si vous voulez vous servir de PHPMyAdmin, voilà la configuration d'authentification à utiliser dans le fichier config.inc.php :
// url de votre phpmyadmin $cfg['PmaAbsoluteUri'] = 'http://mysql.votredomaine.com'; [...] // votre phrase secrete pour le cryptage du cookie $cfg['blowfish_secret'] = 'votresuperphrasequituetout'; [...] // méthode d'authentification par cookie $cfg['Servers'][$i]['auth_type'] = 'cookie'; // Authentication method (config, http or cookie based)? $cfg['Servers'][$i]['user'] = ''; // MySQL user $cfg['Servers'][$i]['password'] = ''; // MySQL password (only needed
Cette configuration permet de vous connecter à PHPMyAdmin avec le login et le mot de passe du compte créé et de ne voir que la base de donnée de ce compte (heureusement !).
Voici donc la dernière partie, la création du user et de la base ainsi que les droits associés :
# mysql echo -n "Faut-il installer une base de donnée mySQL ? (o/[n]) " read ans if [ _$ans = _o -o _$ans = _O ] then echo -n "Entrez le password root mysql :"; read passroot; # création de la base /usr/bin/mysqladmin -u root -p$passroot create $login echo "Base MySQL \"$login\" cr??e\n" # création du compte + db + droits /usr/bin/mysql -u root --password=$passroot mysql <<END_COMMANDS GRANT ALL PRIVILEGES ON $login.* TO "$login"@"localhost" IDENTIFIED BY '$passmysql'; FLUSH PRIVILEGES; END_COMMANDS # redémarrage de la base /usr/bin/mysqladmin -u root -p$passroot reload echo "User MySQL \"$login\" cr??\n" else echo "Tant pis ..." fi
Voilà c'est fini
Ce petit script me simplifie grandement la vie depuis que je l'ai écrit. J'espère qu'il vous aidera vous aussi ...
Il se peut que des coquilles se soient glissées dans cet article, n'hésitez pas à me les faire remonter SVP.
Depuis le temps, avec un ami, nous avons amélioré ce script par l'ajout d'une interface web en PHP ainsi que les scripts de modification et suppression de compte, ils feront peut-être un jour l'objet d'un article, mais pour le moment je vous laisse vous amuser avec ce premier script !

Commentaires
1. Le mercredi 27 juillet 2005 à 23:33, par NiKo
2. Le vendredi 5 août 2005 à 16:26, par solo
3. Le lundi 15 août 2005 à 18:23, par the_blob
4. Le lundi 22 août 2005 à 13:43, par Tatane
5. Le mardi 11 octobre 2005 à 17:46, par Nicolas Martinez
6. Le mardi 11 octobre 2005 à 18:01, par Tatane
7. Le mardi 11 octobre 2005 à 20:02, par Nicolas Martinez
8. Le dimanche 16 octobre 2005 à 14:52, par dody
9. Le vendredi 4 août 2006 à 13:17, par flux
10. Le jeudi 31 août 2006 à 10:03, par ALeXiS
11. Le mercredi 29 novembre 2006 à 03:04, par YOMPA
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.