Site perso d'un administrateur systèmes & réseaux

Catégorie : Maintenir l’infrastructure et contribuer à son évolution et à sa sécurisation Page 2 of 3

analytics, information, innovation

Créer et utiliser des clefs RSA

Explications

L’utilisation des clés RSA est une méthode courante pour sécuriser les communications sur Internet.

L’algorithme RSA, nommé d’après ses créateurs Rivest, Shamir et Adleman, est un système de cryptage asymétrique qui utilise une paire de clés, une publique et une privée, pour chiffrer et décrypter les données.

La création de clés RSA peut être réalisée à l’aide de l’outil open source OpenSSL, qui est inclus sur toutes les principales plates-formes et offre une interface de ligne de commande simple pour générer des clés.

La commande openssl genrsa -out private_key.pem 1024 permet de créer une paire de clés RSA, où « private_key.pem » est le nom du fichier de clé et « 1024 » est la taille de la clé en bits.

Une fois les clés créées, il est possible de visualiser le contenu du fichier de clé privée avec la commande cat private_key.pem.

Pour visualiser les clés RSA, on utilise la commande openssl rsa -in private_key.pem -text -noout.

Il est également possible de crypter un fichier de clés privées RSA avec la commande openssl rsa -in encrypted_private_key.pem -des3 -out encrypted_private_key.pem, où « -des3 » spécifie l’algorithme de cryptage symétrique à utiliser.

L’exportation d’une clé publique se fait avec la commande openssl rsa -in encrypted_private_key.pem -pubout -out public_key.pem, et la vérification de l’exportation peut être réalisée avec la commande openssl rsa -in public_key.pem -pubin.

La cryptographie asymétrique, en intégrant une deuxième clé dans le processus de cryptage/décryptage, offre un bon niveau de sécurité. La clé privée est conservée par chacun des interlocuteurs, tandis que la clé publique de chacun sert à décrypter les données reçues. Attention à bien respecter les étapes de cryptage et de partage des clés et de ne pas oublier la passphrase qui les protège.

Procédure d’utilisation détaillée

Création de la paire de clés RSA

Ouvrez votre terminal.

Entrez la commande suivante pour créer une paire de clés RSA :

openssl genrsa -out private_key.pem 1024

Cette commande générera une paire de clés RSA, où « private_key.pem » est le nom du fichier de clé privée et « 1024 » est la taille de la clé en bits.

Affichage du fichier de la clé privée RSA

Entrez la commande suivante pour visualiser le contenu du fichier de clé privée :

cat private_key.pem

Visualisation des clés RSA

Entrez la commande suivante pour visualiser les clés RSA :

openssl rsa -in private_key.pem -text -noout

Cryptage d’un fichier de clés privées RSA

Entrez la commande suivante pour crypter un fichier de clés privées RSA :

openssl rsa -in private_key.pem -des3 -out encrypted_private_key.pem

Vous serez invité à entrer une passphrase pour protéger l’accès à la clé.

Exportation d’une clé publique

Entrez la commande suivante pour exporter une clé publique :

openssl rsa -in encrypted_private_key.pem -pubout -out public_key.pem

Vous devrez entrer votre passphrase pour confirmer l’exportation de la clé.

Vérification de l’exportation de la clé publique

  • Entrez la commande suivante pour vérifier l’exportation de la clé publique :
openssl rsa -in public_key.pem -pubin

Ces étapes vous permettront de créer et de gérer des clés RSA avec OpenSSL. Assurez-vous de suivre chaque étape attentivement et de ne pas oublier votre passphrase.

Installer Syslog sur Debian 12

Pour installer Syslog sur Debian 12, suivez ces étapes :

  1. Ouvrez le terminal et passez en mode « root » avec la commande « su » et entrez votre mot de passe root.
  2. Installez les services LAMP et PHP avec la commande :
apt-get install apache2 mariadb-server php php-mysql php-gd
  1. Installez Mysql pour Rsyslog avec la commande :
apt-get install rsyslog-mysql -y
  1. Pendant l’installation de Rsyslog-Mysql, laissez la configuration automatique et validez « Oui » pour créer une base de données Syslog.
  2. Entrez un mot de passe pour l’utilisateur Rsyslog et retenez-le pour plus tard.
  3. Accédez au fichier Rsyslog.conf avec la commande :
nano /etc/rsyslog.conf
  1. Décommentez « IMTPC » et le port 514 en supprimant le signe « # » au début des lignes correspondantes.
  2. Ajoutez la ligne suivante à la fin du fichier Rsyslog.conf pour renvoyer automatiquement les logs dans la base de données :
*.* :ommysql:localhost,Syslog,rsyslog,motdepasseRsyslog

Remplacez « motdepasseRsyslog » par le mot de passe que vous avez choisi à l’étape 5.

  1. Enregistrez et quittez le fichier avec « ctrl+x » et « O » pour « oui ».
  2. Redémarrez le service Rsyslog avec la commande :
sudo service rsyslog restart

Résoudre les problèmes de LogAnalyzer 1.13 et php 8.2

Environnement

Système d’exploitation : Debian 12

Version de php : 8.2

Version de Log Analyzer : 4.1.13

Problème détecté

Après l’installation de Log Analyzer, on peut rencontrer quelques soucis. Le premier et le plus courant étant celui-ci :

« Could not find the configured table, maybe misspelled or the tablenames are case sensitive« 

Pistes de résolutions (testées et approuvées) :

1. Vérifier la casse de l’info sur la table « SystemEvents » dans le fichier de configuration de LogAnalyzer

sudo nano /var/www/html/loganalyzer/config.php

Chercher la ligne contenant le terme « SystemEvents » (à la fin du fichier) et s’assurer que la casse est respectée :

2. Se connecter à l’admin center dans l’interface web,

Aller dans « sources », cliquer sur « modifier » puis vérifier que la casse est également respectée ici :

A ce stade, il se peut que l’interface fonctionne de nouveau dans son ensemble, sauf pour la page d’index de LogAnalyzer qui peut afficher une page blanche.

Dans ce cas, le bon réflexe est le suivant : activer les rapports d’erreur dans php.ini :

sudo nano /etc/php/8.2/apache2/php.ini

Cherche la ligne « display_errors » et la passer à « On »

Puis relancer apache2

systemctl restart apache2

En rechargeant la page d’accueil de Log Analyzer, le message suivant apparaît : « Fatal error: Uncaught mysqli_sql_exception: Unknown column ‘processid’ in ‘field list’« 

Pour résoudre ce problème, rdv dans Mysql pour ajouter manuellement les colonnes manquantes :

mysql -u root -p
USE Syslog;
ALTER TABLE SystemEvents
ADD COLUMN checksum INT NOT NULL;
ALTER TABLE SystemEvents
ADD COLUMN processid VARCHAR(60) NOT NULL;
exit

Après ça, en rafraichissant la page d’accueil, tout apparait comme il faut :

Sources qui m’ont aidé à résoudre ce souci :

https://github.com/rsyslog/loganalyzer/issues/75

Monitorer un ordinateur sous Windows via Centreon

Voici les étapes synthétisées pour superviser un serveur Windows en SNMP avec Centreon :

Prérequis

  • Plateforme Centreon installée et fonctionnelle.

Étape 1 : Installer et configurer SNMP sur le serveur Windows

Installer SNMP en mode graphique ou via PowerShell.

Mode graphique :

Paramètres > Applications et fonctionnalités > Fonctionnalités facultatives > Ajouter une fonctionnalité > SNMP > Installer

PowerShell :

Install-WindowsFeature RSAT-SNMP

Configurer SNMP :

Ouvrir le panneau Services :

services.msc

Configurer le service SNMP :

Onglet Agent : renseigner les paramètres Contact et Emplacement.

Onglet Service : cocher les cases des services à surveiller.

Onglet Sécurité : renseigner la communauté SNMP en lecture seule et ajouter l’adresse IP du serveur Centreon.

Ensuite, clic droit -> Redémarrer le service SNMP.

Étape 2 : Installer le plugin Windows SNMP sur le serveur Centreon (collecteur)

dnf install centreon-plugin-Operatingsystems-Windows-Snmp

Étape 3 : Installer le connecteur de supervision Windows SNMP sur le serveur central

Dans l’interface Web, aller à Configuration > Gestionnaire de connecteurs de supervision et installer le connecteur de supervision Windows SNMP.

Étape 4 : Configurer l’hôte et déployer la configuration

  1. Aller à Configuration > Hôtes > Hôtes et cliquer sur Ajouter.
  2. Remplir les informations :
    • Nom du serveur : Windows10
    • Description du serveur.
    • Adresse IP du serveur.
    • Communauté SNMP et sa version.
    • Collecteur qui supervisera le serveur Windows.
  3. Ajouter le modèle OS-Windows-SNMP-custom.
  4. Aller à Configuration > Services > Services par hôte pour voir les indicateurs déployés automatiquement.
  5. Déployer la configuration.
  6. Aller à Monitoring > Status des Ressources et vérifier les résultats de la supervision.

Pour aller plus loin

  • Utiliser la fonctionnalité de découverte des services pour ajouter rapidement la supervision des cartes réseau, partitions, processus et services.
  • Aller à Configuration > Services > Manuelle, saisir le nom de l’hôte, sélectionner la commande de découverie, cliquer sur Scan, sélectionner les éléments à intégrer à la supervision et cliquer sur Save.
  • Déployer la configuration

Étape 5 : Déployer la configuration

  1. Aller à Configuration > Collecteurs > Collecteurs.
  2. Sélectionner le serveur central, le serveur distant ou le collecteur dont la configuration a changé.
  3. Cliquer sur Exporter la configuration.
  4. Cocher les cases suivantes :
    • Générer les fichiers de configuration.
    • Lancer le débogage du moteur de supervision (-v).
    • Déplacer les fichiers générés.
    • Redémarrer l’ordonnanceur. Utiliser la méthode :
      • Recharger : lorsque vous avez créé, supprimé ou modifié des objets supervisés.
      • Redémarrer : lorsque vous avez apporté des changements à la communication entre un collecteur et le serveur central, ou à la configuration du moteur de collecte. Un redémarrage prend plus de temps qu’un rechargement.
  5. Cliquer sur Exporter. Un log de l’export s’affiche.
  6. Dans le log, vérifier que l’export a bien fonctionné et qu’aucune erreur n’a été remontée.

Après avoir déployé la configuration, vous pouvez aller à Monitoring > Status des Ressources pour vérifier les résultats de la supervision.

Installation et paramétrage d’un serveur Nagios / Centreon

Voici les étapes synthétisées pour installer Centreon à partir d’une machine virtuelle :

Prérequis

  • Processeur : Intel ou AMD récent avec au moins 2vCPU.
  • Mémoire : Minimum 1 Go de RAM, idéalement 2 Go.
  • Espace disque : Minimum 6,5 Go, recommandé 10 Go.

Étape 1 : Télécharger la machine virtuelle

  1. Assurez-vous que votre solution de virtualisation (VirtualBox ou VMWare) est installée et à jour.
  2. Rendez-vous sur la page de téléchargement de Centreon.
  3. Sélectionnez la version de Centreon désirée.
  4. Cliquez sur « Download » à côté de la machine virtuelle désirée.
  5. Si vous le souhaitez, entrez vos informations de contact, puis cliquez sur « Download ». Sinon, cliquez sur « Direct download ».
  6. Extrayez le contenu de l’archive compressée dans le répertoire désiré.

Étape 2 : Installer la machine virtuelle

  1. Importez le fichier centreon-central.ova dans VMWare ou Oracle VirtualBox.
  2. Attendez que le serveur démarre et affiche le message indiquant qu’il est prêt.
  3. Dans la configuration de votre machine virtuelle, ajoutez un adaptateur réseau et sélectionnez le réseau via lequel la machine pourra communiquer avec les ressources à superviser.

Étape 3 : Terminer la configuration

Connectez-vous au serveur Centreon avec les identifiants :

login: root

password: centreon

Tapez la commande suivante pour connaître l’adresse IP de votre serveur :

ip addr 

(optionnel – mais recommandé) Connectez-vous en root au serveur depuis une autre machine avec le terminal de votre choix, à l’aide de l’adresse IP obtenue précédemment.

ssh root@adresse_ip 

Suivez les instructions affichées pour terminer la configuration :

  • Définissez le fuseau horaire du serveur Centreon
timedatectl set-timezone votre_timezone 

Définissez le fuseau horaire du serveur php en ouvrant le fichier suivant :

nano /etc/php.d/50-centreon.ini 

Après date.timezone, entrez le fuseau horaire désiré, puis redémarrez le serveur php :

systemctl restart php-fpm 

Changez le hostname de votre serveur (facultatif) :

hostnamectl set-hostname votre-hostname 

Ajoutez une partition pour la table MariaDB :

su - centreon 
/bin/php /usr/share/centreon/cron/centreon-partitioning.php
exit 
systemctl restart cbd centengine gorgoned

Connexion à l’interface web

Connectez-vous à l’interface web de Centreon en utilisant les identifiants par défaut :

Login: admin

Password: Centreon!123

Mettez à jour votre plateforme Centreon et sécurisez votre serveur en changeant les mots de passe des comptes root et admin, et en définissant un mot de passe pour la base MariaDB.

Vous pouvez maintenant superviser votre premier hôte !

Un bucket mais pas d'Amazon S3 !

Script Shell de sauvegarde d’un répertoire vers Amazon S3

Pour avoir connu le tragique incendie d’OVH en 2021, je sais ce que ça fait de perdre tout son boulot quand on n’a pas mis en place de backup vers un serveur tiers.

Bon pour le coup, les dégâts étaient limités car je n’avais pas pris ces précautions pour mon travail personnel (recherches / wiki etc.) mais en revanche je les avais bien prises pour les sites de mes clients. Aucune répercussion sérieuse sur l’activité…

N’empêche que si j’avais mis en place un backup automatisé de mes scripts & lab de test, j’aurais pu ne pas perdre toute l’infra que j’avais monté sur Proxmox :-°

Du coup je vous propose un petit script shell de backup qui compressera votre dossier et l’enverra vers votre bucket Amazon S3

#!/bin/bash

# Utilisation de set -e pour quitter en cas d'erreur
set -e

# Utilisation de set -u pour quitter si des variables non définies sont utilisées
set -u

# Définition des constantes
readonly SCRIPT_NAME=$(basename "$0")
readonly BUCKET_NAME="mon-bucket-s3"

# Fonction pour afficher l'aide
usage() {
    echo "Usage: $SCRIPT_NAME [-h] [-d directory]"
    echo "  -h                Afficher l'aide"
    echo "  -d directory      Spécifier le répertoire à sauvegarder"
    exit 1
}

# Vérification des dépendances
command -v aws >/dev/null 2>&1 || { echo "aws-cli est requis mais n'est pas installé. Abandon."; exit 1; }

# Traitement des options
while getopts "hd:" opt; do
    case $opt in
        h)
            usage
            ;;
        d)
            directory=$OPTARG
            ;;
        *)
            echo "Option invalide: -$OPTARG" >&2
            usage
            ;;
    esac
done

# Vérification si le répertoire est spécifié
if [[ -z "${directory:-}" ]]; then
    echo "Erreur : Répertoire non spécifié."
    usage
fi

# Vérification si le répertoire existe
if [[ ! -d "$directory" ]]; then
    echo "Erreur : Le répertoire spécifié n'existe pas."
    exit 1
fi

# Création d'un nom de fichier de sauvegarde unique basé sur la date et l'heure
backup_filename=$(date +"%Y%m%d%H%M%S").tar.gz

# Fonction pour effectuer la sauvegarde
backup_directory() {
    # Archivage et compression du répertoire
    tar -czf "$backup_filename" "$directory"
    
    # Transfert du fichier de sauvegarde vers Amazon S3
    aws s3 cp "$backup_filename" "s3://$BUCKET_NAME/"
    
    # Suppression du fichier de sauvegarde local
    rm -f "$backup_filename"
}

# Appel de la fonction de sauvegarde
backup_directory

# Message de succès
echo "Sauvegarde de $directory effectuée avec succès dans s3://$BUCKET_NAME/"

Utilisation

Rendez le script exécutable avec la commande suivante :

chmod +x backup_script.sh

Exécutez le script avec l’option -d pour spécifier le répertoire à sauvegarder.

Exemple : sauvegarder le répertoire « test » présent dans /tmp :

./backup_script.sh -d /tmp/test

Dans cette commande, -d est l’option que le script utilise pour accepter le chemin du répertoire à sauvegarder, et /tmp/tutos est la valeur que vous donnez à cette option. Le script archive ensuite le répertoire spécifié et le télécharge dans votre bucket Amazon S3.

Notez que le script doit avoir les permissions nécessaires pour lire le contenu du répertoire /tmp/tutos et écrire dans le répertoire où il est exécuté, car il crée temporairement un fichier d’archive avant de le télécharger sur Amazon S3.

Pour automatiser l’envoi du fichier avec une tâche cron, vous devrez suivre les étapes ci-dessous :

  1. Ouvrez le fichier crontab : Ouvrez le fichier crontab pour éditer les tâches programmées en utilisant la commande suivante :
crontab -e
  1. Ajoutez une entrée pour votre script : À la fin du fichier, ajoutez une nouvelle ligne pour votre script. Par exemple, pour exécuter votre script tous les jours à 2 heures du matin, vous pouvez ajouter la ligne suivante :
0 2 * * * /chemin/vers/votre/backup_script.sh -d /tmp/tutos

Remplacez /chemin/vers/votre/backup_script.sh par le chemin complet vers votre script.

La syntaxe de cette ligne est la suivante :

  • 0 2 * * * : spécifie l’horaire. Dans ce cas, il est configuré pour exécuter la tâche à 2 heures du matin tous les jours.
  • /chemin/vers/votre/backup_script.sh -d /tmp/tutos : est la commande à exécuter.
  1. Sauvegardez et quittez l’éditeur : Sauvegardez le fichier et quittez l’éditeur (la façon de faire dépendra de l’éditeur que vous utilisez, par exemple en appuyant sur CTRL + X puis Y et enfin Enter si vous utilisez nano).
  2. Vérifiez votre crontab : Vous pouvez vérifier que votre nouvelle tâche est correctement enregistrée en listant toutes vos tâches cron avec la commande suivante :
crontab -l

Informations complémentaires

  • Les options -h (pour afficher l’aide) et -d (pour spécifier le répertoire à sauvegarder) sont traitées à l’aide de getopts.
  • Les vérifications sont effectuées pour s’assurer que le CLI AWS est installé et que le répertoire spécifié existe.
  • Une fonction backup_directory est définie pour archiver et compresser le répertoire, puis pour transférer le fichier de sauvegarde vers Amazon S3.
  • Le script utilise set -e et set -u pour gérer les erreurs de manière appropriée.
  • Les variables et les fonctions sont nommées de manière descriptive.
  • La constante BUCKET_NAME est définie en utilisant readonly pour stocker le nom du bucket S3.
Un coquillage

Bonnes pratiques à appliquer pour écrire des scripts Shell

Modularisation avec des Fonctions :

Pour des scripts plus lisibles et maintenables, utilisez des fonctions pour segmenter votre code.

Exemple :

greeting() { echo "Bonjour, $1" } greeting "Alice"

Documenter Votre Code :

  • Documentez vos fonctions en expliquant leur but et les arguments nécessaires.
  • Exemple :
# Cette fonction affiche un message de bienvenue # $1 - Le nom de la personne greeting() { echo "Bonjour, $1" }

Utilisation de Shift :

  • Utilisez shift pour gérer les arguments de manière plus flexible.
  • Exemple :
process_file() { 
local input_file="$1"; shift 
local output_file="$1"; shift 
}

Déclaration des Variables :

Déclarez les variables en précisant leur type si nécessaire.

Exemple : declare -i count=0 pour un entier.

Cotation des Variables :

Citez vos variables pour éviter des problèmes avec des espaces ou des caractères spéciaux.

Exemple :

echo "$variable"

Usage des Tableaux :

  • Utilisez des tableaux pour stocker des collections d’éléments.
  • Exemple : arr=(item1 item2 item3)

Utilisation de $@ :

  • Préférez $@ à $* pour obtenir les arguments comme une liste séparée.
  • Exemple :
for arg in "$@"; do echo "$arg" done

Nom des Variables :

  • Utilisez des majuscules uniquement pour les variables d’environnement, et des minuscules pour les autres.

Préférence pour les Opérations Intégrées :

  • Utilisez les fonctionnalités intégrées du shell au lieu d’invoquer des programmes externes.
  • Exemple : Utilisez ${string//substring/replacement} au lieu de sed.

Optimisation des Pipes :

  • Réduisez l’usage des pipes en évitant des commandes inutiles.
  • Exemple : Utilisez awk '/pattern/{print $1}' file au lieu de grep pattern file | awk '{print $1}'.

Globbing et Valeurs Nulles :

  • Utilisez le globbing pour générer des listes de fichiers, et utilisez -print0 avec find pour gérer des noms de fichiers complexes.
  • Exemple :
find . -type f -print0 | xargs -0 rm -f

Substitution de Commandes :

  • Préférez $(command) à `command` pour une meilleure lisibilité.
  • Exemple : echo "Nous sommes le $(date)"

Substitution de Processus et Fichiers Temporaires :

  • Utilisez la substitution de processus < (command) pour éviter les fichiers temporaires.
  • Exemple :
diff <(command1) <(command2)

Usage de [[ et (( pour les Conditions :

  • Utilisez [[ ... ]] pour les tests et (( ... )) pour les comparaisons arithmétiques.
  • Exemple :
if (( number > 10 )); then echo "Le nombre est supérieur à 10." fi

Vérification des Commandes :

  • Utilisez la commande directement dans la condition de l’instruction if.
  • Exemple :bash
if grep -q "pattern" file; then echo "Pattern trouvé." fi

Utilisation de set -e :

  • Placez set -e en haut de votre script pour quitter dès qu’une instruction échoue.
  • Exemple :
set -e command1 command2 # Le script s'arrête ici si command1 échoue

Vérification des Dépendances : Assurez-vous que toutes les commandes externes nécessaires sont disponibles avant de procéder.

command -v awk >/dev/null 2>&1 || { echo "awk est requis mais n'est pas installé. Abandon."; exit 1; }

Utilisation de trap pour le Nettoyage : Utilisez la commande trap pour nettoyer les ressources avant de quitter.

trap 'rm -f "$tempfile"' EXIT tempfile=$(mktemp)

Utilisation de getopts pour Gérer les Options : Utilisez getopts pour gérer les options et les arguments de votre script de manière standard.

while getopts "hvf:" opt; do case $opt in h) echo "Usage: $0 [-h] [-v] [-f file]"; exit ;; v) verbose=true ;; f) file=$OPTARG ;; *) echo "Option invalide: -$OPTARG" >&2; exit 1 ;; esac done

Utilisation de readonly et declare -r pour les Constantes : Déclarez les constantes avec readonly ou declare -r.

readonly PI=3.14159

Vérification des Codes de Retour : Vérifiez les codes de retour des commandes importantes.

command || { echo "command a échoué"; exit 1; }

Indentation et Style Consistant : Adoptez un style d’indentation consistant pour améliorer la lisibilité.

Utilisation de Fonctions pour les Blocs Logiques : Encapsulez des blocs logiques dans des fonctions pour améliorer la modularité et la lisibilité.

Évitez l’Usage de eval : La commande eval peut être dangereuse. Évitez son utilisation ou assurez-vous de bien comprendre ses implications.

Utilisation de set -u : Utilisez set -u pour quitter le script si des variables non définies sont utilisées.

set -u echo "$undefined_variable" # Ceci déclenchera une erreur

Utilisation de Commentaires Informatifs : Commentez votre code de manière informative sans être redondant.

Nommage des Variables et des Fonctions : Utilisez des noms descriptifs pour vos variables et fonctions pour améliorer la compréhension du code.

Utilisation de set -o pipefail : Utilisez set -o pipefail pour attraper les erreurs dans les pipelines.

set -o pipefail command1 | command2 | command3

Vérification des Performances : Si le script est destiné à traiter de grands ensembles de données, prenez en compte les performances. Utilisez des outils comme time pour mesurer le temps d’exécution.

Ces bonnes pratiques rendront vos scripts shell plus robustes, lisibles, et faciles à maintenir !

Web Shell et sécurité

Les menaces Web Shell sont en ascension, utilisées par des cybercriminels pour infiltrer des serveurs en exploitant des failles dans les applications web ou les configurations réseau.

Un Web Shell est un script malveillant déposé sur un serveur web permettant un contrôle à distance. Il peut être écrit dans divers langages comme PHP, ASP, Python, ou Unix.

Un accès réussi offre à l’attaquant la possibilité de télécharger, supprimer, charger ou exécuter des fichiers sur le serveur, d’où l’importance de la gestion sécurisée des fichiers et répertoires sous Bash.

Quelques mesures de sécurité à prendre en considération :

  1. Mises à Jour Constantes :
    • Assurer la mise à jour régulière ou automatique du système et des applications pour éliminer les vulnérabilités connues.
    • Exemple : Utiliser des systèmes de gestion de paquets comme apt pour Ubuntu ou yum pour CentOS pour automatiser les mises à jour.
  2. Principe de Moindre Privilège :
    • Appliquer des droits d’accès restrictifs sur le serveur web, surtout dans le répertoire racine, réduisant ainsi les chances d’une escalade de privilèges par un attaquant.
    • Exemple : N’autoriser que l’utilisateur root ou l’administrateur à créer ou modifier des fichiers dans des répertoires sensibles.
  3. Zone Démilitarisée (DMZ) :
    • Configurer une DMZ entre le serveur web et le réseau interne pour limiter les interactions et avoir un suivi du trafic pouvant révéler des activités suspectes.
    • Exemple : Utilisation de pare-feux et de routeurs pour isoler le serveur web du reste du réseau.
  4. Configuration Sécurisée du Serveur Web :
    • Désactiver les services inutiles, bloquer les ports non utilisés, empêcher l’accès au panneau de gestion depuis l’extérieur, et utiliser des identifiants robustes.
    • Exemple : Utilisation de scanners de vulnérabilité comme Nessus pour identifier et rectifier les configurations faibles.
  5. Validation Stricte des Entrées :
    • Valider toutes les entrées utilisateur pour éviter les injections de code malveillant.
    • Exemple : Utilisation de fonctions de validation ou d’outils comme OWASP ZAP pour tester les entrées.
  6. Analyses de Vulnérabilité :
    • Effectuer des scans réguliers pour détecter des failles potentielles.
    • Exemple : Utilisation de scanners comme OpenVAS pour identifier des vulnérabilités dans le système et les applications.
  7. Utilisation de Pare-feu d’Application Web ou Proxy Inverse :
    • Déployer des solutions de sécurité additionnelles pour améliorer la protection contre les attaques.
    • Exemple : Utilisation de mod_security comme pare-feu d’application web.

Exemples de Risques et Solutions :

  1. Injection de Code :
    • Risque : Un utilisateur mal intentionné peut injecter des commandes dangereuses si les entrées ne sont pas correctement validées.
    • Solution : Utiliser des fonctions d’échappement de caractères et de validation des entrées.
  2. Scripts Shell en CGI :
    • Risque : Les scripts Shell utilisés pour les CGI peuvent être exploités si l’entrée utilisateur n’est pas correctement gérée.
    • Solution : Préférer l’utilisation de langages plus sécurisés comme PHP ou Python, ou des moteurs de recherche tiers sécurisés comme le moteur de recherche personnalisé Google.
  3. Stockage de Mots de Passe dans les Scripts :
    • Risque : Un mot de passe codé en dur dans un script peut être découvert par un attaquant.
    • Solution : Utiliser des mécanismes sécurisés de stockage des mots de passe, comme les coffres-forts de mots de passe.

Conseil Final : La sécurité doit être une priorité dès le début du développement, en adoptant des pratiques codage sécurisé et en étant conscient des risques associés à certaines actions, comme le stockage de mots de passe en clair ou l’exécution de code basée sur des entrées utilisateur non validées.

Création d’un script de sauvegarde avec Bash

Imaginez que nous voulions sauvegarder le contenu d’un répertoire documents dans un autre répertoire backup.

Voici le contenu de sauvegarde.sh

#!/bin/bash

# Ce script est conçu pour sauvegarder le contenu du répertoire 'documents' dans le répertoire 'backup'

SOURCE_DIRECTORY="/chemin/absolu/vers/documents"
BACKUP_DIRECTORY="/chemin/absolu/vers/backup"

# Vérifier que le répertoire source existe
if [ ! -d "$SOURCE_DIRECTORY" ]; then
    echo "Erreur : Le répertoire source $SOURCE_DIRECTORY n'existe pas."
    exit 1
fi

# Si le répertoire de sauvegarde n'existe pas, le créer
if [ ! -d "$BACKUP_DIRECTORY" ]; then
    mkdir "$BACKUP_DIRECTORY"
fi

# Copier les fichiers
cp -R "$SOURCE_DIRECTORY"/* "$BACKUP_DIRECTORY"

# Vérifier si la copie a réussi
if [ $? -eq 0 ]; then
    echo "Sauvegarde effectuée avec succès."
else
    echo "Erreur lors de la sauvegarde."
    exit 1
fi

Utilisation :

  1. Assurez-vous que les chemins pour SOURCE_DIRECTORY et BACKUP_DIRECTORY sont correctement définis.
  2. Rendez le script exécutable avec la commande chmod +x sauvegarde.sh.
  3. Exécutez le script avec ./sauvegarde.sh.

Automatisation avec Cron :

Si vous voulez exécuter ce script automatiquement tous les jours à 23h00 :

  1. Ouvrez votre crontab avec crontab -e.
  2. Ajoutez la ligne suivante :

00 23 * * * /chemin/absolu/vers/sauvegarde.sh

Avec cela, votre script de sauvegarde s’exécutera automatiquement chaque jour à 23h00. Assurez-vous de remplacer /chemin/absolu/vers/sauvegarde.sh par le chemin réel vers votre script.

Commandes usuelles du Shell Bash

Structure et Composants d’une Commande Bash

1. Le nom de la commande : L’essence de toute instruction à l’ordinateur réside dans le nom de la commande. Dans le monde de Bash, chaque nom de commande est associé à une action précise. Lorsque Bash reconnaît une commande, il s’efforce de l’exécuter. Si la commande est inconnue ou incorrecte, Bash répondra par un message d’erreur. Au-delà des commandes simples, Bash permet également de définir des fonctions. Ces fonctions peuvent regrouper plusieurs commandes, facilitant ainsi leur exécution en une seule invocation de la fonction.

2. Les arguments de la commande : Les arguments donnent du contexte à nos commandes. En ajoutant des arguments, on peut par exemple préciser un nom de fichier ou un emplacement. Prenons l’exemple d’une commande destinée à copier un fichier : elle nécessitera au moins deux arguments – le nom du fichier source et la destination du fichier. Les arguments fournissent les détails nécessaires pour permettre à la commande de fonctionner comme prévu. Lorsqu’il y a plusieurs arguments, ils sont généralement séparés par des espaces.

3. Les options de la commande : Ajoutées à une commande pour modifier ou préciser son comportement, les options sont généralement introduites par un tiret simple -, suivi du nom complet de l’option ou de son abréviation. Selon la commande, diverses options peuvent être disponibles, offrant une flexibilité accrue à l’utilisateur.

Liste des commandes usuelles

su : Pour se connecter en tant qu’utilisateur root.

Exemple :

su

Note : Sur certains systèmes, sudo -i est utilisé pour obtenir un shell root.

cd : Change de répertoire.

  • Exemple :
cd /usr/bin/

Option courante : cd - pour retourner au précédent répertoire.

ls : Affiche le contenu du répertoire.

  • Exemple :
ls /home/

Options courantes :

ls -l pour un affichage détaillé.

ls -a pour afficher tous les fichiers, y compris les cachés.

touch : Crée un fichier.

  • Exemple :
touch nouveau_fichier.txt

rm : Supprime des fichiers ou des répertoires.

  • Exemple :
rm fichier_a_supprimer.txt

Options courantes :

rm -r pour supprimer un répertoire et son contenu.

rm -f pour forcer la suppression sans demande de confirmation.

mkdir : Crée un répertoire.

  • Exemple :
mkdir nouveau_repertoire

Option courante :

mkdir -p pour créer des répertoires parents si nécessaires.

more : Affiche le contenu d’un fichier.

  • Exemple :
more fichier.txt

grep : Recherche une chaîne dans un fichier.

  • Exemple :
grep "erreur" journal.log

Options courantes :

grep -i pour une recherche insensible à la casse.

grep -r pour une recherche récursive dans les répertoires.

ps : Affiche les processus en cours.

  • Exemple :
ps aux

Options courantes :

ps -e pour afficher tous les processus du système.

ps -u utilisateur pour afficher les processus d’un utilisateur spécifique.

kill : Envoie un signal à un processus, généralement pour l’arrêter.

  • Exemple :
kill 12345 (où 12345 est l'ID du processus)

Options courantes :

  • kill -9 pour forcer l’arrêt d’un processus.
  • killall nom_du_processus pour tuer tous les processus portant ce nom

Page 2 of 3