Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question sur la gestion d'un serveur web apache

Projet de cours

    27 février 2024 à 21:34:52

    Bonjour à tous, 

    J'ai publié sur le forum il y a peu à propos de cours. J'ai décidé de mettre en place, en local, un serveur d'hébergement WEB mais qui hébergerait de nombreux sites web. En gros, reproduire un serveur tel que Hostinger, où un utilisateur pourrait avoir son espace pour héberger son site. 

    N'y connaissant rien, je suis allé un peu en tâtonnant, concrètement, je ne savais pas quoi mettre en place. Après quelques recherches, j'ai donc décidé de développer plusieurs fonctionnalités 

    • Installation de Apache
    • Configuration des virtualhosts pour chaque nouveau utilisateur
    • Créer des sites en HTTPS 
    • Création des espaces SFTP 
    • CHROOT pour que les développeurs n'aient accès qu'à leurs espaces ou sont stockés leurs sites

    Dans l'optique de simuler au mieux la réalité, j'ai décidé de faire des scripts 

    #!/bin/bash
    
    # Vérifier si l'utilisateur est root
    if [ "$(id -u)" -ne 0 ]; then
        echo "Ce script doit être exécuté en tant que superutilisateur (root)." >&2
        exit 1
    fi
    
    # Demander à l'utilisateur de choisir entre HTTP et HTTPS
    read -r -p "Voulez-vous créer un site en HTTP ou en HTTPS? (http/https) " protocole
    
    # Demander à l'utilisateur d'entrer le nom du dossier
    read -p "Veuillez entrer le nom du dossier : " nom_dossier
    
    # Vérification de la présence du paramètre
    if [ -z "$nom_dossier" ]; then
        echo "Veuillez spécifier un nom de dossier."
        exit 1
    fi
    
    # Création du dossier dans /var/www
    mkdir -p "/var/www/$nom_dossier"
    
    # Création du fichier HTML avec le contenu spécifié
    echo "<h1>Test $nom_dossier</h1>" | sudo tee "/var/www/$nom_dossier/index.html" > /dev/null
    
    # Demander à l'utilisateur s'il souhaite fournir des alias
    read -r -p "Voulez-vous ajouter des alias à la directive ServerAlias? (oui/non) " add_alias
    
    if [ "$add_alias" = "oui" ]; then
        # Demande à l'utilisateur de fournir les alias (séparés par des espaces)
        read -r -p "Veuillez fournir les alias (séparés par des espaces) à ajouter à la directive ServerAlias : " aliases
    else
        aliases=""
    fi
    
    # Préparation du contenu commun du fichier de configuration
    config_common="\n\tServerName $nom_dossier\n\tDocumentRoot \"/var/www/$nom_dossier\"\n\tErrorLog /var/log/apache2/error.$nom_dossier.log\n\tCustomLog /var/log/apache2/access.$nom_dossier.log combined"
    
    if [ "$protocole" = "https" ]; then
        # Générer un certificat et une clé
        mkdir -p /tmp/ssl_conf
        openssl req -x509 -newkey rsa:2048 -nodes -keyout /tmp/ssl_conf/$nom_dossier.key -out /tmp/ssl_conf/$nom_dossier.crt -days 365 -subj "/CN=$nom_dossier"
        
        # Copier la clé et le certificat dans les dossiers appropriés
        mkdir -p /etc/apache2/ssl.crt /etc/apache2/ssl.key
        cp /tmp/ssl_conf/$nom_dossier.crt /etc/apache2/ssl.crt/
        cp /tmp/ssl_conf/$nom_dossier.key /etc/apache2/ssl.key/
        
        # Ajout de la configuration spécifique à HTTPS
        config_https="<VirtualHost *:443>$config_common\n\tServerAlias www.$nom_dossier.fr\n\tSSLEngine on\n\tSSLCertificateFile /etc/apache2/ssl.crt/$nom_dossier.crt\n\tSSLCertificateKeyFile /etc/apache2/ssl.key/$nom_dossier.key\n</VirtualHost>"
        
        # Création du fichier de configuration HTTPS
        echo -e "$config_https" | sudo tee "/etc/apache2/sites-available/$nom_dossier-le-ssl.conf" > /dev/null
    
        # Activer le site HTTPS
        sudo a2ensite "$nom_dossier-le-ssl.conf"
    else
        # Ajout de la configuration spécifique à HTTP
        config_http="<VirtualHost *:80>$config_common"
        
        # Ajout des alias fournis par l'utilisateur pour la configuration HTTP
        if [ -n "$aliases" ]; then
            config_http+="\n\tServerAlias $aliases"
        fi
        
        config_http+="\n</VirtualHost>"
        
        # Création du fichier de configuration HTTP
        echo -e "$config_http" | sudo tee "/etc/apache2/sites-available/$nom_dossier.conf" > /dev/null
        
        # Activer le site HTTP
        sudo a2ensite "$nom_dossier.conf"
    fi
    
    # Redémarrer le service apache2
    sudo systemctl reload apache2
    
    echo "Fichier de configuration créé et activé : $config_file"
    
    #Créer l&#39;utilisateur associé au VirtualHost
    
    #Demande le nom de l'utilisateur
    echo "Entrez le nom de l&#39;utilisateur à créer : ";
    read user_name
    # Crée l'utilisateur et l'ajouter dans le groupe sftp_web
    sudo useradd --shell /bin/false "$user_name";
    sudo usermod -a -G sftp_web; "$user_name";
    sudo mkdir /home/"$user_name";
    
    # Définit le mot de passe pour l&#39;utilisateur
    sudo passwd "$user_name";
    # Droit pour que l'utilisateur puisse accéder à son dossier
    sudo chown "$user_name""$user_name"/var/www/"$nom_dossier";
    sudo chmod 700 /var/www/"$nom_dossier";
    # Crée un lien symbolique pour rediriger l'utilisateur lorsqu'il se connecte en SFTP
    sudo ln -sn /var/www/"$nom_dossier"/home/"$user_name"/
    echo "L'utilisateur "$user_name" a été créé avec succès";

    Du coup, je viens vous demander votre aide pour trouver d'autres idées afin de rendre mon projet plus réaliste car je trouve que mon serveur est un peu limité au final. Mon prof m'a donné l'idée de limiter l'espace pour chaque utilisateur mais y a t'il d'autres éléments à mettre en place ? 

    J'ai aussi testé des outils comme cPannel, mais du coup, je préfère tout faire pour savoir concrètement comment cela fonctionne.

    Merci pour votre aide :) 

    • Partager sur Facebook
    • Partager sur Twitter

    Question sur la gestion d'un serveur web apache

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown