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
Binary file added Scripting_V6.zip
Binary file not shown.
63 changes: 63 additions & 0 deletions Scripting_V6/config/CONFIG_FILE.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/bin/bash

CONFIG_FILE(){




#Variables de SSH_config_hardenning

#Tant que le format IP est faux renvoyer une demande de saisie
echo ""
read -p " Entrez les adresses IPs autorisee pour la connection SSH ( xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx ... ) : " ALLOWED_IPS
while [[ ! "$ALLOWED_IPS" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; do
echo " Erreur : Adresse IP non valide "
read -p " Veuillez entrer une adresse IP valide : " ALLOWED_IPS
done
echo " Les IP en White List : $ALLOWED_IPS "
# while done Boucle conditionnelle itérative Tant que
# [[ ... ]] Permet les operateur logique interne et les espaces et metacaractere
# ! Invers la condition
# =~ Faire correspondre a une chaine de caractere
# ^ Debut de la chaine
# [0-9] Un chiffre entre 0 et 9
# + Lindiquation precedente peut se repeter plusieur fois
# $ Fin de la chaine
# \. Represente un point litteral
# do Precede les commandes a executer si la condition est fausse



#Variables de SSH_keys_registration

#Choix du chemin du fichier de configuration SSH
echo ""
read -p " Entrez le chemin du fichier de configuration SSH ( par defaut /etc/ssh/sshd_config ) :" SSH_CONFIG
SSH_CONFIG=${SSH_CONFIG:-/etc/ssh/sshd_config}
echo " Le chemin configure du fichier de configuration SSH : $SSH_CONFIG "
# Chemin absolu et non pas relatif

#Choix des utilisateurs autorises
echo ""
read -p " Entrez les utilisateur autorise ( "user1" "user2" ...) : " ALLOWED_USERS
ALLOWED_USERS=${ALLOWED_USERS:-User1}
echo " Les utlisateurs autorises : $ALLOWED_USERS "



#Variables de MAJ.sh

#Demander la mise a jour ou non de lhote
echo ""
while [[ "$MAJ_ANS" != "o" && "$MAJ_ANS" != "n" ]]; do
read -p " Souhaitez-vous mettre à jour la machine Debian ? ( Par defaut o ; Sinon : o/n) : " MAJ_ANS
MAJ_ANS=${MAJ_ANS:-o}
done
echo " Etat de la demande de mise a jour de lhote : $MAJ_ANS "
# != Different de
# && Opérateur ET logique les deux conditions doivent etre vraie




}
31 changes: 31 additions & 0 deletions Scripting_V6/fonctions/BONUS.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash

bonus(){

# Si fail2ban est deja installe, sinon ...
if dpkg -l | grep -qw fail2ban; then
echo "Fail2ban est déjà installé."
else
echo "Installation de Fail2ban..."
apt install -y fail2ban
fi
# dpkg Gere les paquets du systeme
# -l Cherche tous les paquets du systeme
# q Mode Silencieux
# w Fait correspondre le mot entier



# Création de son répertoire de configuration sil nexiste pas
#if [ ! -d /etc/fail2ban/jail.d ]; then
# mkdir -p /etc/fail2ban/jail.d
#fi
#
#echo "" > /etc/fail2ban/jail.d/ssh.conf

# Se renseigner sur les parametres




}
15 changes: 15 additions & 0 deletions Scripting_V6/fonctions/MAJ.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

update_upgrade(){

#Mise a jour de lhote
echo ""
if [[ "$MAJ_ANS" == "o" ]]; then
apt update && apt upgrade -y
fi
# apt Gestionnaire de paquets de Debian
# update Met a jour la liste des paquets disponibles a partir des depots existant
# upgrade Met a jour tous les paquets installes
# -y Repond automatiquement oui a toutes les invitations interactives de la commande

}
33 changes: 33 additions & 0 deletions Scripting_V6/fonctions/PERSONNALISATION.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/bin/bash

set -e

PERSONNALISATION() {



# Alias pour la mise à jour
if ! grep -q "alias upd=" ~/.bashrc; then
echo "Création de l'alias 'upd' "
echo "alias upd='sudo apt update && sudo apt upgrade -y'" >> ~/.bashrc
else
echo "L'alias 'upd' existe déjà. "
fi

# Personnalisation du prompt
PROMPT='PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\] \$(if [ \$? -eq 0 ]; then echo -e \":)\"; else echo -e \":(\"; fi) \[\033[0m\]\$ "'

# Verifie si elle existe deja
if grep -Fxq "$PROMPT" ~/.bashrc; then
echo "Le prompt est déjà personnalisé de la sorte."
else
echo "$PROMPT" >> ~/.bashrc
echo "Le prompt personnalisé a été ajouté dans ~/.bashrc"
fi

# Appliquer les changements
source ~/.bashrc



}
67 changes: 67 additions & 0 deletions Scripting_V6/fonctions/SSH_config_hardenning.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/bin/bash

SSH_config_hardenning(){

#Desactivation de lauthentification par MDP
#Si PasswordAuthentication existe dans $SSH_CONFIG la modifier par PasswordAuthentication no
echo ""
if grep -q "^PasswordAuthentication" $SSH_CONFIG; then
sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' $SSH_CONFIG
fi
echo "L'authentification par mot de passe a ete desactivee."
# Grep Cherche une chaine de caractere dans la variable
# -q Retourne un code 0 si la chaine de caractere est trouvee sinon code erreur 1
# ^ Pour chercher une ligne qui commence par PasswordAuthentication
# sed Permet a la boucle de modifier le contenu du fichier automatiquement
# -i Modification dans le fichier existant
# S/.../... Remplace les premiers ... par les deuxiemes ... dans la variable designee
# .* Quelques soit la suite

#Definition des utilisateurs autorises
#Si ^AllowUsers.* existe dans $SSH_CONFIG la modifier par AllowUsers suivi du contenu de $ALLOWED_USERS
#Sinon ajouter une ligne AllowUsers $ALLOWED_USERS dans $SSH_CONFIG
echo ""
if grep -q "^AllowUsers" $SSH_CONFIG; then
sed -i "s/^AllowUsers.*/AllowUsers $ALLOWED_USERS/" $SSH_CONFIG
else
echo "AllowUsers $ALLOWED_USERS" >> $SSH_CONFIG
fi
echo "L'acces en ssh a ete accorde aux utilisateurs : $ALLOWED_USERS. Profitez bien ;)"
# AllowUsers $ALLOWED_USERS Ajoute le contenu de $ALLOWED_USERS après AllowUsers le tout dans la varibale designee
# else Permet lajout de reponses au test de la condition a la boucle
# >> Ajout de caractere dans la variable en concervant ceux deja existant

#Desactivation de lauthentification SSH root
#Si ^PermitRootLogin.* existe dans $SSH_CONFIG la modifier par PermitRootLogin no
#Sinon ajouter une ligne PermitRootLogin no dans $SSH_CONFIG
echo ""
if grep -q "^PermitRootLogin" $SSH_CONFIG; then
sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' $SSH_CONFIG
else
echo "PermitRootLogin no" >> $SSH_CONFIG
fi
echo "L'acces de l'utilisateur root en ssh a ete desactive"

#Definition des IP autorisees
#Pour toute les IP dans ALLOWED_IPS les ajouter dans $SSH_CONFIG
echo ""
for ip in "${ALLOWED_IPS[@]}"; do
echo "Match Address $ip" >> $SSH_CONFIG
done
# for done Boucle d'itération for
# ip Variable allant stocker les valeur de ALLOWED_IPS
# in Literation aura lieu dans ALLOWED_IPS
# [@] Donne lacces aux valeurs de ALLOWED_IPS
# do Precede les commandes a executer apres avoir parcouru les valeurs

#Redemarrer le service SSH afin dappliquer les changements effectues
echo ""
systemctl restart sshd
systemctl restart ssh
echo "Liste blanche des IP et utilisateur configuree avec succes."
echo "Service SSH redemarre avec succes."
# systemctl Etilisé pour démarrer arrêter redémarrer vérifier le statut ou activer et désactiver les services système
# restart Defini sur redémarrer
# sshd & ssh Pour des soucis de compatibilite entre les differentes distributions linux

}
80 changes: 80 additions & 0 deletions Scripting_V6/fonctions/SSH_keys_registration.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#!/bin/bash

SSH_keys_registration(){


# PEUT ETRE SUPPR EVAL ET &>/dev/null

#Verifier lexistance de lutilisateur sinon le creer generee sa clee et ses repertoir associe si necessaire
#Parcourir les valeurs de $ALLOWED_USERS et les mettre dans la variable temporaire de boucle user
for user in $ALLOWED_USERS; do

#Si lutilisateur dans $user existe id renvera son identifiant sinon rien
echo ""
if ! id "$user" &>/dev/null; then
echo "Si l'utilisateur $user n'existe pas, pensez à le créer et déplacer les clées généré ultérieurement. Elles sont à la racine du script."
# &>/dev/null Desencombre le shell en mettant les sortie dans le fichier /dev/null
fi
#Definion du repertoire home de lutilisateur
USER_HOME=$(eval echo ~$user)
# eval Obtient dabord le contenu de la commande avant de lexecuter
# ~$user Renvoi le repertoir de lutilisateur
# On genere ou nouvelle variable interne a cet boucle

#Definion du repertoire SSH de lutilisateur
SSH_DIR="$USER_HOME/.ssh"
# /.ssh Ajouter ce repertoire dans le home

#Si le repertoire .ssh nexiste pas le creer
echo ""
if [ ! -d "$SSH_DIR" ]; then
echo "Creation du repertoire SSH de $user"
mkdir -p "$SSH_DIR"
chown $user:$user "$SSH_DIR"
chmod 700 "$SSH_DIR"
fi
# -d Vraie si le repertoir existe
# chmod Gere les permission repertoir et fichier
# 7 Tous pour le proprietaire du repertoire
# 0 Rien pour les membres du groupe de lutilisaeur
# 0 Rien pour les autres utilisateurs

#Definition du repertoir des clee RSA
KEY_FILE="$SSH_DIR/id_rsa"

#Generer une paire de cles SSH ( privee et public )
echo ""
echo "Generation des clee rsa de $user"
ssh-keygen -t rsa -b 2048 -f "$KEY_FILE" -q -N ""
# ssh-keygen Outil de generation de clee SSH
# -t Choisir le type de clee genere ici type rsa
# -b Specifie la taille de la clee ici 2048 bits
# -f Specifi le chemin et nom du fichier ici dans la variable KEY_PATH
# -N Specifie une phrase de pass qui protege la clee privee ( ici null car pas de valeur apres N )

#Deplacer la cle publique dans authorized_keys
echo ""
echo "Ajout de la cle publique dans authorized_keys pour $user"
cat "$KEY_FILE.pub" >> "$SSH_DIR/authorized_keys"
chown $user:$user "$SSH_DIR/authorized_keys"
chmod 600 "$SSH_DIR/authorized_keys"
# cat Renvoi le contenu dun fichier
# chown Gere lappartenance des repertoire et fichier
# $user:$user Utilisateur:Groupe:Autres
# 6 Lecture et ecriture

#Gestion privileges sur les clees rsa
chown $user:$user "$KEY_FILE"
chmod 600 "$KEY_FILE"
# Les utilisateurs ne sont pas admin pas besoin des plein droits sur les clees

echo "Clees RSA generee pour $user"

done

echo "Gestion des clees RSA pour lacces SSH termine ."




}
20 changes: 20 additions & 0 deletions Scripting_V6/fonctions/UFW_config_hardenning.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash

UFW_config_hardenning(){

#Si ufw n'est pas installer, l'installer
if ! command -v ufw > /dev/null; then
sudo apt install -y ufw;
fi
# command Execute la commande.
# v Vérifie si la commande existe

# Activation du pare feu
ufw default deny incoming
ufw default allow outgoing

ufw allow ssh
ufw enable

}

72 changes: 72 additions & 0 deletions Scripting_V6/main_script.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
#!/bin/bash
#Definit au systeme quon utilise Bash

#La gestion des erreurs du script se fait ici et pas dans les fonctions pour ameliorer leur portabilite
trace(){
echo "# $*"
"$@"
}
# Non_de_la_fonction(){ Contenu de la fonction } Les parenthese indique que cest une fonction
# echo Affiche des chaines de caracteres
# ; Peut remplacer lindentation pour tout mettre sur une linge
# # Applique un aspect visuel aux commandes renvoyees dans le shell
# $* Permer de retourner les argument utilise par les fonctions du script
# s@ Represente les arguments des fonctions ( ici valeur des variables )
# Les guillementspPreserve les espace dans les arguments
# La derniere ligne definit donc le format de renvoi des arguments utilises par la fonction

set -e
# set Active ou desactive les otpions du shell
# - Activation ( + desactivation )
# x Enonciation des commandes avant execution
# e Arret du script en cas de code erreur


#Sourcage du fichier des variables
source ./config/CONFIG_FILE.sh || { echo "Erreur : Impossible de sourcer CONFIG_FILE.sh."; exit 1; }
# source Execute au prealable les fonctions du fichier pour les rendre accessible a posteriorie
# Chemin relatif et pas absolue
# Double pie est un oOperateur logique Si lexecution reussi passer a la commande suivante sinon renvoyer le code erreur
# { ... ; ... } Groupage de commandes qui permet dexecuter plusieurs commandes pour une meme sortie booleenne
# exit 1 est un code de sortie qui indique une erreur ( en opposition à 0 )

#Sourcage des fichiers de fonctions
source ./fonctions/PERSONNALISATION.sh || { echo "Erreur : Impossible de sourcer PERSONNALISATION.sh "; exit 1; }
source ./fonctions/MAJ.sh || { echo "Erreur : Impossible de sourcer MAJ.sh"; exit 1; }
source ./fonctions/SSH_keys_registration.sh || { echo " Erreur : Impossible de sourcer SSH_keys_registration.sh "; exit 1; }
source ./fonctions/SSH_config_hardenning.sh || { echo " Erreur : Impossible de sourcer SSH_config_hardenning.sh "; exit 1; }
source ./fonctions/UFW_config_hardenning.sh || { echo " Erreur : Impossible de sourcer UFW_config_hardenning.sh "; exit 1; }
source ./fonctions/BONUS.sh || { echo " Erreur : Impossible de sourcer BOnUS.sh "; exit 1; }

#Definition de la fonction dexecution du script
main(){

echo "Demarrage du script..."

#Organisation de lexecution des fonctions presentent dans les fichiers sources
CONFIG_FILE || { echo " Erreur : echec de l'execution de CONFIG_FILE. "; exit 1; }
PERSONNALISATION || { echo " Erreur : echec de l'execution de PERSONNALISATION. "; exit 1; }
update_upgrade || { echo " Erreur : echec de l'execution de update_upgrade. "; exit 1; }
SSH_keys_registration || { echo " Erreur : echec de l'execution de SSH_keys_registration. "; exit 1; }
SSH_config_hardenning || { echo " Erreur : echec de l'execution de SSH_config_hardenning. "; exit 1; }
UFW_config_hardenning || { echo " Erreur : echec de l'execution de UFW_config_hardenning. "; exit 1; }
bonus || { echo " Erreur : echec de l'execution de bonus. "; exit 1; }

echo "Script termine."
}

#Si il est vraie que lutilisateur na pas les privileges root retourner une erreur
if [ "$(id -u)" -ne 0 ]; then
echo " Erreur : Vous n'avez pas les privileges necessaire ( Commande debian : su ) pour executer ce script. "
exit 1
fi
# if fi Boucle conditionnelle if
# [ ... ] La condition a tester
# $( ... ) Execute la commande interne au parenthese puis la remplace par le resultat de cette derniere
# id -u Retourne lidentifiant de lutilisateur
# -ne Different de
# 0 Droit root
# then Precede les commandes a executer si la condition est vraie

#Execution du script
main