Sécuriser un serveur

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Durcissement système (hardening)
Commandes chage · passwd · last/lastb
Fichiers /etc/pam.d/system-auth, /etc/login.defs, /etc/security/opasswd
Contexte Linux (RHEL/CentOS et dérivés, adaptable Debian/Ubuntu)
Voir aussi Sudo · Firewalld · SELinux

Sécuriser un serveur regroupe les réglages de base à appliquer sur toute machine Linux exposée : politique de mots de passe, verrouillage des comptes, désactivation des services inutiles, et défense en profondeur (pare-feu et contrôle d'accès obligatoire). Cette page centralise les points spécifiques à l'authentification système — voir Sudo, Firewalld et SELinux pour le détail des autres briques.

Politique de mots de passe

Empêcher la réutilisation des anciens mots de passe

Le module PAM pam_unix peut conserver un historique des empreintes de mots de passe (/etc/security/opasswd) et refuser leur réutilisation via l'option remember. Sauvegarder la configuration avant modification :

cp /etc/pam.d/system-auth /etc/pam.d/system-auth.000

Puis dans /etc/pam.d/system-auth :

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5
password    required      pam_deny.so

remember=5 conserve les 5 derniers hachés dans /etc/security/opasswd et bloque toute tentative de réutilisation. L'historique se consulte avec more /etc/security/opasswd.

Renforcer le dictionnaire de mots de passe interdits (cracklib)

pam_cracklib rejette les mots de passe présents dans son dictionnaire (/usr/share/cracklib/pw_dict). Vérifier que le paquet est installé et inspecter le dictionnaire actuel :

rpm -q cracklib cracklib-dicts
cd /usr/share/cracklib
cracklib-unpacker pw_dict | head -15

Pour ajouter des mots prévisibles (noms propres, jargon interne, thèmes populaires) au dictionnaire :

cracklib-unpacker /usr/share/cracklib/pw_dict > dico
cat dico mots-supplementaires.txt | sort | uniq > newdico
mkdict newdico | packer pw_dict
mv pw_dict.* /usr/share/cracklib/

Expiration des mots de passe (password aging)

chage pilote la politique d'expiration par utilisateur (les valeurs par défaut pour les nouveaux comptes sont dans /etc/login.defs) :

chage -l pierre               # afficher la politique actuelle
chage -M 90 pierre             # expiration au bout de 90 jours
chage -m 0 pierre              # pas de délai minimum avant de pouvoir re-changer le mot de passe
chage -E 2027-12-01 pierre     # date d'expiration du compte

⚠️ Un -m (minimum) non nul combiné à un -M (maximum) empêche l'utilisateur de contourner l'historique en changeant son mot de passe plusieurs fois d'affilée pour revenir à l'ancien.

Le hash stocké dans /etc/shadow contient le sel entre les deux premiers $ (par exemple $1$b4ip3GYB$... pour MD5) :

grep pierre /etc/shadow
openssl passwd -1 -salt v85deiY 'motdepasse'   # rejouer le même hash pour vérification

Verrouiller un compte

passwd -S pierre        # statut du compte (verrouillé, actif, sans mot de passe...)
passwd -l pierre        # verrouiller
passwd -u pierre        # déverrouiller

Traçabilité des connexions

last                     # connexions réussies (lit /var/log/wtmp)
lastb                    # connexions échouées (lit /var/log/btmp)

À croiser avec un mécanisme de blocage après échecs répétés (pam_faillock sur RHEL7+/8+, pam_tally2 sur les versions plus anciennes) — non détaillé sur cette page.

Pare-feu et contrôle d'accès obligatoire

Le filtrage réseau et le contrôle d'accès obligatoire sont deux couches de défense en profondeur distinctes de la politique de mots de passe, détaillées sur leurs pages dédiées : Firewalld (ou Iptables sur les systèmes plus anciens) pour le filtrage réseau, SELinux pour le confinement des processus au-delà des permissions Unix classiques.

Élévation de privilèges

Éviter les connexions root directes et déléguer les droits nécessaires via Sudo plutôt que de partager le mot de passe root.

Désactiver les services inutiles

Réduire la surface d'attaque en coupant les services non utilisés (voir Chkconfig ou Systemctl selon la distribution pour la commande exacte).

Voir aussi

  • Sudo — délégation de privilèges sans partager le mot de passe root
  • Firewalld — filtrage réseau par zones
  • SELinux — contrôle d'accès obligatoire