Ce guide détaille plusieurs étapes essentielles pour renforcer la sécurité de votre serveur Linux. Chaque section couvre un aspect spécifique, de la gestion des utilisateurs à la configuration des services.
- Vérification des utilisateurs avec UID 0
Il est crucial de s'assurer que seul l'utilisateur root possède un identifiant utilisateur (UID) de 0. La présence d'autres utilisateurs avec cet UID représente une faille de sécurité majeure.
Étapes de vérification :
# Afficher les utilisateurs avec UID 0
awk -F: '($3 == 0) { print $1 }' /etc/passwd
Critères de conformité :
Le système est conforme si seul l'utilisateur root apparaît dans les résultats. Toute autre entrée indique une non-conformité.
Solution de renforcement :
Sauvegardez les fichiers critiques avant toute modification.
cp -p /etc/passwd /etc/passwd.bak
cp -p /etc/shadow /etc/shadow.bak
cp -p /etc/group /etc/group.bak
Supprimez les comptes non autorisés avec UID 0, après vérification qu'ils ne sont pas utilisés par des applications critiques.
userdel nom_utilisateur
- Vérification de l'attribution des comptes par utilisateur
Cette étape vise à s'assurer que les plages d'UID définies dans /etc/login.defs sont correctement utilisées pour l'attribution des comptes utilisateurs.
Étapes de vérification :
Récupérez les valeurs de UID_MIN et UID_MAX dans /etc/login.defs, puis vérifiez si des utilisateurs existent dans cette plage.
UID_MIN=$(grep -v '^#' /etc/login.defs | grep "^UID_MIN" | awk '($1="UID_MIN"){print $2}')
UID_MAX=$(grep -v '^#' /etc/login.defs | grep "^UID_MAX" | awk '($1="UID_MAX"){print $2}')
echo "Utilisateurs dans la plage définie :"
awk -F: -v min="$UID_MIN" -v max="$UID_MAX" '{if ($3 >= min && $3 <= max) print $1 ":" $3}' /etc/passwd
Critères de conformité :
Le système est conforme si des utilisateurs sont présents dans la plage d'UID définie. L'absence d'utilisateurs dans cette plage peut indiquer une mauvaise configuration.
Solution de renforcement :
Créez de nouveaux comptes utilisateurs selon les besoins.
useradd nouveau_utilisateur
passwd nouveau_utilisateur
- Vérification des comptes sans mot de passe
Les comptes sans mot de passe constituent une vulnérabilité critique, permettant un accès non autorisé.
Étapes de vérification :
Exécutez la commande suivante pour rechercher les comptes dont le champ du mot de passe dans /etc/shadow est vide.
awk -F : '($2 == "") { print $1 }' /etc/shadow
Critères de conformité :
Le système est conforme si la commande ne retourne aucun résultat. Si des noms d'utilisateur sont affichés, le système n'est pas conforme.
Solution de renforcement :
Sauvegardez les fichiers de configuration des mots de passe.
cp -p /etc/shadow /etc/shadow.bak
cp -p /etc/passwd /etc/passwd.bak
cp -p /etc/group /etc/group.bak
Définissez un mot de passe pour les utilisateurs concernés.
passwd nom_utilisateur
- Configuration des politiques de mots de passe
Il est essentiel de définir des règles robustes pour les mots de passe afin de garantir leur complexité et leur sécurité.
Paramètres clés dans /etc/login.defs :
PASS_MAX_DAYS: Durée maximale de validité d'un mot de passe (ex: 90 jours).PASS_MIN_DAYS: Durée minimale avant qu'un mot de passe puisse être changé (ex: 0 jour).PASS_MIN_LEN: Longueur minimale d'un mot de passe (ex: 8 caractères).PASS_WARN_AGE: Délai d'avertissement avant l'expiration du mot de passe (ex: 7 jours).
Critères de conformité :
Les paramètres définis dans /etc/login.defs doivent correspondre aux politiques de sécurité établies.
Solution de renforcement :
Sauvegardez le fichier de configuration.
cp -p /etc/login.defs /etc/login.defs.bak
Modifiez les paramètres selon les besoins.
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_MIN_LEN 8
PASS_WARN_AGE 7
- Renforcement de la complexité des mots de passe
Pour améliorer la robustesse des mots de passe, configurez les règles de complexité via PAM.
Configuration dans /etc/pam.d/system-auth :
Utilisez le module pam_pwquality.so (ou pam_cracklib.so selon la distribution) pour définir les critères suivants :
difok: Nombre minimum de caractères différents de l'ancien mot de passe.minlen: Longueur minimale du nouveau mot de passe.ucredit: Nombre minimum de lettres majuscules (ex: -1 pour au moins une).lcredit: Nombre minimum de lettres minuscules.dcredit: Nombre minimum de chiffres.ocredit: Nombre minimum de caractères spéciaux.
Critères de conformité :
Le nouveau mot de passe doit être différent de l'ancien, avoir une longueur minimale (ex: 8 caractères), et inclure une combinaison de majuscules, minuscules, chiffres et symboles.
Solution de renforcement :
Sauvegardez le fichier de configuration PAM.
cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
Modifiez la ligne relative à l'authentification des mots de passe. Si elle utilise pam_cracklib.so, remplacez-la ou modifiez-la pour utiliser pam_pwquality.so avec les paramètres désirés.
# Exemple avec pam_pwquality.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
Note : La configuration peut varier légèrement entre distributions. La directive use_authtok peut également être pertinente.
- Limitation des tentatives de connexion
Il est recommandé de limiter le nombre de tentatives de connexion infructueuses pour prévenir les attaques par force brute.
Configuration dans /etc/pam.d/sshd :
Ajoutez les lignes suivantes pour configurer le verrouillage des comptes après plusieurs échecs.
Critères de conformité :
Les utilisateurs ordinaires sont verrouillés après 3 tentatives erronées pendant 150 secondes. L'utilisateur root est verrouillé après 3 tentatives erronées pendant 300 secondes.
Solution de renforcement :
Sauvegardez le fichier de configuration.
cp -p /etc/pam.d/sshd /etc/pam.d/sshd.bak
Ajoutez les directives suivantes au fichier /etc/pam.d/sshd :
auth required pam_tally2.so deny=3 unlock_time=150
even_deny_root root_unlock_time=300
- Suppression des comptes non essentiels
Éliminez tous les comptes qui ne sont pas nécessaires au fonctionnement du système ou aux tâches de maintenance.
Étapes de vérification :
Identifiez les comptes actifs (ceux dont le champ du mot de passe n'est pas vide ou verouillé).
awk -F: '($2 != "" && $2 != "!") {print $1}' /etc/shadow
Solution de renforcement :
Pour supprimer un compte et son répertoire personnel :
userdel -r nom_utilisateur
Pour verrouiller un compte (empêche la connexion mais conserve les données) :
passwd -l nom_utilisateur
Pour déverrouiller un compte (nécessite la définition d'un nouveau mot de passe si l'ancien a été effacé) :
passwd -u nom_utilisateur
Pour changer le shell d'un utilisateur afin d'empêcher la connexion interactive :
usermod -s /bin/false nom_utilisateur
- Interdiction de la connexion directe de l'utilisateur root via SSH
Il est fortement recommandé d'interdire la connexion directe de root via SSH pour des raisons de sécurité.
Étapes de vérification :
Modifiez le fichier de configuration SSH.
Critères de conformité :
L'option PermitRootLogin dans /etc/ssh/sshd_config doit être définie sur no.
Solution de renforcement :
Sauvegardez le fichier de configuration.
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Modifiez le fichier /etc/ssh/sshd_config et changez ou ajoutez la ligne suivante :
PermitRootLogin no
Redémarrez le service SSH pour appliquer les changements.
systemctl restart sshd
- Configuration de l'historique des commandes et du temps d'inactivité
Gérez la taille de l'historique des commandes et le délai d'inactivité avant déconnexion automatique.
Configuration dans /etc/profile :
HISTSIZE: Nombre de commandes à conserver dans l'historique de la session courante.TMOUT: Temps d'inactivité (en secondes) avant déconnexion automatique.
Critères de conformité :
Les valeurs de HISTSIZE et TMOUT doivent être définies à des niveaux raisonnables et faibles pour minimiser les risques.
Solution de renforcement :
Sauvegardez le fichier /etc/profile.
cp -p /etc/profile /etc/profile.bak
Modifiez le fichier /etc/profile et ajoutez ou modifiez les lignes suivantes :
HISTSIZE=100
TMOUT=600
Pour que les changements prennent effet pour les sessions existantes, exécutez :
source /etc/profile
- Restriction de la commande
suaux membres du groupewheel
Permettez uniquement aux membres du groupe wheel d'utiliser la commande su pour passer à un autre utilisateur, notamment root.
Étapes de configuration :
- Ajoutez l'utilisateur souhaité au groupe
wheel. - Modifiez le fichier
/etc/pam.d/su. - Modifiez le fichier
/etc/login.defs.
Critères de conformité :
Seuls les membres du groupe wheel peuvent utiliser la commande su pour élever leurs privilèges.
Solution de renforcement :
Sauvegardez les fichiers de configuration.
cp -p /etc/pam.d/su /etc/pam.d/su.bak
cp -p /etc/login.defs /etc/login.defs.bak
Ajoutez l'utilisateur au groupe wheel :
usermod -aG wheel nom_utilisateur
Modifiez /etc/pam.d/su et décommentez/ajoutez la ligne suivante :
auth required pam_wheel.so use_uid
Modifiez /etc/login.defs et ajoutez la ligne suivante à la fin du fichier :
SU_WHEEL_ONLY yes
- Gestion centralisée des comptes utilisateurs
Une gestion rigoureuse des comptes est essentielle pour la sécurité.
Vérifications :
- Comptes avec shell de connexion (
/bin/bash, etc.) :awk -F: '($7 ~ /\/bin\/(bash|sh|zsh)/) {print $1}' /etc/passwd - Comptes avec UID 0 :
awk -F: '($3 == 0) {print $1}' /etc/passwd - Comptes sans mot de passe :
awk -F: '($2 == "") {print $1}' /etc/shadow
Solutions de renforcement :
- Supprimez les comptes inutiles :
userdel -r nom_utilisateur - Verrouillez les comptes inactifs ou non essentiels :
passwd -l nom_utilisateur
- Désactivation des services système inutiles
Désactivez tous les services qui ne sont pas requis pour le bon fonctionnement du système afin de réduire la surface d'attaque.
Vérification :
- Niveau d'exécution actuel :
who -rourunlevel - Liste des services et leur état d'activation :
chkconfig --list(ousystemctl list-unit-files --type=servicesur les systèmes systemd)
Solution de renforcement :
Sauvegardez la configuration des services avant de procéder.
Utilisez chkconfig (ou systemctl disable) pour désactiver les services au démarrage pour les niveaux d'exécution spécifiés.
# Exemple pour désactiver un service au démarrage pour tous les niveaux
chkconfig --level 0123456 nom_service off
# Ou sur systemd
systemctl disable nom_service.service
- Protection des fichiers et répertoires critiques contre la suppression
Utilisez l'attribut immutable pour empêcher la modification ou la suppression de fichiers critiques, même par root.
Commande :
chattr +i fichier: Ajoute l'attribut immuable.chattr -i fichier: Retire l'attribut immuable.lsattr fichier: Affiche les attributs étendus.
Exemple :
# Protéger /etc/passwd et /etc/shadow
chattr +i /etc/passwd /etc/shadow
# Vérifier les attributs
lsattr /etc/passwd /etc/shadow
Pour modifier ces fichiers, vous devrez d'abord retirer l'attribut immuable : chattr -i /etc/passwd /etc/shadow.
- Limitation de la réutilisation des mots de passe
Empêchez les utilisateurs de réutiliser leurs anciens mots de passe dans une certaine limite.
Vérification :
Vérifiez la configuration dans /etc/pam.d/system-auth ou un fichier similaire.
Critères de conformité :
Le système doit être configuré pour interdire la réutilisation des 5 derniers mots de passe (ou plus).
Solution de renforcement :
Sauvegardez le fichier de configuration.
cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
Créez et sécurisez le fichier pour le stockage des anciens mots de passe :
touch /etc/security/opasswd
chown root:root /etc/security/opasswd
chmod 600 /etc/security/opasswd
Modifiez la ligne password dans /etc/pam.d/system-auth pour inclure le paramètre remember.
# Exemple : permet de ne pas réutiliser les 5 derniers mots de passe
password sufficient pam_unix.so remember=5
- Affichage d'un message d'avertissement avant connexion SSH (Banner)
Affichez un message d'avertissement avant que les utilisateurs ne se connectent via SSH.
Vérification :
Examinez le fichier /etc/ssh/sshd_config pour la directive Banner.
Critères de conformité :
Le serveur SSH doit soit ne pas être accessible, soit afficher un message d'avertissement légal et informatif avant la connexion.
Solution de renforcement :
Sauvegardez le fichier de configuration.
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Modifiez /etc/ssh/sshd_config et ajoutez ou modifiez la ligne :
Banner /etc/ssh_banner
Créez le fichier de bannière et définissez son contenu :
touch /etc/ssh_banner
chmod 644 /etc/ssh_banner
echo "Accès autorisé uniquement. Toute activité sera surveillée et rapportée." > /etc/ssh_banner
Redémarrez le service SSH.
systemctl restart sshd
Alternative (Message du jour - MOTD) : Vous pouvez aussi modifier le fichier /etc/motd pour afficher un message après la connexion, mais le Banner s'affiche avant.
- Vérification des permissions des fichiers système critiques
Assurez-vous que les permissions des fichiers de configuraton critiques sont correctement définies pour limiter les accès non autorisés.
Vérifications :
Exécutez les commandes suivantes pour vérifier les permissions :
ls -l /etc/passwd
ls -l /etc/shadow
ls -l /etc/group
Critères de conformité :
/etc/passwd: Permissionsrw-r--r--(644) ou plus restrictives./etc/shadow: Permissionsr--------(400) ou plus restrictives./etc/group: Permissionsrw-r--r--(644) ou plus restrictives.
Solution de renforcement :
Appliquez les permissions minimales requises si elles ne sont pas conformes :
chmod 644 /etc/passwd
chmod 400 /etc/shadow
chmod 644 /etc/group
Note : Ces étapes représentent une base solide pour le renforcement de la sécurité. Le processus de sécurisation est continu et peut nécessiter des ajustements en fonction de l'évolution des menaces et des besoins spécifiques du système.