---
date: 2017-07-28T12:56:04+02:00
description: "Comment sécuriser sa distribution GNU/Linux en durcissant le partitionnement"
draft: false
tags: ['Linux','Harden','partition']
title: "Durcir Linux : modifier le partitionnement"
---
## Description
Tout bon linuxien sait que le partitionnement système se gère à partir du
fichier `/etc/fstab`…
---
Modifions la configuration par défaut, qui utilise le drapeau `defaults`
concernant l'option de montage, pour être plus restrictif…
*ce qui aura pour avantage de compliquer la vie si jamais votre station ou serveur étaient infectés !*
{{< note warning >}}Toutes ces modifications sont des modifications système,
donc, sont à exécuter avec des droits administrateurs !{{}}
## Configuration
### /boot, /opt, /usr
Concernant le partitionnement lié à `/boot`, `/opt`, `/usr`, il est
intéressant de les monter en lecture seule et d'interdire les fichiers
périphériques nommés device, pour un serveur -
*sur une station, cela posera des difficultés ergonomiques indéniables*.
Ce qui donnerait à minima :
`UUID=97aabf8d-fa78-4176-b681-888370fbc186 /boot ext4 defaults,nodev,ro 0 2`
`UUID=20c0ddea-2db4-4ee5-982f-71b8df26c2fb /opt ext4 defaults,nodev,ro 0 2`
`UUID=d84f16a8-d107-49d7-992d-bd9e78488ffd /usr ext4 defaults,nodev,ro 0 2`
{{< note tip >}}
Étant donné ce que signifie la valeur `defaults`, soit `rw,suid,dev,exec,auto,nouser,async`,
on peut donc écrire les options `defaults,nodev,ro` par `async,auto,exec,nodev,nouser,ro,suid` !
{{}}
#### Mise en garde pour /boot, /opt, /usr
* Mettre l'accès en lecture `ro` sur les partitionnements `/boot` et sur `/usr`
posent quelques petits soucis.
* Quant à `/opt`, pour les rares fois, où c'est vraiment nécessaire, on
verra plus bas {{< anchor "comment permettre l'écriture" "remonter une partition" >}}, si besoin.
---
* ⇒ `/boot` : besoin d'un accès en écriture, lors du démarrage, pour l'environnement
lié à grub, et surtout du binaire `grub-editenv`… qui ne peut écrire
de fait ; résultat, il faut réécrire le fichier `/etc/fstab` avec
l'option `rw`.
Ouvrez le fichier `/etc/rc.local` - *du moins, pour Debian, \*Buntu,
et assimilés* - et écrivez dedans :
`mount -f -o remount,ro /boot`
* ⇒ `/usr` : besoin d'un accès en écriture, lors de mises-à-jour système,
principalement. Vous aurez le droit à la complainte suivante lors de
l'exécution de l'invocation *post* du gestionnaire de paquets *(**apt**,
**dpkg**, etc.)* :
`mount: /usr: point de montage actif.`
`E: Problem executing scripts DPkg::Post-Invoke 'mount -o remount,ro /usr'`
`E: Sub-process returned an error code`
Ce n'est absolument rien de grave ; il vous avertit juste qu'il n'est
pas capable de remonter `/usr` en lecture seule. À vous de voir si vous
voulez vraiment mettre `/usr` en lecture seule, et que ce message d'erreur
ne vous ennuie pas ; pour ne pas être embetter, mieux vaut laisser en `rw`.
---
Pour résoudre les problèmes ci-dessus, soit vous éditez le fichier `/etc/apt/apt.conf` -
*s'il existe* - soit vous créez un fichier, tel que `/etc/apt/apt.conf.d/00apt`,
et écrivez le code suivant :
`DPkg::Pre-Invoke {"mount -o remount,rw /boot";"mount -o remount,rw /opt"};`
`DPkg::Post-Invoke {"mount -o remount,ro /boot";"mount -o remount,ro /opt"};`
Ainsi les gestionnaires **apt**, **dpkg** doivent remonter les partitionnements
en question en écriture avant de faire la mise-à-jour système, et de le
remettre en lecture seulement, après…
#### Informations ANSSI pour /boot, /opt, /usr
Pour info, la documentation de l'ANSSI en Octobre 2015, à-propos de
configurer Linux de manière sécurisée,
informe que :
* `/boot` devrait avoir les options `nosuid,nodev,noexec` - *il est même
recommandé l'usage de l'option `noauto` de manière optionnelle, car
cela sous-tend qu'il faut comprendre les incidences et la gestion
générée d'ajouter cette dernière option !*
* `/opt` devrait avoir au moins les options `nosuid,nodev`
* `/usr` devrait avoir l'option, à minima, `nodev`
#### Incompatibilités logicielles connues
Il peut arriver que certains logiciels refusent de fonctionner. Réflexe :
exécutez-le depuis un terminal, et vérifiez son chemin d'exécution.
* `/opt` : **google-chrome** nécessite pour sa sandbox l'usage de l'option `suid`.
### /tmp
Occupons nous du partitionnement lié à `/tmp`, et déclarons l'option la
plus importante, dans ce cas `noexec`, parce que nous ne voulons pas que
n'importe qui se serve de ce répertoire pour lancer n'importe quoi :
`UUID=1a7a999d-1e26-45f7-96c0-7d381887350d /tmp ext4 defaults,nodev,noexec,nosuid 0 2`
#### Mise en garde pour /tmp
Le problème principal est le même que pour les options sur les partitionnements
`/boot`, et `/usr`, en mettant l'option `noexec`, lors des mises-à-jours
systèmes ou de l'installation d'un nouveau logiciel, cela **ne pourra pas
s’exécuter correctement** !
Il faut pour cela rajouter dans les invocations *pre* et *post* en
demandant de remonter le partitionnement `/tmp` avec les droits `exec`,
puis à les enlever après le traitement.
`DPkg::Pre-Invoke {"mount -o remount,rw /boot";"mount -o remount,rw /opt";"mount -o remount,exec /tmp"};`
`DPkg::Post-Invoke {"mount -o remount,ro /boot";"mount -o remount,ro /opt";"mount -o remount,noexec /tmp"};`
#### Informations ANSSI pour /tmp
La documentation ANSSI sur la configuration Linux recommande les options
`nosuid,nodev,noexec` pour la partition `/tmp`…
---
### /var, /var/log, /var/tmp
Et les partitions `/var`, `/var/log`, `/var/tmp` ?
* `/var` : On peut rajouter les options `grpquota,nodev,usrquota`…
`UUID=e47dcfed-0d0a-486f-8f1c-63f9e8132590 /var ext4 defaults,grpquota,nodev,usrquota 0 2`
{{< note danger >}}**ATTENTION, ce qui suit ne fonctionne pas avec SystemD !**{{}}
Quant au répertoire `/var/tmp`, il est intéressant de le supprimer, puis
de le lier vers le répertoire ou la partition `/tmp`, qui sera ainsi bien gérée.
`rm -rf /var/tmp`
`ln -s /tmp /var/tmp`
{{< note tip >}}Pensez à sauvegarder les fichiers dedans, pour les restaurer
ensuite… au besoin !{{}}
#### Informations ANSSI pour /var, /var/log, /var/tmp
La documentation ANSSI sur la configuration Linux recommande les options
`nosuid,nodev,noexec` pour toutes les partitions `/var`, `/var/log`,
`/var/tmp`…
{{< note warning >}}Attention à l'impact de l'usage de l'option `noexec`
sur la partition `/var`, qui empêchera la création de répertoires et fichiers
temporaires lors des mises-à-jours, par exemple !{{}}
---
### / la partition racine
Il est de bon ton, en terme de sécurité système, d'empêcher l'usage de **dev**
pour la racine système :
`UUID=7b8b0d04-7d60-44dd-98f3-6134065a42c3 / ext4 errors=remount-ro,nodev 0 1`
### /srv
Cette partition, dont le but actuel, est de "cloisonner" des services serveurs,
tels que web, base de données, a aussi sa propre recommandation de la part
de l'ANSSI :
* l'usage des options `nosuid,nodev` et de manière optionnelle, *si vous savez gèrer*,
les options `noexec,ro`…
*il est clair que l'option `ro` pose son lot de problèmes, ne serait-ce
que pour certains sites web qui ont besoin au moins d'un répertoire où écrire…
à moins que vous redirigez ce genre d'écritures !*
### /home
L'ANSSI recommande les options `nosuid,nodev,noexec`…
{{< note warning >}}Attention, toutefois, si vous utilisez le répertoire
`~/bin` qui, *dans les distributions telles que Debian, Ubuntu, (et assimilées)*,
est inclus dans la variable d'environnement `PATH`, puisque l'option `noexec`
vous empêchera d'exécuter tout binaire, même vos personnels !{{}}
### shm
**shm** est l'accronyme de *shared memory* ; en doux français : *mémoire partagée*.
Sécuriser le point de montage correspondant est intéressant, afin d'empêcher
l'attaque contre certains services par ce biais, tel que celui d'un serveur web, par exemple.
#### /run/shm
Si vous avez le répertoire `/run/shm`, configurez le fichier `/etc/fstab`, ainsi :
`tmpfs /run/shm tmpfs defaults,nodev,noexec,nosuid 0 0`
#### /dev/shm
Si vous n'avez que `/dev/shm`, qui normalement ne pointe pas vers `/run/shm`,
modifiez `/etc/fstab` en remplaçant `/run/shm`, par `/dev/shm`.
## Utilisation
### Remonter une partition
Bon, comme vous avez certainement dû le comprendre, pour remonter dynamiquement
un partitionnement, sans avoir à redémarrer le système, on utilise la commande
suivante - ***avec les droits administrateurs, bien sûr*** - :
`# mount -o remount,options /nom_partition`
Et si vous avez le droit à une erreur, telle que `/partitionnement busy`,
préférez redémarrer la machine !
## TLDR
### Fichier /etc/apt/apt.conf.d/00apt
Un exemple de fichier `/etc/apt/apt.conf.d/00apt` modifié selon les recommandations
ci-dessus :
{{< file "sec-linux-harden-partition-apt-conf-example" ini "/etc/apt/apt.conf.d/00apt" >}}
### Fichier /etc/fstab
Un exemple de fichier `/etc/fstab` modifié selon les recommandations ci-dessus :
{{< file "sec-linux-harden-partition-fstab-example" ini "/etc/fstab" >}}
---