Le chapitre précédent vous a permis de dresser l'inventaire des composants matériels de la machine. Dans ce chapitre, nous allons analyser un peu plus en détail le partitionnement et les systèmes de fichiers des périphériques de type bloc. Nous y verrons notamment les défauts de droits ainsi que les mauvaises options de montage des disques sur le système.
Auditez le partitionnement du disque dur
Le partitionnement des périphériques de type bloc s'effectue généralement lors de l'installation du système. Toutes les distributions Linux proposent un mode de partitionnement dit « automatique », qui a pour objectif de faciliter le processus d'installation. Le niveau de sécurité de ce mode automatique est faible.
Reprenons le disque sda détecté lors du chapitre précédent, et analysons son partitionnement avec la traditionnelle commande fdisk :
[root@fichesproduits ~]# fdisk -l Disque /dev/sda : 8589 Mo, 8589934592 octets, 16777216 secteurs Unités = secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Type d'étiquette de disque : dos Identifiant de disque : 0x000cfef5 Périphérique Amorçage Début Fin Blocs Id. Système /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 16777215 7339008 8e Linux LVM Disque /dev/mapper/centos_fichesproduits-root : 6652 Mo, 6652166144 octets, 12992512 secteurs Unités = secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets Disque /dev/mapper/centos_fichesproduits-swap : 859 Mo, 859832320 octets, 1679360 secteurs Unités = secteur de 1 × 512 = 512 octets Taille de secteur (logique / physique) : 512 octets / 512 octets taille d'E/S (minimale / optimale) : 512 octets / 512 octets [root@fichesproduits ~]#
Vous pouvez constater ici que le disque sda possède deux partitions : sda1 et sda2. La première dispose du flag d'amorçage et d'un système de fichier de type Linux (83), la seconde d'un fichier de type Linux LVM (8e).
Les deux paragraphes suivants indiquent la présence de deux volumes logiques LVM. Pour voir le mapping de ces deux volumes sur le partitionnement, utilisez la commande lsblk :
[root@fichesproduits ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 7G 0 part ├─centos_fichesproduits-root 253:0 0 6,2G 0 lvm / └─centos_fichesproduits-swap 253:1 0 820M 0 lvm [SWAP]
Les deux volumes logiques sont bien accrochés à la partition LVM.
Avant de revenir en détail sur le partitionnement actuel, vous pouvez d'ores et déjà relever un défaut de sécurité important avec la commande suivante :
[root@fichesproduits ~]# blkid /dev/sda2 /dev/sda2: UUID="mKkT60-aw2n-pcr0-032A-j0ru-gfRf-XBHbni" TYPE="LVM2_member" [root@fichesproduits ~]#
La commande blkid confirme que la partition sda2 est bien membre d'un groupe LVM, mais aussi qu'elle n'est pas chiffrée (sinon, le TYPE serait crypto_LUKS). Sur une machine sensible, il est très important de chiffrer les partitions afin de rendre illisible leur contenu, ce qui s'avère utile en cas de vol par exemple.
Ensuite, vous pouvez aussi constater que tout le système (sauf a priori le noyau) tient dans une seule partition. Or, le partitionnement doit permettre d'isoler les composants du système de fichiers. De cette façon, il n'est pas possible, pour une application quelconque, de saturer de fichiers la partition système et de provoquer une interruption du service.
Il est notamment recommandé d'isoler :
/boot : qui contient le noyau, comme c'est ici le cas ;
/tmp : qui dispose de droits spéciaux et concerne les fichiers temporaires ;
/home : qui contient les répertoires personnels des comptes utilisateurs ;
/var : qui contient les données dites « variables », notamment les applications web dans notre cas ;
/var/log : qui contient les fichiers de trace du système.
Auditez les options de montage des partitions
Cette partie de l'audit va être rapide parce qu'il y a seulement deux partitions, et que Linux propose des options pour les points de montage des partitions. Parmi les options les plus importantes, nous pouvons citer :
Option | Description |
---|---|
async/sync | Les entrées/sorties sont asynchrones/synchrones |
noauto/auto | Peut être montée automatiquement ou non |
dev/nodev | Supporte ou non les fichiers de type périphérique |
exec/noexec | Permet l'exécution ou non de fichier |
suid/nosuid | Compatible avec le bit S-[U/G]ID |
ro/rw | Lecture seule ou lecture/écriture |
user/nouser | Peut être montée par un utilisateur privilégié ou non |
Regardons cela en vidéo guidée !
Pour voir les options de montage de la partition principale, lancez la commande suivante :
[root@fichesproduits ~]# mount | grep /dev/mapper /dev/mapper/centos_fichesproduits-root on / type xfs (rw,relatime,attr2,inode64,noquota) [root@fichesproduits ~]#
Ces options sont regroupées dans un libellé defaults, indiqué notamment dans le fichier /etc/fstab. Celui-ci permet de monter automatiquement des systèmes de fichiers au démarrage.
[root@fichesproduits ~]# more /etc/fstab # # /etc/fstab # Created by anaconda on Wed Mar 27 09:29:55 2019 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos_fichesproduits-root / xfs defaults 0 0 UUID=02dc2283-eb61-43d6-9aa2-92be25654a26 /boot xfs defaults 0 0 /dev/mapper/centos_fichesproduits-swap swap swap defaults 0 0
Les options du libellé default sont : rw, suid, dev, exec, auto, nouser et async.
Si nous devions reprendre le partitionnement idéal évoqué ci-dessus, les options de montage recommandées seraient :
Montage | Option |
---|---|
/tmp | rw,nosuid,nodev,noexec |
/home | rw,nosuid,nodev,noexec |
/var | rw,nosuid,nodev,noexec,sync |
/var/log | rw,nosuid,nodev,noexec,sync |
Il n'y a pas d'intérêt à donner aux points de montage (du moins à la plupart d'entre eux) les droits de fichiers spéciaux, de montage de périphériques ou d'exécution. En effet, il existe des partitions spécifiques et normalisées pour ces fonctionnalités (/usr/lib, /mnt par exemple).
Vous remarquerez que je n'ai pas inclus /boot. Cette partition est effectivement particulière. Je vous propose de voir tout de suite en quoi elle est si spéciale.
Auditez /boot
/boot est une partition très sensible, car elle contient le noyau de Linux et la configuration dynamique de Grub. Voyez par vous-même en lançant la commande suivante :
[root@fichesproduits ~]# ls -lrtha /boot/ total 89M -rw-------. 1 root root 3,3M 20 avril 2018 System.map-3.10.0-862.el7.x86_64 -rw-r--r--. 1 root root 145K 20 avril 2018 config-3.10.0-862.el7.x86_64 -rw-r--r--. 1 root root 166 20 avril 2018 .vmlinuz-3.10.0-862.el7.x86_64.hmac -rwxr-xr-x. 1 root root 6,0M 20 avril 2018 vmlinuz-3.10.0-862.el7.x86_64 -rw-r--r--. 1 root root 298K 20 avril 2018 symvers-3.10.0-862.el7.x86_64.gz drwxr-xr-x. 3 root root 17 27 mars 09:30 efi drwxr-xr-x. 2 root root 27 27 mars 09:30 grub -rw-------. 1 root root 53M 27 mars 09:33 initramfs-0-rescue-743eb5ea9918447198668f35891e3d86.img -rwxr-xr-x. 1 root root 6,0M 27 mars 09:33 vmlinuz-0-rescue-743eb5ea9918447198668f35891e3d86 dr-xr-xr-x. 5 root root 4,0K 27 mars 09:34 . -rw-------. 1 root root 21M 27 mars 09:34 initramfs-3.10.0-862.el7.x86_64.img drwx------. 5 root root 97 27 mars 09:34 grub2 dr-xr-xr-x. 17 root root 233 27 mars 09:48 .. [root@fichesproduits ~]#
Le fichier System.map contient notamment la table des symboles utilisée par le noyau, c'est-à-dire la liste des variables et des fonctions associées à leurs adresses mémoire respectives. Bref, les pages jaunes du noyau en quelque sorte. Ce fichier est souvent la cible d'attaques visant à exploiter les failles dans le code du noyau.
Pour toutes ces raisons, la partition /boot doit bénéficier d'une attention particulière. Dans le meilleur des cas, il faut attribuer l'option noauto afin qu'elle ne soit pas montée automatiquement. Cependant, dans le cas où cette partition s'avérerait inévitable (par exemple pour changer de noyau), il faudrait alors la monter avec les options ro, nosuid, nodev, noexec, et la passer à rw pour l'utilisateur root uniquement lorsque nécessaire.
[root@fichesproduits ~]# ls -lrth / | grep boot dr-xr-xr-x. 5 root root 4,0K 27 mars 09:34 boot [root@fichesproduits ~]#
Ici, la partition /boot ne devrait être accessible qu'à l'utilisateur root.
En résumé
Analyser le partitionnement du système implique souvent de faire des recommandations critiques, notamment lorsque vous héritez d'une machine que nous n'avez pas installée vous-même.
De manière assez simple, il est possible de changer les options de montage dans le fichier /etc/fstab sans corrompre l'exploitation actuelle du serveur.... à condition qu'il y ait un minimum de partitions configurées. Dans le cas contraire, songez à ajouter un nouveau périphérique afin de créer les partitions/systèmes de fichiers et points de montage adaptés à votre besoin. Dans le chapitre suivant, nous allons étudier l'aspect utilisateurs, mot de passe et mise à jour de sécurité.