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à. |
L'authentification normale de Unix est fournie le module
pam_unix
(8) avec PAM (Pluggable Authentication
Modules : « Modules attachables d'authentification »)
. Il y a 3 fichiers de configuration importants, dont les entrées
sont séparées par des « :
», ce sont :
Tableau 4.1. 3 fichiers de configuration importants pour pam_unix
(8)
fichier | autorisation | utilisateur | groupe | description |
---|---|---|---|---|
/etc/passwd
|
-rw-r--r--
|
root
|
root
|
informations des comptes utilisateurs (assainie) |
/etc/shadow
|
-rw-r-----
|
root
|
shadow
|
informations sécurisées des comptes utilisateurs |
/etc/group
|
-rw-r--r--
|
root
|
root
|
informations des groupes |
« /etc/passwd
» contient ce qui suit :
... utilisateur1:x:1000:1000:Nom Utilisateur1,,,:/home/utilisateur1:/bin/bash utilisateur2:x:1001:1001:Nom Utilisateur2,,,:/home/utilisateur2:/bin/bash ...
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.
Tableau 4.2. Contenu de la seconde entrée de « /etc/passwd
»
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 |
« /etc/shadow
» contient ceci :
... utilisateur1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7::: utilisateur2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7::: ...
Comme c'est expliqué dans shadow
(5), les différentes
entrées de ce fichier, séparées par des « :
»
ont les significations suivantes :
$1$
» du début
indique l'utilisation d'un chiffrement MD5. Le signe « * »
indique que le compte ne peut pas se connecter) ;
« /etc/group
» contient ce qui suit :
group1:x:20:utilisateur1,utilisateur2
Comme c'est expliqué dans shadow
(5), les différentes
entrées de ce fichier, séparées par des « :
»
ont les significations suivantes :
![]() |
Note |
---|---|
« |
![]() |
Note |
---|---|
Le groupe d'appartenance réel d'un utilisateur peut être ajouté
dynamiquement si la ligne « |
![]() |
Note |
---|---|
Le paquet |
Voici quelques commandes importantes pour gérer les informations des comptes :
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 <nom_utilisateur>
|
consulter les informations cachées du compte
« <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
« |
Lors de la création d'un mot de passe à de l'installation de votre système
ou avec la commande passwd
(1), il vous faudra choisir un
bon mot de passe composé de 6 à 8
caractères, comprenant au moins un des caractères appartenant à l'ensemble
suivant conformément à passwd
(1) :
![]() |
Avertissement |
---|---|
Ne pas choisir comme mot de passe des mots qui puissent être devinés. |
Il y a des outils séparés permettant de créer des mots de passe chiffrés à partir d'une « semence ».
Tableau 4.4. Liste d'outils permettant de générer des mots de passe
paquet | popcon | taille | commande | fonction |
---|---|---|---|---|
whois
*
|
V:10, I:88 | 372 |
mkpasswd
|
frontal de la bibliothèque crypt (3) avec fonctionnalités
surabondantes
|
openssl *
|
V:36, I:90 | 2352 |
openssl passwd
|
calculer le hachage du mot de passe
(OpenSSL). passwd (1ssl)
|
De nombreux systèmes modernes semblable à Unix, comme le système Debian, fournissent les mécanismes PAM (Pluggable Authentication Modules) et NSS (Name Service Switch) pour la configuration du système par l'administrateur local. Leur rôle peut être résumé de la manière suivante :
ls
(1) et id
(1).
Ces systèmes PAM et NSS doivent être configurés de manière cohérente.
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
paquet | popcon | taille | description |
---|---|---|---|
libpam-modules *
|
V:84, I:99 | 1080 | PAM (« Pluggable Authentication Modules »), Modules attachables d'authentification (service de base) |
libpam-ldap *
|
V:2, I:4 | 380 | Modules attachables d'authentification permettant l'utilisation d'interfaces LDAP |
libpam-cracklib *
|
V:0.9, I:1.6 | 148 | Modules attachables d'authentification permettant la prise en compte de cracklib |
libpam-doc *
|
I:0.7 | 1208 | Modules attachables d'authentification (documentation en html et texte) |
libc6
*
|
V:96, I:99 | 9932 | bibliothèque GNU C Library : bibliothèques partagées qui fournissent aussi le service « Name Service Switch » |
glibc-doc *
|
I:3 | 1984 | bibliothèque GNU C : pages de manuel |
glibc-doc-reference *
|
I:1.5 | 12016 | bibliothèque GNU C : manuel de référence dans les formats info, pdf et html (non libre) |
libnss-mdns *
|
I:52 | 116 | module NSS pour la résolution des noms DNS Multicast |
libnss-ldap *
|
I:4 | 312 | module NSS pour l'utilisation de LDAP comme service de nommage |
libnss-ldapd *
|
V:0.11, I:0.3 | 140 |
module NSS pour l'utilisation de LDAP en tant que service de nommage
(nouveau compagnon de libnss-ldap )
|
libpam-doc
est essentiel à l'apprentissage de la
configuration de PAM.
glibc-doc-reference
est essentielle pour l'apprentissage
de la configuration de NSS.
![]() |
Note |
---|---|
Vous en trouverez une liste plus complète et actuelle avec la commande
« |
![]() |
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. |
Voici quelques fichiers de configuration importants auxquels PAM peut accéder :
Tableau 4.6. Liste des fichiers de configuration auxquels PAM accède
fichier de configuration | fonction |
---|---|
/etc/pam.d/<nom_programme>
|
définir la configuration de PAM pour le
« <nom_programme> », voir
pam (7) et pam.d (5)
|
/etc/nsswitch.conf
|
définir la configuration de NSS avec une entrée pour chaque service. Voir
nsswitch.conf (5)
|
/etc/nologin
|
limiter la connexion de l'utilisateur à l'aide du module
pam_nologin (8)
|
/etc/securetty
|
limiter l'accès de l'administrateur à certains tty à l'aide du module
pam_securetty (8)
|
/etc/security/access.conf
|
limiter les accès à l'aide du module pam_access (8)
|
/etc/security/group.conf
|
définir les limitations en fonction du groupe à l'aide du module
pam_group (8)
|
/etc/security/pam_env.conf
|
définir des variables d'environnement à l'aide du module
pam_env (8)
|
/etc/environment
|
définir des variables d'environnement supplémentaires à l'aide du module
pam_env (8) avec le paramètre
« readenv=1 »
|
/etc/default/locale
|
définir les paramètres linguistiques (« locale ») à l'aide du
module pam_env (8) avec le paramètre
« readenv=1 envfile=/etc/default/locale »
(Debian)
|
/etc/security/limits.conf
|
définir les limitations de ressources (ulimit, core, …) à l'aide du module
pam_linits (8)
|
/etc/security/time.conf
|
définir les restrictions de temps à l'aide du module
pam_time (8)
|
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
« |
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) :
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
» ;
/etc/pam_ldap.conf
» comme
fichier de configuration de libpam-ldap
et
«nbsp;/etc/pam_ldap.secret
» pour enregistrer le mot
de passe de root.
modifiez la configuration de NSS dans le fichier
« /etc/nsswitch.conf
» pour utiliser
« ldap
» plutôt que ce qui s'y trouve par
défaut (« compat
» ou
« file
») ;
/etc/libnss-ldap.conf
» comme
fichier de configuration de libnss-ldap
.
libpam-ldap
de manière à ce qu'il
utilise une connexion SSL (ou TLS) pour la
sécurité du mot de passe ;
libnss-ldap
de manière à ce qu'il
utilise une connexion SSL (ou TLS) afin
d'assurer l'intégrité des données au prix d'une surcharge du réseau
LDAP ;
nscd
(8) localement pour mettre en cache les résultats de
recherche de LDAP .
Voir les documentations dans pam_ldap.conf
(5) et
« /usr/share/doc/libpam-doc/html/
» qui sont
fournies par le paquet libpam-doc
et « info
libc 'Name Service Switch'
fournie par le paquet
glibc-doc
.
De manière similaire, vous pouvez mettre en œuvre des systèmes centralisés de remplacement avec d'autres méthodes :
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
![]() |
Note |
---|---|
Voir Section 9.5.15, « touche Alt-SysRq » pour restreindre la fonctionnalité de touche d'appel sécurisée (SAK) (« secure attention key ») du noyau. |
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
».
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.
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 :
/etc/default/<nom_programme>
» ;
/etc/inetd.conf
» pour le super-serveur ;
/etc/hosts.deny
» et
« /etc/hosts.allow
» pour l'enrobeur TCP, tcpd
(8) ;
/etc/rpc.conf
» pour Sun RPC ;
/etc/at.allow
» et
« /etc/at.deny
» pour
atd
(8) ;
/etc/cron.allow
» et
« /etc/cron.deny
» pour
crontab
(1) ;
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 |
---|---|
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
« |
Les informations données ici ne suffiront pas à remplir vos besoins de sécurité mais constituent un bon point de départ.
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.
Tableau 4.7. Liste des services et ports sûrs et non sûrs
nom de service non sûr | port | nom de service sûr | port |
---|---|---|---|
www (http) | 80 | https | 443 |
smtp (courrier électronique) | 25 | ssmtp (smtps) | 465 |
données ftp | 20 | données ftps | 989 |
ftp | 21 | ftps | 990 |
telnet | 23 | telnets | 992 |
imap2 | 143 | imaps | 993 |
pop3 | 110 | pop3s | 995 |
ldap | 389 | ldaps | 636 |
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) ».
Même si vous tournez avec des services sécurisés comme des serveurs Secure Shell (SSH) et Point-to-point tunneling protocol (PPTP), il reste des chance de break-ins en utilisant depuis Internet une attaque de force brute pour trouver le mot de passe, etc. L'utilisation d'une politique de parefeu (voir Section 5.8, « Infrastructure de netfilter ») conjointement avec les outils sûrs qui suivent peut améliorer la sécurité :
Tableau 4.8. Liste des outils fournissant des mesures de sécurité supplémentaires
paquet | popcon | taille | description |
---|---|---|---|
knockd *
|
V:0.14, I:0.4 | 164 |
démon knockd (1) et client konck (1)
légers de rituel d'ouverture de ports « port-knocking »
|
denyhosts *
|
V:1.8, I:2 | 432 | utilitaire pour aider les administrateurs système à contrecarrer les pirates par ssh |
fail2ban *
|
V:3, I:4 | 660 | bannir les IP qui provoque des erreurs d'authentification multiples |
libpam-shield *
|
V:0.01, I:0.06 | 104 | verrouiller les attaquants distants cherchant à deviner le mot de passe |
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 :
/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 :
root=/dev/hda6 rw
init=/bin/sh
».
/etc/passwd
» et vider la seconde
entrée du compte root
.
L'interpréteur de commandes de l'administrateur est maintenant accessible sans mot de passe.
![]() |
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 |
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.