Le dossier /tmp
est l'un des rares dossier du système qui soit
accessible en écriture par tout le monde. Les utilisateur comme les services.
Cependant beaucoup de vers utilisent des failles des application web pour
déposer un fichier sur le serveur et arrive donc dans ce fameux dossier
temporaire d'où le fichier peut être exécuter.
Afin de s'en prémunir il suffit de rendre le dossier temporaire non exécutable.
Monage du dossier /tmp
en lecture/écriture seules
Pour inactivé l'exécution globalement dans un répertoire, il faut que cela
concerne toute une partition. Il y a donc deux possibilité: soit le répertoire
/tmp
est déjà une partition à part soit il faut en crée une pour lui.
Plutôt que de reformater complètement le disque pour créer cette partition, il
est possible de transformer un fichier en partition loopback
.
Pour cela il faut d'abord créer ce fichier comme dans l'article Création de fichier image disque et montage.
Pour monter le fichier automatiquement au démarrage il suffit d'ajouter la ligne suivante:
/fichier_temporaire /tmp ext3 loop,noexec,nosuid,nodev,rw 0 0
Où fichier_temporaire
est le chemin complet vers le fichier contenant la
partition destiné au répertoire temporaire. Les options
noexec,nosuid,nodev
permettent de bloquer l'exécution sur cette
partition.
Dans le cas ou le dossier temporaire serait déjà sur une partition séparée,
l'ajout des options noexec,nosuid,nodev
pour l'entrée du fichier
/etc/fstab
correspondante permettra de bloquer l'exécution sur cette
partition.
DPKG et erreur d'exécution
Lors de l'installation de paquets, les scripts de configurations sont placé dans
le répertoire /tmp
et exécutés. Cependant comme l'exécution est bloqué
il ne peuvent pas se configurer renvoyant une erreur semblable à la suivante:
Can't exec "/tmp/quota.config.26141": Permission non accordée at /usr/share/perl/5.8/IPC/Open3.pm line 168
Lors de l'installation de paquets il faut donc rendre exécutable le répertoire temporaire via la commande suivante:
# mount -o remount,exec /tmp
Enfin, une fois les paquets installé la partition est de nouveau rendue non exécutable via la commande:
# mount -o remount,noexec /tmp
Il est possible de demander à dpkg
de se débrouiller tout seul pour
faire ce changement de permission sur le répertoire /tmp
via un petit
script de . Pour cela il suffit de modifier le fichier
/etc/apt/apt.conf.d/70debconf
pour qu'il ressemble à ceci:
//changement des permission d'exécution du répertoire /tmp
DPkg::Pre-Install-Pkgs {"mount -o remount,exec /tmp; /usr/sbin/dpkg-preconfigure --apt || true";};
DPkg::Post-Invoke {"mount -o remount,noexec /tmp";};
Une configuration analogue peut être effectuée avec le répertoire /var
.
Cependant vue la taille que ce répertoire peut atteindre lors de l'utilisation
d'un serveur web il est conseillé d'utiliser une vraie partition et non un
fichier loopback. Il faut également modifier le fichier
/etc/apt/apt.conf.d/70debconf
, dpkg utilisant le répertoire
/var/cache/apt/
pour dépaqueter les paquets:
//changement des permission d'exécution du répertoire /tmp
DPkg::Pre-Install-Pkgs {"mount -o remount,exec /tmp; mount -o remount,exec /var; /usr/sbin/dpkg-preconfigure --apt || true";};
DPkg::Post-Invoke {"mount -o remount,noexec /tmp; mount -o remount,noexec /var;";};