Outils pour utilisateurs

Outils du site


projets:scriptdeconfigurationlinux

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

  1. Un accès root
  2. Une distribution Linux basée sur Debian
  3. 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 <<EOF
auto $NET_INTERFACE
iface $NET_INTERFACE inet static
    address $IP_ADDR
    netmask $NETMASK
    gateway $GATEWAY
    dns-nameservers $DNS1 $DNS2 $DNS3
    dns-search $DOMAIN
EOF

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 <<EOF
auto $NET_INTERFACE
iface $NET_INTERFACE inet static
    address $IP_ADDR
    netmask $NETMASK
    gateway $GATEWAY
    dns-nameservers $DNS1 $DNS2 $DNS3
    dns-search $DOMAIN
EOF
 
echo -e "nameserver $DNS1\nnameserver $DNS2\nnameserver $DNS3" > /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
projets/scriptdeconfigurationlinux.txt · Dernière modification : de nicolaspoirier