5.1 Leçon 1
Certification : |
Linux Essentials |
---|---|
Version : |
1.6 |
Thème : |
5 Sécurité et Permissions des Fichiers |
Objectif : |
5.1 Sécurité de Base et Identification des Types d’Utilisateurs |
Leçon : |
1 sur 1 |
Introduction
Cette leçon se concentrera sur la terminologie de base des comptes, des contrôles d’accès et de la sécurité des systèmes Linux locaux, sur les outils de l’interface en ligne de commande (CLI) dans un système Linux pour les contrôles d’accès de sécurité de base et sur les fichiers de base pour prendre en charge les comptes d’utilisateurs et les groupes, y compris ceux utilisés pour l’escalade des privilèges élémentaires.
La sécurité de base des systèmes Linux est modelée sur les contrôles d’accès Unix qui, bien que vieux de près de cinquante ans, sont assez efficaces par rapport à certains systèmes d’exploitation grand public populaires de lignée beaucoup plus récente. Même certains autres systèmes d’exploitation populaires basés sur Unix ont tendance à “prendre des libertés” qui sont axées sur la “facilité d’accès”, alors que Linux ne le fait pas.
Les environnements et interfaces modernes de bureau Linux simplifient la création et la gestion des utilisateurs et automatisent souvent l’attribution des contrôles d’accès lorsqu’un utilisateur se connecte, par exemple, à l’écran, l’audio et les autres services ne requière pratiquement aucune intervention manuelle de l’administrateur système. Toutefois, il est important de comprendre les concepts de base du système d’exploitation Linux sous-jacent.
Les Comptes
La sécurité implique de nombreux concepts, l’un des plus courants étant le concept général de contrôle d’accès. Avant de pouvoir aborder les contrôles d’accès aux fichiers tels que la propriété et les permissions, il faut comprendre les concepts de base des comptes utilisateurs Linux, qui sont répartis en plusieurs types.
Chaque utilisateur d’un système Linux a un compte associé qui, outre les informations de connexion (comme le nom d’utilisateur et le mot de passe), définit également comment et où l’utilisateur peut interagir avec le système. Les privilèges et les contrôles d’accès définissent les "limites" à l’intérieur desquelles chaque utilisateur peut opérer.
Les Identifiants (UIDs/GIDs)
Les identificateurs d’utilisateur et de groupe (UID/GID) sont les références de base, énumérées des comptes. Les premières versions étaient des nombres entiers limités à 16 bits (valeurs de 0 à 65535), mais les systèmes du 21e siècle prennent en charge les UID et GID de 64 bits. Les utilisateurs et les groupes sont énumérés indépendamment, de sorte que le même ID peut représenter à la fois un utilisateur et un groupe.
Chaque utilisateur dispose non seulement d’un UID, mais aussi d’un GID primaire. Le GID primaire d’un utilisateur peut être unique pour cet utilisateur seulement, et peut finir par ne pas être utilisé par d’autres utilisateurs. Toutefois, ce groupe peut également être un groupe partagé par de nombreux utilisateurs. En plus de ces groupes primaires, chaque utilisateur peut également être membre d’autres groupes.
Par défaut sur les systèmes Linux, chaque utilisateur est assigné à un groupe ayant le même nom que son nom d’utilisateur, et le même GID que son UID. Par exemple, créer un nouvel utilisateur nommé newuser
et, par défaut, son groupe par défaut est également newuser
.
Le Compte du Super-utilisateur
Sous Linux, le compte du super-utilisateur est root
, qui a toujours l’UID 0. Le super-utilisateur est parfois appelé l'administrateur du système, et a un accès et un contrôle illimités sur le système, y compris sur les autres utilisateurs.
Le groupe par défaut pour le super-utilisateur a le GID 0
et est également nommé root
. Le répertoire personnel du super-utilisateur est un répertoire dédié de premier niveau, /root
, accessible uniquement par l’utilisateur root lui-même.
Comptes d’Utilisateur Standard
Tous les comptes autres que le compte root
sont techniquement des comptes d’utilisateurs réguliers, mais sur un système Linux, le terme familier de compte d’utilisateur signifie souvent un compte d’utilisateur "régulier" (non privilégié). Ils ont généralement les propriétés suivantes, à quelques exceptions près :
-
Les UIDs commencent à 1000 (4 chiffres), bien que certains anciens systèmes puissent commencer à 500.
-
Un répertoire home défini, généralement un sous-répertoire de
/home
, en fonction de la configuration du site. -
Un shell de connexion défini. Sous Linux, le shell par défaut est généralement le Bourne Again Shell (
/bin/bash
), bien que d’autres shells puissent être disponibles.
Si un compte utilisateur ne dispose pas d’un shell valide dans ses attributs, l’utilisateur ne pourra pas ouvrir un shell interactif. Habituellement, /sbin/nologin
est utilisé comme shell non valide. Cela peut être utile, si l’utilisateur n’est authentifié que pour des services autres que l’accès à la console ou au SSH, par exemple un accès FTP sécurisé (sftp
) uniquement.
Note
|
Pour éviter toute confusion, le terme compte utilisateur ne s’appliquera qu’aux comptes utilisateurs standards ou réguliers à l’avenir. Par exemple, le terme compte système sera utilisé pour expliquer un compte utilisateur Linux qui est du type compte utilisateur système. |
Comptes du Système
Les comptes système sont généralement pré-créés au moment de l’installation du système. Ils sont destinés aux utilitaires, programmes et services qui ne sont pas exécutés par le super-utilisateur. Dans un monde idéal, il s’agirait d’utilitaires du système d’exploitation.
Les comptes du système varient, mais leurs attributs comprennent :
-
Les UID sont généralement inférieurs à 100 (2 chiffres) ou 500-1000 (3 chiffres).
-
Soit pas répertoire personnel dédié, soit un répertoire qui n’est généralement pas sous
/home
. -
Pas de shell de connexion valide (généralement
/sbin/nologin
), à de rares exceptions près.
La plupart des comptes système sous Linux ne se connecteront jamais et n’ont pas besoin d’un shell défini dans leurs attributs. De nombreux processus détenus et exécutés par les comptes système sont intégrés dans leur propre environnement par la direction du système, et fonctionnent avec le compte système spécifié. Ces comptes ont généralement des privilèges limités ou, le plus souvent, aucun privilège.
Note
|
Du point de vue du LPI Linux Essentials, les comptes système ont des UID <1000, avec des UID (et GID) à 2 ou 3 chiffres. |
En général, les comptes du système ne doivent pas avoir de shell de connexion valide. Le contraire serait un problème de sécurité dans la plupart des cas.
Comptes des Services
Les comptes de service sont généralement créés lorsque les services sont installés et configurés. Tout comme les comptes système, ils sont destinés aux installations, programmes et services qui ne s’exécuteront pas avec les privilèges du super-utilisateur.
Dans de nombreux documents, les comptes des systèmes et des services sont similaires et souvent interchangés. Cela inclut l’emplacement des répertoires personnels qui se trouvent généralement en dehors de /home
, s’ils sont définis (les comptes de service sont souvent plus susceptibles d’en avoir un, par rapport aux comptes système), et l’absence de shell de connexion valide. Bien qu’il n’y ait pas de définition stricte, la principale différence entre les comptes système et les comptes de service se résume à l’UID/GID.
- Compte du système
-
UID/GID <100 (2 chiffres) ou <500-1000 (3 chiffres)
- Compte de service
-
UID/GID >1000 (4+ chiffres), mais pas un compte utilisateur "standard" ou "régulier", un compte pour les services, avec un UID/GID >1000 (4+ chiffres)
Certaines distributions Linux ont encore des comptes de service réservés sous l’UID <100, et ceux-ci pourraient être considérés comme un compte système également, même s’ils ne sont pas créés lors de l’installation du système. Par exemple, sur les distributions Linux basées sur Fedora (y compris Red Hat), l’utilisateur du serveur web Apache a l’UID (et le GID) 48, ce qui est clairement un compte système, bien qu’il ait un répertoire personnel (généralement /usr/share/httpd
ou /var/www/html/
).
Note
|
Du point de vue de LPI Linux Essentials, les comptes système ont des UID <1000, et les comptes utilisateurs réguliers ont des UID > 1000. Comme les UID des comptes utilisateurs réguliers sont >1000, ces UID peuvent également inclure des comptes de services. |
Shells de Connexion et Répertoires Personnels
Certains comptes disposent d’un shell de connexion, tandis que d’autres n’en ont pas pour des raisons de sécurité car ils ne nécessitent pas d’accès interactif. Le shell de connexion par défaut sur la plupart des distributions Linux est le Bourne Again Shell, ou bash
, mais d’autres shells peuvent être disponibles, comme le C Shell (csh
), le Korn shell (ksh
) ou le Z shell (zsh
), pour n’en citer que quelques-uns.
Un utilisateur peut changer son shell de connexion en utilisant la commande chsh
. Par défaut, la commande s’exécute en mode interactif, et affiche une invite demandant quel shell doit être utilisé. La réponse doit être le chemin complet vers le binaire de l’interpréteur de commandes, comme ci-dessous :
$ chsh Changing the login shell for emma Enter the new value, or press ENTER for the default Login Shell [/bin/bash]: /usr/bin/zsh
Vous pouvez également exécuter la commande en mode non interactif, avec le paramètre -s
suivi du chemin vers le binaire, comme ceci :
$ chsh -s /usr/bin/zsh
La plupart des comptes ont un répertoire personnel défini. Sous Linux, c’est généralement le seul endroit où ce compte utilisateur a un accès en écriture garanti, à quelques exceptions près (par exemple, les zones de système de fichiers temporaires). Toutefois, certains comptes sont délibérément configurés de manière à ne pas avoir d’accès en écriture, même à leur propre répertoire d’origine, pour des raisons de sécurité.
Obtenir des Informations sur vos Utilisateurs
Lister les informations de base sur l’utilisateur est une pratique courante et quotidienne sur un système Linux. Dans certains cas, les utilisateurs devront changer d’utilisateur et augmenter leurs privilèges pour effectuer des tâches privilégiées.
Même les utilisateurs ont la possibilité de lister les attributs et d’y accéder à partir de la ligne de commande, en utilisant les commandes ci-dessous. Les informations de base dans un contexte limité ne constituent pas une opération privilégiée.
L’énumération des informations actuelles d’un utilisateur à la ligne de commande est aussi simple qu’une commande de deux lettres, id
. La sortie variera en fonction de votre ID de connexion :
$ id uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Dans la liste précédente, l’utilisateur (emma
) a des identifiants qui se répartissent comme suit :
-
1024
= ID utilisateur (UID), suivi du nom d’utilisateur (nom commun ou nom de connexion) entre parenthèses. -
1024
= l’ID de groupe primaire (GID), suivi du nom de groupe (nom commun) entre parenthèses. -
Une liste de GIDs (noms de groupes) supplémentaires auxquels l’utilisateur appartient également.
La liste des derniers utilisateurs connectés au système est obtenue avec la commande last
:
$ last emma pts/3 ::1 Fri Jun 14 04:28 still logged in reboot system boot 5.0.17-300.fc30. Fri Jun 14 04:03 still running reboot system boot 5.0.17-300.fc30. Wed Jun 5 14:32 - 15:19 (00:46) reboot system boot 5.0.17-300.fc30. Sat May 25 18:27 - 19:11 (00:43) reboot system boot 5.0.16-100.fc28. Sat May 25 16:44 - 17:06 (00:21) reboot system boot 5.0.9-100.fc28.x Sun May 12 14:32 - 14:46 (00:14) root tty2 Fri May 10 21:55 - 21:55 (00:00) ...
Les informations énumérées dans les colonnes peuvent varier, mais certaines entrées notables de la liste précédente le sont :
-
Un utilisateur (
emma
) s’est connecté via le réseau (pseudo TTYpts/3
) et est toujours connecté. -
L’heure du démarrage en cours est indiquée, ainsi que le noyau. Dans l’exemple ci-dessus, environ 25 minutes avant que l’utilisateur ne se connecte.
-
Le super-utilisateur (
root
) s’est connecté via une console virtuelle (TTYtty2
), brièvement, à la mi-mai.
Une variante de la commande last
est la commande lastb
, qui liste toutes les dernières tentatives de connexion échouées.
Les commandes who
et w
ne listent que les connexions actives sur le système :
$ who emma pts/3 2019-06-14 04:28 (::1) $ w 05:43:41 up 1:40, 1 user, load average: 0.25, 0.53, 0.51 USER TTY LOGIN@ IDLE JCPU PCPU WHAT emma pts/3 04:28 1:14m 0.04s 0.04s -bash
Les deux commandes listent certaines informations identiques. Par exemple, un utilisateur (emma
) est connecté avec un pseudo appareil TTY (pts/3
) et l’heure de connexion est 04:28.
La commande w
donne plus d’informations, dont les suivantes :
-
L’heure actuelle et depuis combien de temps le système est démarré
-
Combien d’utilisateurs sont connectés
-
Les moyennes de charge des 1, 5 et 15 dernières minutes
Et les informations complémentaires pour chaque session d’utilisateur actif.
-
Sélectionne, le temps total d’utilisation du CPU (
IDLE
,JCPU
etPCPU
) -
Le processus actuel (
-bash
). Le temps d’utilisation total de l’unité centrale de ce processus est le dernier élément (PCPU
).
Les deux commandes disposent d’autres options permettant de lister diverses informations supplémentaires.
Changement d’Utilisateur et Escalade des Privilèges
Dans un monde idéal, les utilisateurs n’auraient jamais besoin d’augmenter les privilèges pour accomplir leurs tâches. Le système fonctionnerait toujours "simplement" et tout serait configuré pour différents accès.
Heureusement pour nous, Linux fonctionne comme cela pour la plupart des utilisateurs qui ne sont pas administrateurs système, bien qu’ils suivent toujours le modèle de sécurité du moindre privilège.
Cependant, il existe des commandes qui permettent une escalade des privilèges en cas de besoin. Deux des plus importants sont su
et sudo
.
Sur la plupart des systèmes Linux actuels, la commande su
n’est utilisée que pour obtenir les privilèges de root, qui est l’utilisateur par défaut si un nom d’utilisateur n’est pas spécifié après le nom de la commande. Bien qu’elle puisse être utilisée pour passer à un autre utilisateur, ce n’est pas une bonne pratique : les utilisateurs doivent se connecter depuis un autre système, via le réseau, ou une console ou un terminal physique sur le système.
emma ~$ su - Password: root ~#
Après avoir entré le mot de passe du super-utilisateur (root
), l’utilisateur dispose d’un shell super-utilisateur (notez le #
à la fin de l’invite de commande) et est, à toutes fins utiles, le super-utilisateur (root
).
Le partage des mots de passe est une très mauvaise pratique de sécurité, il ne devrait donc y avoir que très peu, voire pas du tout, de besoin de la commande su
dans un système Linux moderne.
Le symbole du dollar ($
) devrait terminer l’invite de la ligne de commande pour un shell utilisateur non privilégié, tandis que le symbole dièse (#
) devrait terminer l’invite de la ligne de commande pour le shell du super-utilisateur (root
). Il est fortement recommandé de ne jamais modifier le caractère final d’une invite par rapport à cette norme "universellement comprise", car cette nomenclature est utilisée dans les supports d’apprentissage, y compris ceux-ci.
Ne passez jamais au super-utilisateur (root
) sans passer par le paramètre login shell (-
). Sauf indication contraire explicite du système d’exploitation ou du fournisseur de logiciels lorsque su
est requis, exécutez toujours su -
avec des exceptions extrêmement limitées. Les environnements utilisateurs peuvent causer des changements de configuration et des problèmes indésirables lorsqu’ils sont utilisés en mode de privilèges complets en tant que super-utilisateur.
Quel est le principal problème lié à l’utilisation de su
pour passer au super-utilisateur (root
) ? Si la session d’un utilisateur normal a été compromise, le mot de passe du super-utilisateur (root) pourrait être saisi. C’est là qu’intervient le “Switch User Do” (ou “Superuser Do”) :
$ cat /sys/devices/virtual/dmi/id/board_serial cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied $ sudo cat /sys/devices/virtual/dmi/id/board_serial [sudo] password for emma: /6789ABC/
Dans la liste précédente, l’utilisateur tente de rechercher le numéro de série de sa carte système. Toutefois, la permission est refusée, car cette information est marquée comme étant privilégiée.
Cependant, en utilisant sudo
, l’utilisateur entre son propre mot de passe pour s’authentifier. S’il a été autorisé dans la configuration de sudoers
à exécuter cette commande avec privilège, avec les options autorisées, cela fonctionnera.
Par défaut, la première commande sudo
autorisée authentifiera les commandes sudo
suivantes pendant une période (très courte). Ceci est configurable par l’administrateur du système.
Les Fichiers de Contrôle d’Accès
Presque tous les systèmes d’exploitation ont un ensemble d’endroits utilisés pour stocker les contrôles d’accès. Sous Linux, il s’agit généralement de fichiers texte situés dans le répertoire /etc
, qui est l’endroit où les fichiers de configuration du système doivent être stockés. Par défaut, ce répertoire est lisible par tous les utilisateurs du système, mais il n’est accessible en écriture que par root
.
Les principaux fichiers relatifs aux comptes utilisateurs, aux attributs et au contrôle d’accès sont les suivants
/etc/passwd
-
Ce fichier contient des informations de base sur les utilisateurs du système, notamment l’UID et le GID, le répertoire personnel, le shell, etc. Malgré son nom, aucun mot de passe n’y est stocké.
/etc/group
-
Ce fichier contient des informations de base sur tous les groupes d’utilisateurs du système, comme le nom du groupe, le GID et les membres.
/etc/shadow
-
C’est là que les mots de passe des utilisateurs sont stockés. Ils sont hachés, pour des raisons de sécurité.
/etc/gshadow
-
Ce fichier contient des informations plus détaillées sur les groupes, notamment un mot de passe haché qui permet aux utilisateurs de devenir temporairement membres du groupe, une liste des utilisateurs qui peuvent devenir membres du groupe à un moment donné et une liste des administrateurs du groupe.
Ces fichiers ne sont pas conçus pour être édités directement et ne doivent jamais l’être. Cette leçon ne porte que sur les informations stockées dans ces fichiers, et non sur l’édition de ces fichiers.
Par défaut, chaque utilisateur peut entrer dans /etc
et lire les fichiers /etc/passwd
et /etc/group
. Et aussi par défaut, aucun utilisateur, à l’exception de root
, ne peut lire les fichiers /etc/shadow
ou /etc/gshadow
.
Il y a aussi des fichiers impliqués dans l’escalade des privilèges de base sur les systèmes Linux, comme les commandes su
et sudo
. Par défaut, ces fichiers ne sont accessibles qu’à l’utilisateur root
.
/etc/sudoers
-
Ce fichier contrôle qui peut utiliser la commande
sudo
, et comment. /etc/sudoers.d
-
Ce répertoire peut contenir des fichiers qui complètent les paramètres du fichier
sudoers
.
Du point de vue de l’examen LPI Linux Essentials, il suffit de connaître le chemin et le nom du fichier de configuration sudo par défaut, /etc/sudoers
. Sa configuration dépasse le cadre de ces documents.
Même si /etc/sudoers
est un fichier texte, il ne doit jamais être édité directement. Si des modifications de son contenu sont nécessaires, elles doivent être effectuées à l’aide de l’utilitaire visudo
.
/etc/passwd
Le fichier /etc/passwd
est communément appelé “fichier de mots de passe”. Chaque ligne contient plusieurs champs toujours délimités par deux points (:
). Malgré son nom, le hachage de mot de passe à sens unique n’est pas actuellement stocké dans ce fichier.
La syntaxe typique pour une ligne de ce fichier est :
USERNAME:PASSWORD:UID:GID:GECOS:HOMEDIR:SHELL
Où :
USERNAME
-
Le nom d’utilisateur alias login (nom), comme
root
,nobody
,emma
. PASSWORD
-
Ancien emplacement du hachage du mot de passe. Presque toujours
x
, indiquant que le mot de passe est stocké dans le fichier/etc/shadow
. UID
-
ID utilisateur (UID), comme
0
,99
,1024
. GID
-
ID de groupe par défaut (GID), comme
0
,99
,1024
. GECOS
-
Une liste CSV d’informations sur l’utilisateur comprenant le nom, la localisation, le numéro de téléphone. Par exemple :
Emma Smith,42 Douglas St,555.555.5555
HOMEDIR
-
Chemin d’accès au répertoire personnel de l’utilisateur, comme
/root
,/home/emma
, etc. SHELL
-
Le shell par défaut pour cet utilisateur, comme
/bin/bash
,/sbin/nologin
,/bin/ksh
, etc.
Par exemple, la ligne suivante décrit l’utilisateur emma
:
emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
Comprendre le Champ GECOS
Le champ GECOS contient trois (3) champs ou plus, délimités par une virgule (,
), c’est-à-dire une liste de Comma Separated Values (CSV). Bien qu’il n’y ait pas de norme appliquée, les champs sont généralement dans l’ordre suivant :
NAME,LOCATION,CONTACT
Où :
NAME
-
est le "Nom complet" de l’utilisateur, ou le "Nom du logiciel" dans le cas d’un compte de service.
LOCATION
-
est généralement l’emplacement physique de l’utilisateur dans un bâtiment, le numéro de salle ou le service ou la personne de contact dans le cas d’un compte de service.
CONTACT
-
contient des informations de contact telles que le numéro de téléphone du domicile ou du travail.
Les champs supplémentaires peuvent comprendre des informations de contact supplémentaires, telles qu’un numéro de domicile ou une adresse électronique. Pour modifier les informations du champ GECOS, utilisez la commande chfn
et répondez aux questions, comme ci-dessous. Si aucun nom d’utilisateur n’est fourni après le nom de la commande, vous modifierez les informations concernant l’utilisateur courant :
$ chfn Changing the user information for emma Enter the new value, or press ENTER for the default Full Name: Emma Smith Room Number []: 42 Work Phone []: 555.555.5555 Home Phone []: 555.555.6666
/etc/group
Le fichier /etc/group
contient des champs toujours délimités par deux points (:
), stockant des informations de base sur les groupes du système. Il est parfois appelé "fichier de groupe". La syntaxe de chaque ligne est :
NAME:PASSWORD:GID:MEMBERS
Où :
NAME
-
est le nom du groupe, comme
root
,users
,emma
, etc. PASSWORD
-
l’ancien emplacement d’un hachage de mot de passe de groupe facultatif. Presque toujours
x
, indiquant que le mot de passe (s’il est défini) est stocké dans le fichier/etc/gshadow
. GID
-
Group ID (GID), comme
0
,99
,1024
. MEMBERS
-
une liste de noms d’utilisateurs séparés par des virgules qui sont membres du groupe, comme
jsmith
,emma
.
L’exemple ci-dessous montre une ligne contenant des informations sur le groupe students
:
students:x:1023:jsmith,emma
L’utilisateur n’a pas besoin d’être listé dans le champ "membres" lorsque le groupe est le groupe principal d’un utilisateur. Si l’utilisateur est listé, alors c’est une information redondante, listé ou non cela n’a pas d’effet sur la fonctionnalité.
Note
|
L’utilisation de mots de passe pour les groupes dépasse le cadre de cette section, mais si elle est définie, le hachage du mot de passe est stocké dans le fichier |
/etc/shadow
Le tableau suivant énumère les attributs stockés dans le fichier /etc/shadow
, communément appelé “fichier shadow”. Le fichier contient des champs toujours délimités par deux points (:
). Bien que le fichier comporte de nombreux champs, la plupart d’entre eux, à l’exception des deux premiers, dépassent le cadre de cette leçon.
La syntaxe de base pour une ligne de ce fichier est :
USERNAME:PASSWORD:LASTCHANGE:MINAGE:MAXAGE:WARN:INACTIVE:EXPDATE
Où :
USERNAME
-
Le nom d’utilisateur (identique à
/etc/passwd
), commeroot
,nobody
,emma
. PASSWORD
-
Un hachage à sens unique du mot de passe, y compris le sel précédent. Par exemple :
!!
,!$1$01234567$ABC…
,$6$012345789ABCDEF$012…
. LASTCHANGE
-
Date du dernier changement de mot de passe en jours depuis l'“époque”, comme
17909
. MINAGE
-
Âge minimum du mot de passe en jours.
MAXAGE
-
Âge maximum du mot de passe en jours.
WARN
-
Période d’avertissement avant l’expiration du mot de passe, en jours.
INACTIVE
-
Âge maximum du mot de passe après expiration, en jours.
EXPDATE
-
Date d’expiration du mot de passe, en jours depuis l'“époque”.
Dans l’exemple ci-dessous, vous pouvez voir un exemple d’entrée du fichier /etc/shadow
. Notez que certaines valeurs, comme INACTIVE
et EXPDATE
, sont indéfinies.
emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::
L'“époque” d’un système POSIX est minuit (0000), temps universel coordonné (UTC), le jeudi 1er janvier 1970. La plupart des dates et heures POSIX sont en secondes depuis l'"époque", ou dans le cas du fichier /etc/shadow
, en jours depuis l'“époque”.
Note
|
Le fichier shadow est conçu pour être uniquement lisible par le super-utilisateur et certains services d’authentification du système de base qui vérifient le hachage du mot de passe à sens unique lors de la connexion ou à un autre moment de l’authentification. |
Bien qu’il existe différentes solutions d’authentification, la méthode élémentaire de stockage des mots de passe est la fonction de hachage à sens unique. Ainsi, le mot de passe n’est jamais stocké en clair sur un système, car la fonction de hachage n’est pas réversible. Vous pouvez transformer un mot de passe en un hachage, mais (idéalement) il n’est pas possible de retransformer un hachage en un mot de passe.
Tout au plus, une méthode de force brute est nécessaire pour hacher toutes les combinaisons d’un mot de passe, jusqu’à ce que l’une d’entre elles corresponde. Pour éviter qu’un hachage de mot de passe ne soit craqué sur un système, les systèmes Linux utilisent un "sel" aléatoire sur chaque hachage de mot de passe pour un utilisateur. Ainsi, le hachage du mot de passe d’un utilisateur sur un système Linux ne sera généralement pas le même que sur un autre système Linux, même si le mot de passe est identique.
Dans le fichier /etc/shadow
, le mot de passe peut prendre plusieurs formes. Ces formes sont généralement les suivantes :
!!
-
Cela signifie un compte "désactivé" (aucune authentification possible), sans hachage de mot de passe.
!$1$01234567$ABC…
-
Un compte “désactivé” (en raison du point d’exclamation initial), avec une fonction de hachage préalable, un sel de hachage et une chaîne de hachage stockés.
$1$0123456789ABC$012…
-
Un compte “activé”, avec une fonction de hachage, un sel de hachage et une chaîne de hachage stockée.
La fonction de hachage, le sel de hachage et la chaîne de hachage sont précédés et délimités par un symbole de dollar ($
). La longueur du sel de hachage doit être comprise entre huit et seize (8-16) caractères. Voici des exemples des trois les plus courants :
$1$01234567$ABC…
-
Une fonction de hachage du MD5 (
1
), avec un exemple de longueur de hachage de huit. $5$01234567ABCD$012…
-
Une fonction de hachage de SHA256 (
5
), avec un exemple de longueur de hachage de douze. $6$01234567ABCD$012…
-
Une fonction de hachage de SHA512 (
6
), avec un exemple de longueur de hachage de douze.
Note
|
La fonction de hachage du MD5 est considérée comme peu sûre sur le plan cryptographique avec le niveau actuel (années 2010 et suivantes) de performances des ASIC et même des SIMD informatiques générales. Par exemple, les normes fédérales américaines de traitement de l’information (FIPS) ne permettent pas l’utilisation du MD5 pour des fonctions cryptographiques, seulement pour des aspects très limités de la validation, mais pas pour l’intégrité des signatures numériques ou à des fins similaires. |
Du point de vue des objectifs et de l’examen des LPI Linux Essentials, il suffit de comprendre que le hachage du mot de passe d’un utilisateur local n’est stocké que dans le fichier /etc/shadow
que seuls les services d’authentification peuvent lire, ou que le super utilisateur peut modifier via d’autres commandes.
Exercices Guidés
-
Considérez la sortie suivante de la commande
id
:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
Dans quels fichiers sont stockés les attributs suivants ?
UID et GID
Groupes
-
En outre, dans quel fichier le mot de passe de l’utilisateur est-il stocké ?
-
-
Parmi les types de cryptographie suivants, lequel est utilisé par défaut pour stocker les mots de passe localement sur un système Linux ?
-
Asymétrique
-
Hachage à sens unique
-
Symétrique
-
ROT13
-
-
Si un compte a un User ID (UID) inférieur à 1000, de quel type de compte s’agit-il ?
-
Comment obtenir une liste des connexions actives dans votre système, ainsi qu’un décompte de celles-ci ?
-
En utilisant la commande
grep
, nous avons obtenu le résultat ci-dessous avec des informations sur l’utilisateuremma
.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Remplissez les blancs du tableau avec les informations appropriées en utilisant la sortie de la commande précédente.
Nom d’utilisateur
Mot de passe
UID
GID primaire
GECOS
Répertoire personnel
Shell
Exercices d’Exploration
-
Comparez les résultats de
last
àw
etwho
. Quels sont les détails qui manquent à chacune des commandes comparées les unes aux autres ? -
Essayez les commandes
who
etw -his
.-
Quelles informations ont été supprimées de la sortie de la commande
w
avec les options “no header” (-h
) et “short” (-s
) ?
-
-
Quelles informations ont été ajoutées dans la sortie de la commande
w
avec l’option “ip address” (-i
) ? -
Quel est le fichier qui stocke le hachage du mot de passe à sens unique d’un compte utilisateur ?
-
Quel fichier contient la liste des groupes dont un compte utilisateur est membre ? Quelle logique pourrait être utilisée pour dresser la liste des groupes dont un compte utilisateur est membre ?
-
Un ou plusieurs (1+) des fichiers suivants ne sont pas lisibles par les utilisateurs réguliers, non privilégiés, par défaut. Lesquels ?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
-
-
Comment changer le shell de connexion de l’utilisateur actuel pour le Korn Shell (
/usr/bin/ksh
) en mode non-interactif ? -
Pourquoi le répertoire d’origine de l’utilisateur
root
n’est-il pas placé dans le répertoire/home
?
Résumé
Dans cette leçon, nous avons découvert les bases de données des utilisateurs et des groupes de Linux. Nous avons appris les propriétés les plus importantes des utilisateurs et des groupes, y compris leurs noms et leurs identifiants numériques. Nous avons également étudié le fonctionnement du hachage des mots de passe sous Linux et la manière dont les utilisateurs sont affectés à des groupes.
Toutes ces informations sont stockées dans les quatre fichiers suivants, qui fournissent les contrôles d’accès de sécurité locaux les plus élémentaires sur un système Linux :
/etc/passwd
-
Tous les attributs POSIX du compte utilisateur local du système, autres que le hachage du mot de passe, lisibles par tous.
/etc/group
-
Tous les attributs POSIX des comptes de groupe système-local, lisibles par tous.
/etc/shadow
-
Tous les hashs de mots de passe des utilisateurs locaux du système (et les informations d’expiration), illisibles par n’importe qui (seulement certains processus).
/etc/sudoers
-
Toutes les informations relatives à l’escalade des privilèges au niveau du système local/autorisable par la commande
sudo
.
Les commandes suivantes ont été abordées dans cette leçon :
id
-
Liste les identifiants réels (ou effectifs) des utilisateurs et des groupes.
last
-
Liste des utilisateurs qui se sont connectés en dernier.
who
-
Liste des utilisateurs qui sont actuellement connectés.
w
-
Semblable à
who
mais avec un contexte supplémentaire. su
-
Change d’utilisateur avec un shell de connexion, ou exécute des commandes comme cet utilisateur, en lui transmettant son mot de passe.
sudo
-
Switch User (ou Superuser) Do : si l’utilisateur actuel y a droit, il doit entrer son propre mot de passe (si nécessaire) afin de soulever le privilège.
chsh
-
Change le shell d’un utilisateur.
chfn
-
Modifie les informations de l’utilisateur sur le champ GECOS.
Réponses aux Exercices Guidés
-
Considérez la sortie suivante de la commande
id
:$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
Dans quels fichiers sont stockés les attributs suivants ?
UID et GID
/etc/passwd
Groupes
/etc/group
-
En outre, dans quel fichier le mot de passe de l’utilisateur est-il stocké ?
Le mot de passe utilisateur haché est stocké dans
/etc/shadow
.
-
-
Parmi les types de cryptographie suivants, lequel est utilisé par défaut pour stocker les mots de passe localement sur un système Linux ?
Par défaut, un hachage à sens unique est utilisé pour stocker les mots de passe.
-
Si un compte a un User ID (UID) inférieur à 1000, de quel type de compte s’agit-il ?
Les comptes dont l’UID est inférieur à 1000 sont généralement des comptes système.
-
Comment obtenir une liste des connexions actives dans votre système, ainsi qu’un décompte de celles-ci ?
Utilisez la commande
w
. Outre une liste de toutes les connexions actives, elle affichera également des informations telles que le nombre d’utilisateurs connectés, la charge du système et le temps de fonctionnement. -
En utilisant la commande
grep
, nous avons obtenu le résultat ci-dessous avec des informations sur l’utilisateuremma
.$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
Remplissez les blancs du tableau avec les informations appropriées en utilisant la sortie de la commande précédente.
Nom d’utilisateur
emma
Mot de passe
x
doit toujours êtrex
pour une connexion d’utilisateur valide et activeUID
1000
GID primaire
1000
GECOS
Emma Smith,42 Douglas St,555.555.5555
Répertoire personnel
/home/emma
Shell
/bin/ksh
Réponses aux Exercices d’Exploration
-
Comparez les résultats de
last
àw
etwho
. Quels sont les détails qui manquent à chacune des commandes comparées les unes aux autres ?Les outils
w
etwho
n’affichent que les utilisateurs actuels connectés au système, tandis quelast
affiche également les utilisateurs qui se sont déconnectés. La commandew
liste l’utilisation du système, tandis quewho
ne le fait pas. -
Essayez les commandes
who
etw -his
. -
Quelles informations ont été supprimées de la sortie de la commande
w
avec les options “no header” (-h
) et “short” (-s
) ?L’en-tête n’est pas affiché, ce qui est utile pour l’analyse, l’heure de connexion et les informations sélectionnées relatives au CPU ne sont pas indiquées, respectivement.
-
Quelles informations ont été ajoutées dans la sortie de la commande
w
avec l’option “ip address” (-i
) ?Cela permet d’afficher l’adresse IP, au lieu de tenter une résolution DNS, en affichant le nom d’hôte. Cette option permet de mieux correspondre à la sortie par défaut de la commande
last
.
-
-
Quel est le fichier qui stocke le hachage du mot de passe à sens unique d’un compte utilisateur ?
Le fichier
/etc/shadow
stocke le hachage du mot de passe à sens unique d’un compte utilisateur, puisqu’il n’est pas lisible par un compte utilisateur normal, non privilégié, contrairement au fichier/etc/passwd
. -
Quel fichier contient la liste des groupes dont un compte utilisateur est membre ? Quelle logique pourrait être utilisée pour dresser la liste des groupes dont un compte utilisateur est membre ?
Le fichier
/etc/group
contient une liste CSV des noms d’utilisateurs dans le dernier champ, “members”, de n’importe quelle ligne d’un groupe.Toute ligne du fichier
/etc/group
où l’utilisateur est listé dans le dernier champ, “members”, signifierait que l’utilisateur est membre de ce group en supposant qu’il est correctement formaté (délimité par CSV). En outre, l’appartenance principale de l’utilisateur à un groupe dans le fichier/etc/passwd
aura également une entrée correspondante dans le fichier/etc/group
pour le nom du groupe et le GID. -
Un ou plusieurs (1+) des fichiers suivants ne sont pas lisibles par les utilisateurs réguliers, non privilégiés, par défaut. Lesquels ?
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
Les fichiers
/etc/shadow
et/etc/sudoers
ne sont pas lisibles par défaut, sauf par certains services ou le super-utilisateur. Ils seront personnalisés, en fonction des systèmes et des noms d’utilisateur utilisés dans le laboratoire.
-
-
Comment changer le shell de connexion de l’utilisateur actuel pour le Korn Shell (
/usr/bin/ksh
) en mode non-interactif ?$ chsh -s /usr/bin/ksh
-
Pourquoi le répertoire personnel de l’utilisateur
root
n’est-il pas placé dans le répertoire/home
?Parce que le compte
root
est nécessaire pour dépanner et corriger les erreurs, qui peuvent inclure des problèmes de système de fichiers liés au répertoire/home
. Dans ce cas, le compteroot
doit être pleinement fonctionnel même si le système de fichiers /home n’est pas encore disponible.