diff --git a/README.md b/README.md index cf88c9a..3f64c13 100644 --- a/README.md +++ b/README.md @@ -1,76 +1 @@ -# Automatisation et Durcissement d’un Système Debian avec Bash - -## Introduction - -L'objectif de ce TP est de **sécuriser** et **automatiser** la configuration initiale d'un système Debian. - -Vous créerez un **script Bash** qui centralisera toutes les opérations de durcissement, en veillant à ce que le processus soit **automatisé** et **fiable**. - -Le script principal devra **sourcer des fonctions** spécifiques depuis d'autres fichiers pour maintenir un code clair et modulaire. De plus, vous devrez porter une attention particulière aux **inputs utilisateurs** et à la gestion des fichiers. - -N'oubliez pas d'**anticiper les erreurs** et de vérifier systématiquement que tous les fichiers et fonctions requis sont accessibles et fonctionnels avant de procéder. - -Exemple : https://sbnsec.fr/linux.sh - -## Objectifs - -- **Automatiser** la configuration initiale de la sécurité. -- **Durcir** les configurations essentielles, comme SSH et les services. -- **Personnaliser** l’environnement de travail pour le rendre plus adapté à vos usages. -- **Proposer des idées** novatrices et utiles pour améliorer la sécurité et l’ergonomie de votre système. - -## Étapes du TP - -### 1. Copie de la Clé SSH - -Vous devrez automatiser la copie de votre clé SSH publique dans le fichier `~/.ssh/authorized_keys` de manière sécurisée. Assurez-vous de configurer les permissions du fichier de manière adéquate pour empêcher tout accès non autorisé. - -### 2. Durcissement de SSH - -L’objectif est de configurer votre service SSH pour le rendre plus sûr. Vous devrez : -- **Désactiver l'authentification par mot de passe** pour forcer l'utilisation des clés SSH. -- **Limiter l'accès SSH** à certains utilisateurs ou groupes. -- **Désactiver l'accès root** via SSH pour éviter des tentatives d'intrusion sur ce compte sensible. -- **Utilisation d’une Liste Blanche d’Adresses IP pour SSH** Pour une sécurité renforcée, autorisez uniquement des plages d'adresses IP spécifiques à se connecter via SSH. Cette liste blanche limite l'accès à des sources fiables. - -### 3. Installation et Configuration d’un Pare-feu (UFW) - -Installez un pare-feu (UFW) et configurez-le pour permettre uniquement les connexions nécessaires (comme SSH, HTTP, HTTPS). Vous devrez : -- **Installer et activer UFW**. -- **Configurer les règles par défaut** pour bloquer tout le trafic entrant sauf les services essentiels. -- **Autoriser** les connexions nécessaires, comme SSH ou les serveurs web si applicable. - - ### 4. Propositions de Durcissement Simples - -Voici des propositions pour renforcer la sécurité de votre système. Chaque proposition doit être documentée avec précision pour que vous compreniez comment elle renforce la sécurité et dans quel contexte elle est applicable. - -- **Mise en Place d’Authentification à Deux Facteurs (2FA)** - Ajoutez une deuxième couche de sécurité en configurant une authentification à deux facteurs pour SSH. Cela nécessite une confirmation supplémentaire pour accéder au système, généralement via une application d'authentification mobile. - -- **Mise à Jour Automatique des Paquets de Sécurité** - Configurez le système pour qu’il télécharge et installe automatiquement les mises à jour de sécurité afin de ne jamais manquer une correction importante. Cela garantit que votre système reste à jour sans intervention manuelle. - -- **Désactivation des Services Inutiles** - Tous les services réseau actifs doivent être absolument nécessaires. Identifiez et désactivez tous les services qui ne sont pas requis pour réduire les points d'attaque potentiels. - -- **Détection des Modifications dans les Fichiers Système** - Utilisez des outils comme `AIDE` ou `Tripwire` pour surveiller les fichiers critiques du système et être alerté en cas de modification non autorisée. Ces outils peuvent aider à identifier les intrusions et les altérations de fichiers. - -### 5. Personnalisation et Suggestions de Fonctionnalités - -En plus de sécuriser votre système, l’objectif est de personnaliser votre environnement de travail pour le rendre plus efficace et agréable à utiliser. Voici quelques idées à implémenter : - -- **Alias pour Commandes Fréquentes** : Créez des alias dans votre `.bashrc` pour les commandes que vous utilisez régulièrement. Par exemple, créer un alias pour une commande longue et répétitive permet de gagner du temps. - -- **Scripts d'Automatisation Personnalisés** : Développez des scripts pour automatiser des tâches récurrentes, comme la mise à jour des paquets, la surveillance de l’espace disque, ou l’archivage de logs. - -- **Prompt Bash Personnalisé** : Modifiez votre invite de commande (`PS1`) pour inclure des informations utiles, comme le répertoire courant, l’heure, ou l’état du dépôt Git sur lequel vous travaillez. Cela peut améliorer votre productivité en vous donnant des informations en un coup d'œil. - -- **Synchronisation Automatique de Répertoires** : Configurez des scripts pour synchroniser automatiquement vos dossiers de travail entre différentes machines à l'aide de `rsync`. Cela peut être utile si vous travaillez sur plusieurs environnements. - -- **Intégration de Notifications Système** : Intégrez des notifications système qui vous alertent lorsqu’une tâche longue est terminée (comme une compilation ou une sauvegarde). Cela vous permet de continuer à travailler sur autre chose sans avoir à vérifier constamment l’état de vos processus. - -### Suggestions d'Idées Supplémentaires - -Poussez encore plus loin la personnalisation et la sécurisation en réfléchissant à d’autres fonctionnalités ou scripts qui pourraient améliorer votre système. -Réfléchissez aux tâches que vous effectuez souvent, aux aspects de la sécurité que vous pourriez renforcer, ou aux améliorations que vous aimeriez avoir dans votre environnement de travail. Soyez créatifs ! +#Projet Script Bash diff --git a/Script_Principal.sh b/Script_Principal.sh new file mode 100644 index 0000000..e2598e7 --- /dev/null +++ b/Script_Principal.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +set -e # Le script s'arrête en cas d'erreur + +# Vérifier si l'utilisateur a les droits root +if [ "$(id -u)" -ne 0 ]; then + echo "Erreur : Ce script nécessite les droits root. Veuillez exécuter avec 'sudo' ou en tant que root." + exit 1 +fi + +# 1. Copie de la Clé SSH (clé_script.pub) +if [ -f ./Script1.sh ]; then + source ./Script1.sh || { echo "Échec lors de l'exécution de Script1.sh"; exit 1; } +else + echo "Erreur : Script1.sh est manquant." + exit 1 +fi + +# 2. Durcissement de SSH +if [ -f ./Script2.sh ]; then + source ./Script2.sh && echo "Script2.sh exécuté avec succès." || { echo "Échec lors de l'exécution de Script2.sh"; exit 1; } +else + echo "Erreur : Script2.sh est manquant." + exit 1 +fi + +# 3. Installation et Configuration d’un Pare-feu (UFW) +if [ -f ./Script3.sh ]; then + source ./Script3.sh && echo "Script3.sh exécuté avec succès." || { echo "Échec lors de l'exécution de Script3.sh"; exit 1; } +else + echo "Erreur : Script3.sh est manquant." + exit 1 +fi + +# 4. Propositions de Durcissement Simples +if [ -f ./Script4.sh ]; then + source ./Script4.sh && echo "Script4.sh exécuté avec succès." || { echo "Échec lors de l'exécution de Script4.sh"; exit 1; } +else + echo "Erreur : Script4.sh est manquant." + exit 1 +fi + +# 5. Personnalisation et Suggestions de Fonctionnalités +if [ -f ./Script5.sh ]; then + source ./Script5.sh && echo "Script5.sh exécuté avec succès." || { echo "Échec lors de l'exécution de Script5.sh"; exit 1; } +else + echo "Erreur : Script5.sh est manquant." + exit 1 +fi + +echo "Tous les scripts ont été exécutés avec succès." \ No newline at end of file diff --git a/script_Detection.sh b/script_Detection.sh new file mode 100644 index 0000000..66b1c60 --- /dev/null +++ b/script_Detection.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# Fonction pour installer AIDE +install_aide() { + if ! dpkg -l | grep -qw aide; then + echo "Installation de AIDE..." + apt-get update && apt-get install -y aide + else + echo "AIDE est déjà installé." + exit 1 + fi +} + +# Fonction pour initialiser la base de données AIDE +initialize_aide() { + echo "Initialisation de la base de données AIDE..." + aide --init -c /etc/aide/aide.conf + + # Déplacer la base de données générée + mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db + echo "Base de données AIDE initialisée." +} + +# Fonction pour configurer AIDE +configure_aide() { + echo "Configuration de AIDE pour surveiller les fichiers critiques..." + + # Modifier le fichier de configuration si nécessaire + + echo "Configuration de AIDE terminée." +} + +schedule_aide_check() { + echo "Planification d'une vérification automatique quotidienne avec cron..." + + # Créer un fichier cron pour AIDE + cat < /etc/cron.daily/aide_check +#!/bin/bash +# Script de vérification quotidienne d'AIDE + +/usr/bin/aide --check | mail -s "Rapport AIDE" root +EOL + + # Donner les droits d'exécution au script cron + chmod +x /etc/cron.daily/aide_check + echo "Vérification automatique planifiée." +} + +# Appel des fonctions + +install_aide +initialize_aide +configure_aide +schedule_aide_check + + +echo "Configuration de la détection des modifications système avec AIDE terminée." diff --git a/script_Main.sh b/script_Main.sh new file mode 100644 index 0000000..08972ee --- /dev/null +++ b/script_Main.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Afficher le menu +echo "Sélectionnez une fonctionnalité à activer :" +echo "1) Génération de clés SSH sécurisées" +echo "2) Durcissement de la configuration SSH" +echo "3) Mise à jour automatique des paquets de sécurité" +echo "4) Détection des modifications des fichiers système" +echo "5) Configuration du pare-feu UFW" +echo "6) Activer toutes les fonctionnalités" +echo "7) Quitter" +echo -n "Entrez votre choix [1-7] : " +read -r choix + +# Exécuter les scripts en fonction du choix +case $choix in + 1) + echo "Génération de clés SSH sécurisées..." + ./script_sshkey.sh + ;; + 2) + echo "Durcissement de la configuration SSH..." + ./script_durcissementssh.sh + ;; + 3) + echo "Activation de la mise à jour automatique des paquets de sécurité..." + ./script_autoMAJ.sh + ;; + 4) + echo "Activation de la détection des modifications des fichiers système..." + ./script_Detection.sh + ;; + 5) + echo "Configuration du pare-feu UFW..." + ./script_UFW.sh + ;; + 6) + echo "Activation de toutes les fonctionnalités..." + ./script_sshkey.sh + ./script_durcissementssh.sh + ./script_autoMAJ.sh + ./script_Detection.sh + ./script_UFW.sh + ;; + 7) + echo "Quitter" + exit 0 + ;; + *) + echo "Choix invalide. Veuillez réessayer." + ;; +esac diff --git a/script_UFW.sh b/script_UFW.sh new file mode 100644 index 0000000..64cf649 --- /dev/null +++ b/script_UFW.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# Installation de UFW + +configure_ufw() { + + if ! command -v ufw &> /dev/null; then + + echo "Installation de UFW" + + apt-get update && apt-get install -y ufw + + else + echo "UFW est déja installé" + exit 1 + fi + + echo "Activation de UFW" + + ufw enable + + # Config des régles par défaut + + echo "Configuration des règles par défaut" + + ufw default deny incoming # Bloquer les connexions entrantes + ufw default allow outgoing # Autoriser les connexions sortantes + + # Autoriser les connexions SSH + echo "Autorisation des connexions SSH..." + ufw allow ssh + + # Autoriser les connexions HTTP (port 80) + echo "Autorisation des connexions HTTP..." + ufw allow http + + # Autoriser les connexions HTTPS (port 443) + echo "Autorisation des connexions HTTPS..." + ufw allow https + + # Vérification du statut du pare-feu + echo "Statut de UFW" + ufw status verbose + + echo "Installation et configuration de UFW terminées." +} + +configure_ufw \ No newline at end of file diff --git a/script_autoMAJ.sh b/script_autoMAJ.sh new file mode 100644 index 0000000..655d6cc --- /dev/null +++ b/script_autoMAJ.sh @@ -0,0 +1,50 @@ + +#Installation de unattended-upgrades +if ! dpkg -l | grep -qw unattended-upgrades; then + + echo "Installation de unattended-upgrades <------------" + + apt-get update && apt-get install -y unattended-upgrades + +else + echo "unattended-upgrades est déjà installé." + exit 1 +fi + +# Configurer la mise à jour automatique des paquets de sécurité + +echo "Configuration de unattended-upgrades pour les mises à jour de sécurité uniquement..." + +cat << EOL > /etc/apt/apt.conf.d/50unattended-upgrades +// Unattended-Upgrade::Origins-Pattern spécifie les mises à jour à installer +Unattended-Upgrade::Origins-Pattern { + "o=Debian,a=stable"; + "o=Debian,a=stable-updates"; + "o=Debian,a=proposed-updates"; + "o=Debian,a=stable-backports"; + "o=Debian-Security"; +}; + +// Envoie un mail si des erreurs surviennent +Unattended-Upgrade::Mail "root"; +Unattended-Upgrade::MailOnlyOnError "true"; + +// Autoriser les redémarrages automatiques si nécessaire +Unattended-Upgrade::Automatic-Reboot "true"; +EOL + +# Activer les mises à jour automatiques dans APT + +echo "Activation des mises à jour automatiques dans APT..." + +cat << EOL > /etc/apt/apt.conf.d/20auto-upgrades +APT::Periodic::Update-Package-Lists "1"; +APT::Periodic::Unattended-Upgrade "1"; +EOL + +# Redémarrer le service pour appliquer les modifications + +echo "Redémarrage du service unattended-upgrades..." +systemctl restart unattended-upgrades + +echo "Configuration des mises à jour de sécurité automatiques terminée." \ No newline at end of file diff --git a/script_durcissementssh.sh b/script_durcissementssh.sh new file mode 100644 index 0000000..dc2f5db --- /dev/null +++ b/script_durcissementssh.sh @@ -0,0 +1,49 @@ +#!/bin/bash +#2. Durcissement de SSH + + SSH_CONFIG="/etc/ssh/sshd_config" #La localisation du fichier + + cp $SSH_CONFIG "${SSH_CONFIG}.bak" #Création d'une copie du fichier + + echo "Sauvegarde du fichier de configuration SSH effectuée : ${SSH_CONFIG}.bak" + + #La désactivation de l'authentification par mot de passe pour forcer l'utilisation des clés SSH. + + if grep -q "^PasswordAuthentication" $SSH_CONFIG; then + sed -i 's/^PasswordAuthentication .*/PasswordAuthentication no/' $SSH_CONFIG + else + echo "PasswordAuthentication no" >> $SSH_CONFIG + fi + + #La limiter d'accès SSH à certains utilisateurs ou groupes. + + if grep -q "^AllowUsers" $SSH_CONFIG; then + sed -i 's/^AllowUsers .*/AllowUsers toto1 toto2/' $SSH_CONFIG + else + echo "AllowUsers toto1 toto2" >> $SSH_CONFIG + fi + + #La désactivation d'accès root via SSH pour éviter des tentatives d'intrusion sur ce compte sensible. + + if grep -q "^#PermitRootLogin" $SSH_CONFIG || grep -q "^PermitRootLogin" $SSH_CONFIG; then + sed -i 's/^#PermitRootLogin .*/PermitRootLogin no/' $SSH_CONFIG + sed -i 's/^PermitRootLogin .*/PermitRootLogin no/' $SSH_CONFIG + else + echo "PermitRootLogin no" >> $SSH_CONFIG + fi + + #L'utilisation d’une Liste Blanche d’Adresses IP pour SSH Pour une sécurité renforcée, autorisez uniquement des plages d'adresses IP spécifiques à se connecter via SSH. Cette liste blanche limite l'accès à des sources fiables. + + cp /etc/hosts.allow /etc/hosts.allow.bak + + if ! grep -q "sshd : 192.168.1.1-192.168.1.10" /etc/hosts.allow; then + echo "sshd : 192.168.1.1-192.168.1.10" >> /etc/hosts.allow + fi + + cp /etc/hosts.deny /etc/hosts.deny + + if ! grep -q "sshd : ALL" /etc/hosts.deny; then + echo "sshd : ALL" >> /etc/hosts.deny + fi + + systemctl restart sshd \ No newline at end of file diff --git a/script_sshkey.sh b/script_sshkey.sh new file mode 100644 index 0000000..fc7f2a8 --- /dev/null +++ b/script_sshkey.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# 1. Copie de la Clé SSH (clé_script.pub) + +set -e # Arrête le script en cas d'erreur + +# Installation de openssh-server +apt-get install -y openssh-server +echo "Installation de openssh-server réussie." + +# Vérification si la clé existe +if [ -f /root/.ssh/clé_script ]; then + echo "La clé existe déjà. Veuillez la sauvegarder ou la supprimer avant de continuer." + exit 1 +fi + +# Demande d'un mot de passe pour la clé +while true; do + echo "Entrez un mot de passe pour la clé SSH (ne laissez pas vide) :" + read -s mot_de_passe + if [ -z "$mot_de_passe" ]; then + echo "Erreur : le mot de passe ne peut pas être vide. Veuillez réessayer." + else + break + fi +done + +# Génération de la clé +if ssh-keygen -t Ed25519 -f /root/.ssh/clé_script -N "$mot_de_passe"; then + echo "Clé SSH générée avec succès." +else + echo "Échec de la génération de la clé SSH." + exit 1 +fi + +# Création du fichier authorized_keys +mkdir -p /root/.ssh +touch /root/.ssh/authorized_keys +echo "Fichier authorized_keys créé avec succès." + +# Mise en place de la clé dans le document authorized_keys +cat /root/.ssh/clé_script.pub >> /root/.ssh/authorized_keys +echo "Clé publique ajoutée à authorized_keys." + +# Gestion des permissions +chmod 600 /root/.ssh/authorized_keys +chmod 600 /root/.ssh/clé_script.pub +chmod 700 /root/.ssh +echo "Permissions mises à jour avec succès." + +echo "Configuration de la clé SSH terminée." \ No newline at end of file