====== Script de Configuration et Sécurisation d’un Serveur Linux ====== Ce script Bash permet d’automatiser plusieurs tâches essentielles pour la configuration et la sécurisation d’un serveur Linux. Il s'assure que l'utilisateur exécutant le script est **root**, met en place une **configuration réseau statique**, régénère les **certificats SSH**, modifie les **mots de passe des utilisateurs** spécifiés et effectue un **nettoyage du système** avant de le redémarrer. ===== Fonctionnalités ===== * **Vérification des privilèges root** * **Régénération des certificats SSH** * **Configuration réseau statique** * Sélection de l'interface réseau * Définition de l’adresse IP, du masque de sous-réseau, de la passerelle et des serveurs DNS * Mise à jour des fichiers ''/etc/network/interfaces'' et ''/etc/resolv.conf'' * **Changement du nom de la machine (hostname)** * **Modification des mots de passe pour les utilisateurs root et npoirier** * **Suppression optionnelle du script après exécution** * **Nettoyage des journaux et de l’historique système** * **Redémarrage du serveur** ===== Pré-requis ===== - Un accès root - Une distribution Linux basée sur **Debian** - Une connexion stable au serveur ===== Installation et Utilisation ===== Téléchargez et exécutez le script avec les commandes suivantes : chmod +x confserv.sh sudo ./confserv.sh Suivez les instructions fournies par le script pour entrer les informations réseau et autres configurations requises. À la fin, le **système redémarrera automatiquement**. ===== Explication du Code ===== ==== Vérification des droits root ==== Le script s'assure qu'il est exécuté en tant que **root** avant de poursuivre. if [ "$EUID" -ne 0 ]; then echo "Ce script doit être exécuté en tant que root." exit 1 fi ==== Validation des adresses IP ==== Une fonction ''validate_ip()'' permet de s’assurer que les entrées de l’utilisateur sont bien des adresses IP valides. validate_ip() { local ip=$1 local IFS=. local -a octets=($ip) if [[ ${#octets[@]} -ne 4 ]]; then return 1 fi for octet in "${octets[@]}"; do if ! [[ "$octet" =~ ^[0-9]+$ ]]; then return 1 fi if ((octet < 0 || octet > 255)); then return 1 fi done return 0 } ==== Régénération des certificats SSH ==== Le script supprime et recrée les certificats SSH pour renforcer la sécurité. systemctl stop ssh rm -f /etc/ssh/ssh_host_* ssh-keygen -A systemctl restart ssh ==== Configuration réseau ==== L'utilisateur doit fournir une adresse IP, un masque de sous-réseau, une passerelle et des serveurs DNS. Le fichier ''/etc/network/interfaces'' est mis à jour en conséquence. cat > /etc/network/interfaces < ==== Changement du nom de la machine ==== Le nouveau nom de la machine est défini dans ''/etc/hostname''. echo "$NEW_HOSTNAME" > /etc/hostname hostnamectl set-hostname "$NEW_HOSTNAME" ==== Modification des mots de passe ==== Le script demande un **nouveau mot de passe** pour les utilisateurs ''root'' et ''npoirier''. echo "$user:$PASS1" | chpasswd ==== Nettoyage et Redémarrage ==== Tous les logs et fichiers temporaires sont supprimés avant le redémarrage du serveur. rm -rf /var/log/* rm -rf /var/cache/apt/* reboot ===== Sécurité et Bonnes Pratiques ===== * **Sauvegarder les fichiers de configuration avant toute modification.** * **S’assurer que l’adresse IP et les paramètres réseau sont corrects pour éviter toute perte de connexion.** ===== Script ===== #!/bin/bash # Vérifier si le script est exécuté en tant que root if [ "$EUID" -ne 0 ]; then echo "Ce script doit être exécuté en tant que root." exit 1 fi # Fonction pour valider une adresse IP validate_ip() { local ip=$1 local IFS=. local -a octets=($ip) if [[ ${#octets[@]} -ne 4 ]]; then return 1 fi for octet in "${octets[@]}"; do if ! [[ "$octet" =~ ^[0-9]+$ ]]; then return 1 fi if ((octet < 0 || octet > 255)); then return 1 fi done return 0 } # Régénération des certificats SSH echo "Régénération des certificats SSH..." systemctl stop ssh rm -f /etc/ssh/ssh_host_* ssh-keygen -A systemctl restart ssh # Liste des interfaces réseau echo "Liste des interfaces réseau disponibles:" ip -o link show | awk -F': ' '{print $2}' read -p "Choisissez une interface réseau: " NET_INTERFACE # Configuration réseau echo "Configuration des paramètres réseau en mode fixe" while true; do read -p "Adresse IP: " IP_ADDR if validate_ip "$IP_ADDR"; then break; fi echo "Adresse IP invalide, veuillez entrer une adresse valide (ex: 192.168.1.100)." done while true; do read -p "Masque de sous-réseau: " NETMASK if validate_ip "$NETMASK"; then break; fi echo "Masque de sous-réseau invalide, veuillez entrer une valeur correcte (ex: 255.255.255.0)." done while true; do read -p "Passerelle: " GATEWAY if validate_ip "$GATEWAY"; then break; fi echo "Passerelle invalide, veuillez entrer une adresse valide (ex: 192.168.1.1)." done read -p "Domaine: " DOMAIN while true; do read -p "Serveur DNS 1: " DNS1 if validate_ip "$DNS1"; then break; fi echo "Serveur DNS invalide, veuillez entrer une adresse valide (ex: 8.8.8.8)." done while true; do read -p "Serveur DNS 2: " DNS2 if validate_ip "$DNS2"; then break; fi echo "Serveur DNS invalide, veuillez entrer une adresse valide (ex: 8.8.4.4)." done while true; do read -p "Serveur DNS 3: " DNS3 if validate_ip "$DNS3"; then break; fi echo "Serveur DNS invalide, veuillez entrer une adresse valide (ex: 1.1.1.1)." done cat > /etc/network/interfaces < /etc/resolv.conf # Demande du nouveau nom d'hôte read -p "Nouveau nom de la machine: " NEW_HOSTNAME echo "$NEW_HOSTNAME" > /etc/hostname hostnamectl set-hostname "$NEW_HOSTNAME" # Modification des mots de passe echo "Modification des mots de passe" for user in root npoirier; do while true; do read -s -p "Nouveau mot de passe pour $user: " PASS1 echo read -s -p "Confirmez le mot de passe pour $user: " PASS2 echo if [ "$PASS1" == "$PASS2" ]; then echo "$user:$PASS1" | chpasswd break else echo "Les mots de passe ne correspondent pas. Veuillez réessayer." fi done done # Proposition de suppression du script read -p "Voulez-vous supprimer ce script après exécution ? (o/n): " DELETE_SCRIPT if [[ "$DELETE_SCRIPT" =~ ^[Oo]$ ]]; then rm -- "$0" fi # Nettoyage du système echo "Nettoyage du système..." history -c find /home -name .bash_history -type f -exec rm -f {} \; rm -f /root/.bash_history rm -rf /tmp/* rm -rf /var/tmp/* rm -rf /var/log/* rm -rf /var/cache/apt/* # Redémarrage du système echo "Redémarrage du système en cours..." sleep 3 reboot