--- 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" >}} ---