IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Installation complète d'un serveur web sous Debian


précédentsommaire

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 :

 
Sélectionnez
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 :

 
Sélectionnez
./new_site.sh user mdp domaine
new_site.sh
Sélectionnez
# ------------------------------------------------------------------------------------------------------------------------
#                                               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 !

new_subdomain.sh
Sélectionnez
# ------------------------------------------------------------------------------------------------------------------------
#                                               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

précédentsommaire

Copyright © 2007 Onet. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.