Durcir Linux : modifier le partitionnement

Article publié, le et modifié le
7 minute(s) de lecture

Cet article contient 1361 mots.
Source brute de l'article : MD

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 !

Attention

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

Astuce

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 comment permettre l'écriture , 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

Danger

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

Astuce

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

Attention

/ 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

Attention

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 :

Fichier : /etc/apt/apt.conf.d/00apt

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
DPkg::Pre-Invoke{
	"mount -o remount,rw /boot";
	"mount -o remount,exec /tmp";
	"mount -o remount,exec /var";
};
DPkg::Post-Invoke {
	"mount -o remount,ro /boot";
	"mount -o remount,noexec /tmp";
	"mount -o remount,noexec /var";
};

Fichier /etc/fstab

Un exemple de fichier /etc/fstab modifié selon les recommandations ci-dessus :

Fichier : /etc/fstab

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
UUID=6a45556d-df24-4fa5-97fd-5761935c7cfe /               ext4    errors=remount-ro,nodev 0       1
# /boot was on /dev/sda11 during installation
UUID=e703ff5e-8dd8-430b-b336-c2021477f2cf /boot           ext4    defaults,nodev,noexec,nosuid        0       2
# /boot/efi was on /dev/sda1 during installation
UUID=634A-AB2B  /boot/efi       vfat    umask=0077      0       1
# /home was on /dev/sda10 during installation
UUID=d51067e6-899d-4455-bb87-62ec74e75418 /home           ext4    defaults,nodev,nosuid        0       2
# /opt was on /dev/sda9 during installation
UUID=ed5f8cdc-5298-485e-aaa0-52603440f129 /opt            ext4    defaults,nodev,nosuid        0       2
# /tmp was on /dev/sda8 during installation
UUID=0f78ac20-f350-4a1b-ba0c-37e143cb64f5 /tmp            ext4    defaults,nodev,noexec,nosuid        0       2
# /usr was on /dev/sda5 during installation
UUID=70d74e44-ce91-4786-a747-a2fca4a2262a /usr            ext4    defaults,nodev,ro        0       2
# /usr/local was on /dev/sda6 during installation
UUID=e1f892e2-ebf9-4e7e-8640-f63a41f2df22 /usr/local      ext4    defaults,nodev        0       2
# /var was on /dev/sda3 during installation
UUID=50552290-0f4d-4a65-abfa-9fac98ae98d2 /var            ext4    defaults,nodev,noexec,grpquota,nosuid,usrquota        0       2
# /var/log was on /dev/sda7 during installation
UUID=6dac116d-dc39-46e1-a324-55a2905ea266 /var/log        ext4    defaults,nodev,noexec,nosuid        0       2
# swap was on /dev/sda4 during installation
UUID=96dc1eab-0dc2-4fcb-b758-0d01450e12b5 none            swap    sw              0       0
tmpfs	/dev/shm    tmpfs	   defaults,nodev,nouser,nosuid	0	0