Académique Documents
Professionnel Documents
Culture Documents
Chapitre 4 Authentification
Chapitre 4 Authentification
Authentification
Chapitre 4. Authentification
Table des matières
Lorsqu'une personne (ou un programme) demande l'accès au système, l'authentification confirme que
l'identité est autorisée.
Avertissement
Des erreurs de configuration de PAM peuvent vous mettre à la porte de votre propre
système. Vous devez avoir un CD de secours prêt ou une partition de démarrage de
remplacement. Pour restaurer, démarrez le système depuis l'un de ces moyens de
secours et corrigez les choses depuis là.
Comme il est expliqué dans passwd(5), les entrées de ce fichier, séparées par des « : », ont la signification
suivante :
La seconde entrée de « /etc/passwd » était autrefois utilisée comme entrée de mot de passe chiffré.
Depuis l'introduction de « /etc/shadow », cette entrée est utilisée comme entrée de spécification du mot
de passe.
contenu signification
(vide) compte sans mot de passe
x le mot de passe chiffré se trouve dans « /etc/shadow »
* ce compte ne peut pas se connecter
! ce compte ne peut pas se connecter
Comme c'est expliqué dans shadow(5), les différentes entrées de ce fichier, séparées par des « : » ont les
significations suivantes :
Comme il est expliqué dans group(5), les entrées de ce fichier, séparées par des « : », ont la signification
suivante :
nom du groupe ;
mot de passe chiffré (non utilisé en pratique) ;
identifiant numérique du groupe ;
liste des noms d'utilisateurs séparée par des « , ».
Note
« /etc/gshadow » fournit les mêmes fonctions que « /etc/shadow » pour
« /etc/group » mais n'est pas réellement utilisé.
Note
Le groupe d'appartenance réel d'un utilisateur peut être ajouté dynamiquement si la
ligne « auth optional pam_group.so » est ajoutée à « /etc/pam.d
/common-auth » et défini dans « /etc/security/group.conf ». Voir
pam_group(8).
Note
Le paquet base-passwd contient une liste faisant autorité d'utilisateurs et de
groupes : « /usr/share/doc/base-passwd/users-and-groups.html ».
Tableau 4.3. Liste des commandes servant à gérer les informations des comptes
commande fonction
getent passwd
<nom_utilisateur> consulter les informations du compte « <nom_utilisateur> »
getent shadow consulter les informations cachées du compte
<nom_utilisateur> « <nom_utilisateur> »
getent group <nom_groupe> consulter les informations du groupe « <nom_ groupe> »
passwd gérer le mot de passe de ce compte
passwd -e définir un mot de passe à usage unique pour l'activation du compte
chage gérer les informations de durée de validité du mot de passe
Vous pouvez avoir besoin des droits de l'administrateur pour certaines fonctions. Voir crypt(3) pour le
chiffrement des mots de passe et des données.
Note
Sur les systèmes configurés avec PAM et NSS comme la machine alioth de Debian, le
contenu des fichiers locaux « /etc/passwd », « /etc/group » et « /etc/shadow »
peut ne pas être utilisé de manière active par le système. Le commandes ci-dessus
restent valables même sous un tel environnement.
Avertissement
Ne pas choisir comme mot de passe des mots qui puissent être devinés.
PAM offre un mécanisme d'authentification souple qui est utilisé par les logiciels applicatifs
lorsqu'ils ont besoins d'échanger des mots de passe.
NSS fournit un mécanisme souple de service de noms qui est fréquemment utilisé par la
bibliothèque standard C pour obtenir le nom de groupe de programmes comme ls(1) et id(1).
Les paquets importants des systèmes PAM et NSS sont les suivants :
Tableau 4.5. Liste des paquets importants des systèmes PAM et NNS
Note
Vous en trouverez une liste plus complète et actuelle avec la commande « aptitude
search 'libpam-|libnss-' ». L'acronyme NSS peut aussi signifier « Network
Security Service » qui est différent de « Name Service Switch ».
Note
PAM est la manière la plus élémentaire d'initialiser des variables d'environnement
pour tous les programmes avec des valeurs par défaut valables pour l'ensemble du
système.
Les limitations dans la sélection des mots de passe est implémentée par les modules PAM pam_unix(8) et
pam_cracklib(8). Ils peuvent être configurés à l'aide de leurs paramètres.
Astuce
Les noms de fichiers des modules PAM ont le suffixe « .so ».
La gestion centralisée du système peut être mis en œuvre en utilisant le serveur centralisé LDAP
Protocole léger d'accès aux répertoires (« Lightweight Directory Access Protocol ») pour administrer de
nombreux systèmes semblables à Unix ou autres sur le réseau. Le logiciel OpenLDAP est l'implémentation
à sources ouvertes du protocole LDAP
Sur un système Debian, le serveur LDAP fournit les informations de compte en utilisant PAM et de NSS
avec les paquets libpam-ldap et libnss-ldap. Un certain nombre d'actions sont nécessaires pour
l'activer (je n'ai pas utilisé cette configuration et ce qui suit est une information secondaire. Veuillez la lire
dans ce contexte) :
définissez un serveur LDAP centralisé en faisant tourner un programme tel que le démon LDAP,
slapd(8) ;
modifiez les fichiers de configuration de PAM dans le répertoire « /etc/pam.d/ » pour utiliser
« pam_ldap.so » plutôt que le module par défaut « pam_unix.so » ;
De manière similaire, vous pouvez mettre en œuvre des systèmes centralisés de remplacement avec
d'autres méthodes :
NIS (appelé initialement YP) ou NIS+ pour les anciens systèmes semblables à Unix ;
Winbind avec Windows NT et SAMBA.
4.5.3. « Pourquoi la commande su de GNU ne gère-t-elle pas le groupe « wheel »
C'est la célèbre phrase de Richard M. Stallman en bas de l'ancienne page info su. Ne pas s'inquiéter : la
commande su actuelle de http://www.debian.org utilise PAM, on peut donc restreindre l'accès de su au
groupe root en activant la ligne de « /etc/pam.d/su »comportant « pam_wheel.so ».
L'installation du paquet libpam-cracklib vous permet de forcer des règles plus strictes concernant les
mots de passe en mettant, par exemple, les lignes suivantes dans « /etc/pam.d/common-password » :
Pour lenny :
password required pam_cracklib.so retry=3 minlen=9 difok=3
password required pam_unix.so use_authtok nullok md5
Pour squeeze :
password required pam_cracklib.so retry=3 minlen=9 difok=3
password [success=1 default=ignore] pam_unix.so use_authtok nullok md5
password requisite pam_deny.so
password required pam_permit.so
4.6.1. sudo
sudo(8) est un programme conçu pour permettre à un administrateur système de donner des privilèges
d'administration limités aux utilisateurs et d'enregistrer dans un journal les actions de l'administrateur
(« root ». sudo ne demande que le mot de passe d'un utilisateur normal. Installez le paquet sudo et
activez-le en définissant les options dans « /etc/sudoers ». Voir l'exemple de configuration dans
« /usr/share/doc/sudo/examples/sudoers ».
Mon utilisation de sudo sur un système avec un seul utilisateur (voir Section 1.1.12, « Configuration de
sudo ») est destinée à me protéger moi-même contre ma propre stupidité. Personnellement, je considère
que l'utilisation de sudo est une meilleure alternative que l'utilisation permanente du système depuis le
compte de l'administrateur. Par exemple, les modifications suivantes du propriétaire de « <un_fichier> »
par « <mon_nom> » :
$ sudo chown <mon_nom> <un_fichier>
Bien sûr, si vous connaissez le mot de passe de root (comme beaucoup d'utilisateurs de Debian qui ont
installé eux-mêmes leur système), n'importe quelle commande peut être lancée en tant qu'administrateur
depuis un compte utilisateur par « su -c ».
4.6.2. SELinux
Security-Enhanced Linux (SELinux) est une infrastructure pour resserrer davantage le modèle des
privilèges que le modèle de sécurité ordinaire des systèmes semblables à Unix avec les règles de contrôle
d'accès obligatoire (MAC) (« mandatory access control »). La puissance de l'administrateur peut être
restreinte sous certaines conditions.
4.6.3. Restreindre l'accès à certains services du serveur
Pour la sécurité du système, c'est une bonne idée de désactiver autant de programmes de serveurs que
possible. Ceci devient critique pour les services par l'intermédiaire du réseau. Avoir des services réseau
inutilisés, qu'ils soient activés directement en tant que démon ou par l'intermédiaire du programme super-
serveur, est considéré comme un risque de sécurité.
De nombreux programmes, tels que sshd(8), utilisent un contrôle d'accès basé sur PAM. Il y a de
nombreuses manières de restreindre l'accès à certains serveurs de services :
Voir Section 3.5.3, « Exemple de gestion de niveau de fonctionnement », Section 3.5.4, « Paramètre par
défaut de chaque script init », Section 4.5.1, « Fichiers de configuration auxquels accèdent PAM et NSS »,
Section 3.5.8, « Initialisation des services réseau » et Section 5.8, « Infrastructure de netfilter ».
Astuce
Les services Sun RPC doivent être actif pour NFS et les autres programmes basés sur
RPC.
Astuce
Si vous avez des problèmes pour les accès à distance sur un système Debian récent,
commentez la ligne de configuration posant problème, comme « ALL: PARANOID »
de « /etc/hosts.deny » si elle existe. (Mais vous devrez faire attention au risque de
sécurité induit par ce type d'action).
La couche de transport de nombreux services populaires communique les messages, y-compris les mots de
passe d'authentification, en texte clair. C'est une très mauvaise idée de transmettre un mot de passe en
texte clair dans la jungle d'Internet où il peut être intercepté. Vous pouvez faire tourner des services sur
une couche de transport sécurisée « Sécurité de la couche de transport (« Transport Layer Security ») »
(TLS) ou son prédécesseur « Secure Sockets Layer » (SSL) pour sécuriser par chiffrement de la
communication dans son ensemble, y-compris le mot de passe.
Le chiffrement coûte du temps CPU. Comme solution de remplacement pour économiser du temps CPU,
vous pouvez continuer à effectuer les communications en texte clair tout en ne sécurisant que le mot de
passe avec un protocole d'authentification sécurisé comme « Authenticated Post Office Protocol »
(APOP) pour POP et « Challenge-Response Authentication Mechanism MD5 » (CRAM-MD5) pour
SMTP et IMAP. (Depuis peu, pour envoyer des messages de courrier électronique au travers d'internet à
votre serveur de courrier depuis votre client de courrier, il est devenu habituel d'utiliser le port 587 en
remplacement du port SMTP 25 habituel pour soumettre le courrier afin d'éviter le blocage du port 25 par
le fournisseur d'accès au réseau tout en vous authentifiant avec CRAM-MD5).
Le programme SSH, Shell sûr (« Secure Shell ») permet une communication chiffrée sûre entre deux
machines qui ne soient pas « de confiance » au travers d'un réseau non sûr avec une authentification sûre.
Il est constitué du client OpenSSH, de ssh(1), et du démon OpenSSH, sshd (8). SSH peut être utilisé pour
« tunneler » de manière sécurisée un protocole de communications non sûr tel que POP et X au travers
d'Internet à l'aide de la fonctionnalité de transfert de port.
Le client essaie de s'authentifier en utilisant l'authentification basée sur l'hôte, une clé publique
d'authentification, une authentification par question-réponse ou une authentification par mot de passe.
L'utilisation d'une authentification par clé publique permet la connexion à distance sans mot de passe.
Voir Section 6.9, « Le serveur et les utilitaires d'accès à distance (SSH) ».
Tableau 4.8. Liste des outils fournissant des mesures de sécurité supplémentaires
Afin d'éviter que des personnes accèdent à votre machine avec les privilèges de l'administrateur, vous
devez prendre les mesures suivante :
Avec un accès physique au disque, réinitialiser le mot de passe est relativement facile en suivant les
étapes suivantes :
1. Déplacer le disque dur sur un PC dont le BIOS permet le démarrage depuis un CD.
2. Démarrer le système avec un support de secours (disque d'amorçage de Debian, CD Knoppix, CD
GRUB, ..)
3. Monter la partition racine avec les droits en lecture et écriture.
4. Éditer « /etc/passwd » de la partition racine et vider la seconde entrée du compte root.
Si vous avez l'accès en édition au menu GRUB (voir Section 3.3, « Étage 2 : le chargeur initial »), avec
grub-rescue-pc, il est encore plus simple d'effectuer les étapes suivantes au moment du démarrage :
1. Démarrer le système avec les paramètres du noyau modifiés en quelque chose qui ressemble à
« root=/dev/hda6 rw init=/bin/sh ».
2. Éditer « /etc/passwd » et vider la seconde entrée du compte root.
3. Redémarrer le système.
Note
Une fois que quelqu'un a accès à l'interpréteur de commandes de l'administrateur, il
peut accéder à l'ensemble du système et en réinitialiser tous les mots de passe. De
plus, il peut compromettre le mot de passe de n'importe quel utilisateur en utilisant
des outils de cassage de mots de passe par force brute tels que les paquets john et
crack (voir Section 9.6.11, « Vérification de la sécurité et de l'intégrité du système »).
Ces mots de passes cassés peuvent permettre de compromettre d'autres systèmes.
La seule solution logicielle raisonnable pour éviter tout ça est d'utiliser une partition racine (ou une
partition « /etc ») chiffrée par logiciel en utilisant dm-crypt et initramfs (voir Section 9.4, « Astuces de
chiffrement des données »). Vous aurez alors toujours besoin d'un mot de passe pour vous connecter au
système.