• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 28/11/2019

Auditez les composants matériels

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Dans la partie précédente, nous avons audité le processus de démarrage du serveur et émis des recommandations pour le sécuriser. Considérons que ces recommandations sont appliquées et penchons-nous à présent sur le système. Dans ce chapitre, nous allons prendre connaissance de la machine en auditant ses composants matériels : CPU, Disque et Mémoire.

Auditez les composants CPU de la machine

Lors de la prise en main d'une machine que vous ne connaissez pas, il paraît important de dresser un petit inventaire du matériel.

Concernant le CPU, Linux met à notre disposition plusieurs commandes pour relever l'architecture et le composant matériel : dmesg ou more /proc/cpuinfo

Dans un premier temps, consultons les traces du processus de démarrage de la machine que le noyau a laissées et voyons comment Linux perçoit le CPU, grâce à la commande suivante :

[root@fichesproduits ~]# dmesg | grep CPU
[ 0.000000] CPU MTRRs all blank - virtualized system.
[ 0.000000] ACPI: SSDT 000000003fff02a0 001CC (v01 VBOX VBOXCPUT 00000002 INTL 20100528)
[ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs
[ 0.000000] setup_percpu: NR_CPUS:5120 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1
[ 0.000000] PERCPU: Embedded 35 pages/cpu @ffff9326ffc00000 s104856 r8192 d30312 u2097152
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[ 0.000000] RCU restricting CPUs from NR_CPUS=5120 to nr_cpu_ids=1.
[ 0.029375] CPU: Physical Processor ID: 0
[ 0.030343] mce: CPU supports 0 MCE banks
[ 0.086315] smpboot: CPU0: Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz (fam: 06, model: 9e, stepping: 0a)
[ 0.182324] Performance Events: unsupported p6 CPU model 158 no PMU driver, software events only.
[ 0.184102] Brought up 1 CPUs
[ 0.485378] microcode: CPU0 sig=0x906ea, pf=0x2, revision=0x0

Ici, cette commande nous indique que le CPU est virtualisé et repose sur un composant matériel de type Intel i9 à 2,9 GHz. La machine dispose donc d'un seul CPU.

Le noyau maintient également quelques variables relatives au CPU sur son système de fichier virtuel /proc/. Vous pouvez lister ces variables avec la commande suivante :

[root@fichesproduits ~]# more /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 158
model name : Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
stepping : 10
cpu MHz : 2904.000
cache size : 12288 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 22
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse
3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed clflushopt
bogomips : 5808.00
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:

Parmi ces variables, nous pouvons notamment relever :

Variable

Description

processor

Le numéro du processeur

cpu family

La famille du processeur (ici 6, héritage des Pentium Pro)

model name

Le nom du modèle

cpu MHz

Sa fréquence précise

flags

Une liste d'attributs associés au CPU

Ici, ce qui est important est de remarquer, dans les flags, la présence de PAE et NX. Ces deux attributs indiquent que le processeur protège l'exécution d'instructions stockées dans les régions mémoire non autorisées.

Par exemple, avec la commande suivante :

[root@fichesproduits ~]# grep ^flags /proc/cpuinfo | head -n1 | egrep --color=auto ' (pae|nx) '
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc pni pclmulqdq monitor ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase avx2 invpcid rdseed clflushopt
[root@fichesproduits ~]#

Cette commande filtre le contenu du fichier /proc/cpuinfo sur les lignes contenant le mot-clé flags.

Auditez les composants mémoire de la machine

Passons désormais aux composants mémoire. Le noyau laisse aussi une trace des composants mémoire qu'il sollicite au démarrage :

[root@fichesproduits ~]# dmesg | grep Memory
[ 0.000000] Memory: 991412k/1048512k available (7324k kernel code, 392k absent, 56708k reserved, 6305k data, 1832k init)
[root@fichesproduits ~]#

Cette commande permet de connaître la quantité de mémoire disponible et la quantité de mémoire totale présentes sur le système. Celle-ci est exprimée en Ko. Comme vous pouvez le constater, le démarrage mobilise quelques Ko. C'est tout à fait normal. Remarquez cependant que la quantité utilisée est très faible.

Le noyau affiche ensuite les statistiques d'occupation des ressources mémoire en temps réel, dans le fichier /proc/meminfo :

[root@fichesproduits ~]# cat /proc/meminfo
MemTotal: 1015508 kB
MemFree: 672608 kB
MemAvailable: 678432 kB
Buffers: 2108 kB
Cached: 118560 kB
SwapCached: 0 kB
Active: 152884 kB
...
DirectMap4k: 24512 kB
DirectMap2M: 1024000 kB
[root@fichesproduits ~]#

Diverses commandes de Linux permettent de trier les informations de ce fichier, comme par exemple freevmstattop.

J'utilise assez souvent la commande suivante :

# Mémoire vive
[root@fichesproduits ~]# vmstat -s | grep memory
1015508 K total memory
170684 K used memory
154328 K active memory
94916 K inactive memory
670736 K free memory
2108 K buffer memory
[root@fichesproduits ~]#

La mémoire SWAP permet d'ajouter au noyau un périphérique de type bloc (stocké sur le disque dur) pour écrire et lire les pages mémoire au cas où la mémoire vive serait saturée. Cette fonctionnalité était primordiale lorsque les ressources physiques des machines étaient limitées ou lorsque le prix de la mémoire vive était élevé. Aujourd'hui, la mémoire vive est moins chère et les systèmes peuvent gérer plusieurs dizaines de Go sans problème. Quoi qu'il en soit, il est toujours important de conserver un minimum de SWAP, ne serait-ce que pour compenser un bug qui viendrait manger toute la mémoire vive... et ainsi éviter ainsi un crash du système.

Par exemple, avec la commande suivante :

# SWAP
[root@fichesproduits ~]# vmstat -s | grep swap
171980 K swap cache
839676 K total swap
0 K used swap
839676 K free swap
0 pages swapped in
0 pages swapped out

Auditez les composants DISK de la machine

À nouveau, faisons l'inventaire des traces laissées par le noyau lors du démarrage :

[root@fichesproduits ~]# dmesg | grep disk
[ 0.495770] systemd[1]: Running in initial RAM disk.
[ 1.379411] sd 0:0:0:0: [sda] Attached SCSI disk
[root@fichesproduits ~]#

Le noyau détecte un disque de type SCSI, comme souvent dans le cas d'une virtualisation.

Ici, pas de recommandation particulière : la présence d'un périphérique de type bloc est chose commune pour un système Linux. Les choses se compliquent lorsqu'il s'agit de sécuriser son accès. C'est l'objet du chapitre suivant.

En résumé

Dans ce chapitre, nous avons pris connaissance de la machine en effectuant un petit audit de ses composants CPU, Mémoire et Disque. Deux recommandations ont été émises, notamment sur le CPU et la mémoire. Dans le cas du disque, c'est souvent le partitionnement et les options associées qui posent problème. Je vous propose d'étudier cet aspect dans le chapitre suivant.

Exemple de certificat de réussite
Exemple de certificat de réussite