Chapitre 4. Contrôle d’authentification et d’accès

# Chapitre 4. Contrôle d’authentification et d’accès

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à.

## 4.1. Authentification normale d’UNIX

L’authentification normale d’UNIX est fournie par le module pam_unix(8) avec PAM (Pluggable Authentication Modules : « Modules attachables d’authentification ») . Il y a trois 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 (aseptisée)
`/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 :

     ...
    user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash
    user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash
     ...

Comme il est expliqué dans passwd(5), les entrées de ce fichier, séparées par des « `:` », ont la signification suivante :

- nom de l’utilisateur pour la connexion ;

- entrée de spécification du mot de passe ;

- identifiant numérique de l’utilisateur ;

- identifiant numérique du groupe ;

- nom de l’utilisateur ou champ de commentaire ;

- répertoire personnel de l’utilisateur ;

- interpréteur de commandes facultatif de l’utilisateur.

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` »

« `/etc/shadow` » contient ceci :

     ...
    user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
    user2:$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 :

- nom de l’utilisateur pour la connexion ;

- mot de passe chiffré (le « `$1$` » du début indique l’utilisation d’un chiffrement MD5. Le signe « * » indique que le compte ne peut pas se connecter) ;

- Date du dernier changement de mot de passe, exprimé en nombre de jours passés depuis le premier janvier 1970.

- nombre de jours avant qu’un utilisateur ne soit autorisé à changer à nouveau son mot de passe ;

- nombre de jours avant que l’utilisateur ne soit tenu de changer son mot de passe ;

- nombre de jours avant qu’un mot de passe n’arrive à expiration et durant lesquels l’utilisateur doit être averti ;

- nombre de jours durant lesquels un mot de passe devrait encore être accepté, passé sa date d’expiration ;

- date d’expiration du compte, exprimée en nombre de jours passés depuis le premier janvier 1970 ;

- …

« `/etc/group` » contient ce qui suit :

    group1:x:20:user1,user2

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és 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` ». Consultez 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` ».

## 4.2. Gestion des informations des comptes et des mots de passes

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 user_name` | consulter les informations du compte « `nom_utilisateur` »
`getent shadow user_name` | consulter les informations cachées du compte « `nom_utilisateur` »
`getent group group_name` | 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. Consultez 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 salsa 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.

## 4.3. Mot de passe de qualité

Lors de la création d’un mot de passe à l’installation de votre système ou avec la commande passwd(1), il vous faudra choisir un bon mot de passe composé d’au moins 6 à 8 caractères, comprenant au moins un des caractères appartenant à l’ensemble suivant conformément à passwd(1) :

- caractères alphabétiques en minuscules ;

- chiffres de 0 à 9 ;

- marques de ponctuation.

| Avertissement

Ne choisissez pas des mots qui se devinent aisément pour le mot de passe. Les noms de compte, les numéros de sécurité sociale, les numéros de téléphone, les adresses, les dates anniversaire, les noms des membres de votre famille ou de vos animaux domestiques, les mots du dictionnaire, les suites simples de caractères telles que « 12345 » ou « qwerty »… constituent tous de mauvais choix pour le mot de passe.

## 4.4. Créer un mot de passe chiffré

Il existe des outils autonomes 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 | popularité | taille | commande | fonction
--- | --- | --- | --- | ---
`whois` | V:23, I:210 | 384 | `mkpasswd` | frontal de la bibliothèque crypt(3) avec fonctionnalités surabondantes
`openssl` | V:855, I:997 | 2532 | `openssl passwd` | calculer le hachage du mot de passe (OpenSSL). `passwd`(1ssl)

## 4.5. PAM et NSS

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 :

- 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).

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 | popularité | taille | description
--- | --- | --- | ---
`libpam-modules` | V:941, I:1000 | 892 | Modules attachables d’authentification (PAM) (service de base)
`libpam-ldapd` | V:7, I:13 | 79 | Modules attachables d’authentification (PAM) permettant l’utilisation d’interfaces LDAP
`libpam-systemd` | V:747, I:967 | 785 | Modules attachables d’authentification (PAM) pour enregistrer des sessions d’utilisateur pour `logind`
`libpam-doc` | I:7.5 | 1492 | Modules attachables d’authentification (PAM) (documentation en HTML et texte)
`libc6` | V:942, I:1000 | 5481 | bibliothèque GNU C Library : bibliothèques partagées qui fournissent aussi le service « Name Service Switch »
`glibc-doc` | I:5.4 | 3926 | bibliothèque GNU C : pages de manuel
`glibc-doc-reference` | I:3.2 | 14764 | bibliothèque GNU C : manuel de référence dans les formats info, pdf et html (non libre)
`libnss-mdns` | V:282, I:502 | 142 | module NSS pour la résolution des noms DNS Multicast
`libnss-ldapd` | V:8, I:16 | 131 | module NSS pour l’utilisation de LDAP comme service de nommage

- « The Linux-PAM System Administrators' Guide » de `libpam-doc` est essentiel à l’apprentissage de la configuration de PAM.

- La section « System Databases and Name Service Switch » de `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 « `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.

Sous systemd, le paquet `libpam-systemd` est installé pour gérer les connexions utilisateur en enregistrant les sessions utilisateur dans la hiérarchie de groupes de contrôle de `systemd` pour logind. Voir systemd-logind(8), logind.conf(5) et pam_systemd(8).

### 4.5.1. Fichiers de configuration auxquels accèdent PAM et NSS

Voici quelques fichiers de configuration importants auxquels PAM et NSS peuvent accéder :

Tableau 4.6. Liste des fichiers de configuration auxquels PAM et NSS accèdent

fichier de configuration | fonction
--- | ---
`/etc/pam.d/program_name` | définir la configuration de PAM pour le « `nom_programme` », consultez pam(7) et pam.d(5)
`/etc/nsswitch.conf` | définir la configuration de NSS avec une entrée pour chaque service. Consultez 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)
`/etc/systemd/logind.conf` | définir la configuration du gestionnaire de login de `systemd` (voir logind.conf(5) et systemd-logind.service(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 « `.so` ».

### 4.5.2. Le système de gestion centralisée moderne

La gestion centralisée du système peut être mise 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-ldapd` et `libnss-ldapd`. 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` » ;

- 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` ») ;

- vous devez configurer `libpam-ldapd` de manière à ce qu’il utilise une connexion SSL (ou TLS) pour la sécurité du mot de passe ;

- vous pouvez configurer `libnss-ldapd` 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 ;

- Afin de réduire le trafic réseau de LDAP, vous devrez faire tourner nscd(8) localement pour mettre en cache les résultats de recherche de LDAP .

See documentations in nsswitch.conf(5), pam.conf(5), ldap.conf(5), and "`/usr/share/doc/libpam-doc/html/`" offered by the `libpam-doc` package and "`info libc 'Name Service Switch'`" offered by the `glibc-doc` package.

De manière similaire, vous pouvez mettre en œuvre des systèmes centralisés de remplacement avec d’autres méthodes.

- Intégration d’utilisateur et de groupe au système Windows.

  - Accès aux services de Domaine (Microsoft) avec les paquets `winbind` et `libpam_winbind`.

  - Consultez winbindd(8) et Intégration de réseaux MS Windows avec Samba.

- Intégration d’utilisateur et de groupe à l’ancien système de type UNIX.

  - Accès à NIS (appelé initialement YP) ou NIS+ avec le paquet `nis`.

  - Consultez Le Linux NIS(YP)/NYS/NIS+ HOWTO.

### 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 https://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` ».

### 4.5.4. Règle de mots de passe plus stricte

L’installation du paquet `libpam-cracklib` permet d’obliger à suivre une règle plus sévère pour les mots de passe.

Sur un système GNOME typique qui installe automatiquement `libpam-gnome-keyring`, « `/etc/pam.d/common-password` » ressemble à :

    # here are the per-package modules (the "Primary" block)
    password	requisite			pam_cracklib.so retry=3 minlen=8 difok=3
    password	[success=1 default=ignore]	pam_unix.so obscure use_authtok try_first_pass yescrypt
    # here's the fallback if no module succeeds
    password	requisite			pam_deny.so
    # prime the stack with a positive return value if there isn't one already;
    # this avoids us returning an error just because nothing sets a success code
    # since the modules above will each just jump around
    password	required			pam_permit.so
    # and here are more per-package modules (the "Additional" block)
    password	optional	pam_gnome_keyring.so
    # end of pam-auth-update config

## 4.6. Sécurité de l’authentification

| Note
Les informations données ici pourraient ne répondre que partiellement à vos besoins en matière de sécurité mais elles devraient néanmoins constituer un bon point de départ.

### 4.6.1. Mot de passe sûr avec Internet

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 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 processeur. Comme solution de remplacement pour économiser du temps processeur, 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.)

The traditional password-based authentication still suffers inherent security issues such as password reuse across multiple websites. See other authentication methods for the secure solution: Time-based one-time password (TOTP), Universal 2nd Factor (U2F), Web Authentication (WebAuthn, commonly referred as "passkey")

### 4.6.2. Le shell sûr (Secure Shell)

Le programme SSH, Shell sûr (« Secure Shell ») permet une communication chiffrée sûre entre deux machines qui ne sont 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. Consultez Section 6.3, « Le serveur et les utilitaires d’accès à distance (SSH) ».

### 4.6.3. Mesures de sécurité supplémentaires pour Internet

Même lorsque vous exécutez des services sécurisés tels que des serveurs Secure Shell (SSH) ou PPTP (protocole de tunnel point-à-point), il existe toujours des risques d’intrusion à l’aide d’une attaque par force brute pour deviner le mot de passe, etc., à partir d’Internet. L’utilisation d’une politique de pare-feu (voir Section 5.7, « Infrastructure de netfilter ») avec les outils de sécurité suivants peut améliorer la situation en matière de sécurité.

Tableau 4.8. Liste des outils fournissant des mesures de sécurité supplémentaires

paquet | popularité | taille | description
--- | --- | --- | ---
`knockd` | V:0.7, I:1.7 | 110 | petit démon de « tocage à la porte » knockd(1) et client knock(1)
`fail2ban` | V:102, I:113 | 2191 | bannir les IP qui provoquent des erreurs d’authentification multiples
`libpam-shield` | V:0.05, I:0.05 | 115 | verrouiller les attaquants distants cherchant à deviner le mot de passe

### 4.6.4. sécuriser le mot de passe de l’administrateur

Afin d’éviter que des personnes accèdent à votre machine avec les privilèges de l’administrateur, vous devez prendre les mesures suivantes :

- Prevent physical access to the system storage device (HDD / SSD / ...)

- verrouiller l’UEFI/BIOS et empêcher le démarrage à partir du support amovible

- définir un mot de passe pour la session interactive de GRUB ;

- verrouiller l’édition du menu de GRUB.

With physical access to the system storage device, resetting the password is relatively easy with following steps.

1. Move the system storage device to a PC with USB bootable UEFI/BIOS.

2. Boot system with a rescue media (see Section 3.2.2, « Linux live rescue system on USB »).

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 (consultez Section 3.1.2, « É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/sda6 rw init=/bin/sh` ».

2. Éditer « `/etc/passwd` » et vider la seconde entrée du compte `root`.

3. Redémarrer le système.

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 `john` et `crack` (consultez Section 9.5.10, « 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 (consultez Section 9.9, « Astuces de chiffrement des données »). Vous aurez alors toujours besoin d’un mot de passe pour vous connecter au système.

## 4.7. Autres contrôles d’accès

Il existe des contrôles d’accès au système autres que l’authentification par mot de passe et les autorisations de fichier.

| Note
Consultez Section 9.4.16, « touche Alt-SysRq » pour restreindre la fonctionnalité de touche d’appel sécurisée (SAK) (« secure attention key ») du noyau.

### 4.7.1. Listes de contrôle d’accès (ACL)

Les ACL sont un sur-ensemble des permissions normales comme expliqué dans la Section 1.2.3, « Permissions du système de fichiers ».

Les ACL sont utilisées dans les environnements de bureau modernes. Quand un périphérique USB formaté de stockage est auto-monté, comme par exemple « `/media/penguin/SBSTICK` », un utilisateur `penguin` normal peut exécuter :

     $ cd /media/penguin
     $ ls -la
    total 16
    drwxr-x---+ 1 root    root    16 Jan 17 22:55 .
    drwxr-xr-x  1 root    root    28 Sep 17 19:03 ..
    drwxr-xr-x  1 penguin penguin 18 Jan  6 07:05 USBSTICK

« `+` » dans la 11ème colonne indique que les ACL sont actives. Sans ACL, un utilisateur `penguin` normal ne pourrait réaliser une telle liste puisque `penguin` n’est pas dans le groupe `root`. Les ACL peuvent être vues comme :

     $ getfacl .
    # file: .
    # owner: root
    # group: root
    user::rwx
    user:penguin:r-x
    group::---
    mask::r-x
    other::---

Ici :

- "`user::rwx`", "`group::---`", and "`other::---`" correspond au propriétaire normal, au groupe et aux autres permissions ;

- l’ACL «`user:penguin:r-x` » permet à un utilisateur normal `penguin` d’avoir les permissions « `r-x` ». Cela permet à « `ls -la` » de lister le contenu d’un répertoire ;

- l’ACL « `mask::r-x` » définit les permissions maximales.

Consultez « POSIX Access Control Lists on Linux », acl(5), getfacl(1) et setfacl(1) pour plus de renseignements.

### 4.7.2. 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` ». Consultez l’exemple de configuration dans « `/usr/share/doc/sudo/examples/sudoers` » et Section 1.1.12, « Configuration de sudo ».

Mon utilisation de `sudo` sur un système avec un seul utilisateur (consultez 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 my_name some_file

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.7.3. PolicyKit

PolicyKit est un composant du système d’exploitation permettant de contrôler les droits globaux sur les systèmes de type UNIX.

Les applications graphiques les plus récentes ne sont pas conçues pour fonctionner comme des processus privilégiés. Elles échangent avec les processus privilégiés par l’intermédiaire de PolicyKit pour réaliser les opérations d’administration.

PolicyKit limite de telles opérations aux comptes d’utilisateurs appartenant au groupe `sudo` sur le système Debian.

Consultez polkit(8).

### 4.7.4. Restreindre l’accès à certains services du serveur

Pour la sécurité du système, il est préférable de désactiver autant de programmes de serveurs que possible. Cela 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 :

- fichiers de configuration : « `/etc/default/nom_programme` » ;

- configuration d’unité de service systemd pour un démon« ;

- PAM (Modules d’authentification attachables) (« Pluggable Authentication Modules ») ;

- « `/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) ;

- un pare-feu réseau de l’infrastructure netfilter.

Consulter Section 3.6, « Gestion du système », Section 4.5.1, « Fichiers de configuration auxquels accèdent PAM et NSS » et Section 5.7, « 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)

### 4.7.5. Caractéristiques de sécurité de Linux

Le noyau Linux a évolué et prend en charge des fonctionnalités de sécurité introuvables dans les implémentations UNIX traditionnelles.

Linux prend en charge les attributs étendus qui accroissent les attributs UNIX traditionnels (Consulter xattr(7)).

Linux divise les privilèges traditionnellement associés au superutilisateur en unités distinctes, appelées `capacités`(7), qui peuvent être activées et désactivées indépendamment. Les capacités sont un attribut par fil d’exécution depuis la version 2.2 du noyau.

Le cadriciel Linux Security Module (LSM) fournit un mécanisme pour que divers contrôles de sécurité puissent être imbriquées dans de nouvelles extensions de noyau. Par exemple :

- AppArmor

- Security-Enhanced Linux (SELinux) ;

- Smack (Simplified Mandatory Access Control Kernel) ;

- Tomoyo Linux

Étant donné que ces extensions peuvent restreindre davantage le modèle de privilège que les politiques ordinaires de modèle de sécurité de type Unix, même le pouvoir du superutilisateur peut être restreint. Il est conseillé de lire le document sur le cadriciel Linux Security Module (LSM) sur kernel.org.

Les espaces de noms de Linux enveloppent une ressource système globale dans une abstraction qui donne l’impression aux processus de l’espace de noms qu’ils ont leur propre instance isolée de la ressource globale. Les modifications apportées à la ressource globale sont visibles pour les autres processus membres de l’espace de noms, mais invisibles pour les autres processus. Depuis la version 5.6 du noyau, il existe 8 types d’espaces de noms (Consulter namespaces(7), unshare(1), nsenter(1)).

À partir de Debian 11 Bullseye (2021), Debian utilise une hiérarchie de cgroups unifiée (c’est-à-dire cgroups-v2).

Voici des exemples d’utilisation des espaces de noms avec cgroups pour isoler leurs processus et permettre le contrôle des ressources :

- Systemd (consulter Section 3.3.1, « Initialisation avec Systemd ») ;

- environnement de bac sable ( consulter Section 7.7, « Bac à sable ») ;

- Conteneurs Linux tels que Docker, LXC (consulter Section 9.11, « Système virtualisé »).

Ces fonctionnalités ne peuvent pas être réalisées par la Section 4.1, « Authentification normale d’UNIX ». Ces sujets avancés sont pour la plupart hors du périmètre de ce document d’introduction.

Chapitre 3. Initialisation du système |  | Chapitre 5. Configuration du réseau