VII. Script▲
De manière générale, si vous pensez qu'un script serait « top cool », n'hésitez pas à me MP pour me le demander. Peut-être qu'il est en cours de réalisation, ou qu'il traine sur mon ordinateur ;)
VII-A. Installation d'un nouvel hébergement▲
Ce script permet de créer les paramètres nécessaires pour créer un nouveau site. Il configure :
- Apache (virtualhost) ;
- Bind ;
- Vsftpd ;
- Postfix (création du compte mail webmaster) ;
- Copie des fichiers de base dans le répertoire home.
Ce script a besoin, pour être exécuté, de deux paramètres. Il génère un mot de passe aléatoire, ainsi que tout ce qu'il faut pour l'hébergement (base de données, ftp, compte mail). Vous pouvez lancer le script sans aucun paramètre, le système vous les demandera de façon interactive :
- le domain ;
- le tld.
Avant d'utiliser le script pour la première fois, il faut commencer par créer l'arborescence de base qui devra exister dans le nouvel hébergement créé. Dans le même répertoire que votre script, créer l'arborescence suivante :
fic_originaux/
fic_originaux/logs/
fic_originaux/public_html/
fic_originaux/public_html/index.html
fic_originaux/subdomain/
Vous pouvez évidemment mettre ce que vous voulez dans le dossier fic_originaux/public_html/. Pour ma part, je mets un fichier index.html contenant un message de bienvenue, et un fichier info.php qui contient la commande phpinfo(). Cela permet de vérifier que le php est activé et fonctionne correctement.
Ce script est livré en l'état, sans aucune assurance. Il peut être adapté, mais en aucun cas redistribué, sous quelque forme que ce soit. Il n'est certainement pas optimisé, mais il fonctionne avec le reste du tutoriel !
Pour exécuter le script, il faut lui donner les droits d'exécution (X), et le lancer sous cette forme :
./new_site.sh user mdp domaine
# ------------------------------------------------------------------------------------------------------------------------
# Script de création d'hébergement
#
# Auteur: Lange Olivier
# Date: 2006/2007
# Description:
# Script permettant d'ajouter un nouvel hebergement dans le serveur. Il crée tous les fichiers
# Nécessaire, et effectue les configurations de base.
# Paramètre: 1° Nom du l'user Shell
# 2° Nom de domaine
#
# Remarque: Ce script est configuré pour l'utilisation via ipfailover, et pour la séparation mysql / apache2
# sur 2 serveurs différents. Si les services sont disponibles sur le même serveur, il vous faut
# utiliser la même ip pour mon_ip et ip_mysql et éventuellement modifier le script pour bloquer
# le user mysql à localhost
#-------------------------------------------------------------------------------------------------------------------------
#!/bin/sh
#################################### Début des paramètres à configurer ########################################
# Mot de passe du compte root pour mysql
pass_root=mon_password
# Récupère l'IP du serveur
#mon_ip=`grep $HOSTNAME /etc./hosts |cut -f1`
mon_ip="87.98.129.88"
ip_mysql="91.121.63.55"
hostname="ns3532775.ovh.net"
# Définit l'email qui recevra les paramètres générés (admin's mail)
mail_envoi_param=mailbox@domaine.tld
# Définit les DNS utilisés:
ns1=ns1.domain.tld
ns2=ns2.domain.tld
################################## Fin des paramètres à modifier ###############################################
###############################################################################################################
# NE PAS TOUCHER PLUS BAS SI VOUS NE SAVEZ PAS CE QUE VOUS FAITES
###############################################################################################################
# Récupère le nom d'user créer
if $1; then
clear
echo "veuillez entrer le nom de domaine SANS le tld (ex: imavox)"
read new_user
echo "veuillez entrer le tld (ex: ch)"
read tld
else
new_user=$1
tld=$2
fi
# Récupère le nom de domaine
nom_domaine=$new_user.$tld
nom_base_sql=$new_user$tld
# Génère le mot de passe de 6 caractères
M="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
while [ "${n:=1}" -le "20" ]
do pass="$pass${M:$(($RANDOM%${#M})):1}"
let n+=1
done
aleatoire=${pass:6:3}
password=${pass:0:6}
sql=${new_user:0:10}
new_user=$sql$tld$aleatoire
# Récupère la date de création pour générer le fichier Bind
date_creation=`date +%Y%m%d`01
# Défini le répertoire de base du user
rep=/home/$new_user
# Test si le répertoire existe, et donc le user
if [ -d $rep ]; then
echo "l'utilisateur est déjà géré par ce serveur"
else
if [ -e /etc/apache2/sites-enabled/$nom_domaine ]; then
echo "Le nom de domaine est déjà géré par ce serveur"
else
# Génère les fichiers de base du nouveau site
/usr/sbin/useradd -p $password $new_user
cp -R fic_originaux $rep
chown -R www-data:www-data $rep
chmod -R 755 $rep
# ------------------------------------------------------------------------------------------------------------------------
# Configuration d'apache
#-------------------------------------------------------------------------------------------------------------------------
# Crée le fichier de configuration du répertoire virtuel
echo "
<VirtualHost *>
ServerAdmin postmaster@$nom_domaine
ServerName webmail.$nom_domaine
DocumentRoot /var/www/webmail/
<Directory /var/www/webmail/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
ErrorLog /home/$new_user/logs/error.log
LogLevel warn
CustomLog /home/$new_user/logs/access.log combined
ServerSignature Off
</VirtualHost>
<VirtualHost *>
ServerAdmin postmaster@$nom_domaine
ServerName mysql.$nom_domaine
DocumentRoot /var/www/phpmyadmin/
<Directory /var/www/phpmyadmin/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
ErrorLog /home/$new_user/logs/error.log
LogLevel warn
CustomLog /home/$new_user/logs/access.log combined
ServerSignature Off
</VirtualHost>
<VirtualHost *>
ServerAdmin postmaster@$nom_domaine
ServerName stats.$nom_domaine
DocumentRoot /home/$new_user/subdomain/stats/
<Directory /home/$new_user/subdomain/stats/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
AuthType Basic
AuthName \"$new_user $password\"
AuthUserFile /home/www/.htpasswd
Require valid-user
</Directory>
ErrorLog /home/$new_user/logs/error.log
LogLevel warn
CustomLog /home/$new_user/logs/access.log combined
ServerSignature Off
</VirtualHost>
<VirtualHost *>
ServerAdmin postmaster@$nom_domaine
ServerName www.$nom_domaine
ServerAlias $nom_domaine
DocumentRoot /home/$new_user/public_html/
<Directory /home/$new_user/public_html/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
ErrorLog /home/$new_user/logs/error.log
LogLevel warn
CustomLog /home/$new_user/logs/access.log combined
ServerSignature Off
</VirtualHost>
" >> /etc/apache2/sites-available/$nom_domaine
ln -s /etc/apache2/sites-available/$nom_domaine /etc/apache2/sites-enabled/$nom_domaine
# ------------------------------------------------------------------------------------------------------------------------
# Configuration de BIND
#-------------------------------------------------------------------------------------------------------------------------
# Crée le fichier de déclaration de zone BIND
echo "
\$ttl 86400
$nom_domaine. IN SOA $hostname. webmaster.$nom_domaine. (
$date_creation
21600
3600
604800
86400 )
IN NS $ns2.
IN NS $ns2.
IN MX 10 mail.$nom_domaine.
IN A $mon_ip
www IN A $mon_ip
mail IN A $mon_ip
smtp IN A $mon_ip
pop IN A $mon_ip
pop3 IN A $mon_ip
imap IN A $mon_ip
mysql IN A $ip_mysql
webmail IN A $mon_ip
stats IN A $mon_ip
" > /etc./bind/db.$nom_domaine
# Crée la zone BIND
echo "zone \"$nom_domaine\" {
type master;
file \"/etc./bind/db.$nom_domaine\";
};
" >> /etc/bind/zones.conf
# ------------------------------------------------------------------------------------------------------------------------
# Configuration du ftp principal
#-------------------------------------------------------------------------------------------------------------------------
# on ajout l'utilisateur et son mdp
rm -Rf /etc/vsftpd/login.db
echo "$new_user
$password" >> /etc/vsftpd/login.txt
# On met à jour la base berkeley
db3_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
# On ajoute les paramètre pour notre nouveau site
echo "anon_world_readable_only=NO
local_root=$rep
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES" > /etc/vsftpd/vsftpd_user_conf/$new_user
# ------------------------------------------------------------------------------------------------------------------------
# Installation du compte mail par défaut
#-------------------------------------------------------------------------------------------------------------------------
mysql -u root -e "INSERT INTO domain (domain, actif) VALUES ('$nom_domaine', '1');" -p$pass_root postfix
mysql -u root -e "INSERT INTO mailbox (email,password,password_smtp,quota,actif,imap,pop3) VALUES ('postmaster@$nom_domaine',ENCRYPT('$password'),'$password'$
mysql -u root -e "CREATE DATABASE $new_user" -p$pass_root
mysql -u root -e "GRANT SELECT ON $new_user.* TO '$new_user'@'%' IDENTIFIED BY '$password';" -p$pass_root
echo "Votre compte à bien été paramétré" | mail -s "status OK" postmaster@$nom_domaine
# ------------------------------------------------------------------------------------------------------------------------
# Redémarre les services
#-------------------------------------------------------------------------------------------------------------------------
/etc/init.d/bind9 restart
/etc/init.d/apache2 restart
/etc/init.d/vsftpd restart
echo "L'utilisateur $new_user bien été enregistrée sur le serveur"
echo "Le serveur a été redémarré"
echo "Le login ftp est: $new_user"
echo "Le mot de passe généré est: $password "
echo "les paramètres d'accès ont été envoyés à l'adresse mail $mail_envoi_param"
echo "voici les paramètres d'accès pour l'hébergement $nom_domaine :
login: $new_user
password: $password
nom domaine: $nom_domaine
ip: $mon_ip
ip mysql: $ip_mysql
pop: mail.$nom_domaine
imap: mail.$nom_domaine
smtp: mail.$nom_domaine
dns:
$ns1 (primaire)
$ns2 (secondaire)" | mail -s "Création compte: $nom_domaine" $mail_envoi_param
fi
fi
VII-B. création d'un sous-domaine▲
Ce script permet de créer un sous-domaine dans le répertoire /home/user/subdomain et de paramétrer les entrées DNS correspondantes, ainsi qu'un FTP chrooté (optionnel).
Pour générer le sous-domaine, vous devez entrer les informations suivantes :
- nom du sous-domaine à créer ;
- nom de domaine principal ;
- domain ID (nom du répertoire) ;
- 1 si ftp à créer, vide sinon.
Il vous faut soit entrer les paramètres lors de l'exécution du script, soit laisser vide, auquel cas le script vous les demandera de manière interactive.
Ce script est livré en l'état, sans aucune assurance. Il peut être adapté, mais en aucun cas redistribué, sous quelque forme que ce soit. Il n'est certainement pas optimisé, mais il fonctionne avec le reste du tutoriel !
# ------------------------------------------------------------------------------------------------------------------------
# Script de création de sous-domaine
#
# Auteur: Lange Olivier
# Date: 2007
# Description:
# Script permettant d'ajouter un sous-domaine à un hébergement existant
# Paramètre: 1° Nom du sous-domaine à créer
# 2° Nom de domaine principal
# 3° Domaine ID (nom du répertoire dans /home
# 4° création d'un FTP? (mettre à 1 si oui, laisser vide si non)
#-------------------------------------------------------------------------------------------------------------------------
#!/bin/sh
######################################## Paramètres à modifier ##############################
mon_ip=
######################################## FIN Paramètres à modifier ##############################
if $1; then
clear
echo "veuillez entrer le nom du sous-domaine (ex: demo)"
read subdomain
echo "veuillez entrer le domaine principal (ex: imavo.ch)"
read domain
echo "Veuillez spécifier l'id du domain (nom du répertoire)"
read domainId
echo "Définit si il faut créer un ftp ou pas (laisser vide si pas de ftp)"
read isFtp
else
subdomain=$1
domain=$2
domainId=$3
isFtp=$4
fi
mkdir /home/$domainId/subdomain/$subdomain
cat /etc/apache2/sites-available/$domain > /root/temp
echo "<VirtualHost *>
ServerAdmin webmaster@$domain
ServerName $subdomain.$domain
DocumentRoot /home/$domainId/subdomain/$subdomain/
<Directory /home/$domainId/subdomain/$subdomain/>
Options -Indexes FollowSymLinks MultiViews
AllowOverride All
</Directory>
ErrorLog /home/$domainId/logs/error.log
LogLevel warn
CustomLog /home/$domainId/logs/access.log combined
ServerSignature Off
</VirtualHost>" > /etc/apache2/sites-available/$domain
cat /root/temp >> /etc/apache2/sites-available/$domain
echo "$subdomain IN A $mon_ip" >> /etc./bind/db.$domain
if [ $isFtp ]; then
# Génère le mot de passe de 6 caractères
M="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
while [ "${n:=1}" -le "20" ]
do pass="$pass${M:$(($RANDOM%${#M})):1}"
let n+=1
done
password=${pass:0:6}
echo "$subdomain@$domain" >> /etc/vsftpd/login.txt
echo "$password" >> /etc/vsftpd/login.txt
rm -f /etc/vsftp/login.db
db3_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/login.db
/etc/init.d/vsftpd restart
echo "anon_world_readable_only=NO
local_root=/home/$domainId/subdomain/$subdomain
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES" > /etc/vsftpd/vsftpd_user_conf/$subdomain.$domain
fi
/etc/init.d/apache2 restart
/etc/init.d/bind9 restart