====== 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