Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 1 addition & 76 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
51 changes: 51 additions & 0 deletions Script_Principal.sh
Original file line number Diff line number Diff line change
@@ -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."
57 changes: 57 additions & 0 deletions script_Detection.sh
Original file line number Diff line number Diff line change
@@ -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 <<EOL > /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."
52 changes: 52 additions & 0 deletions script_Main.sh
Original file line number Diff line number Diff line change
@@ -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
48 changes: 48 additions & 0 deletions script_UFW.sh
Original file line number Diff line number Diff line change
@@ -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
50 changes: 50 additions & 0 deletions script_autoMAJ.sh
Original file line number Diff line number Diff line change
@@ -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."
49 changes: 49 additions & 0 deletions script_durcissementssh.sh
Original file line number Diff line number Diff line change
@@ -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
Loading