4.10. Monter correctement les partitions
En montant un système de fichiers
ext
(
ext2
,
ext3
ou
ext4
), différentes options additionnelles sont permises pour l'appel mount ou pour le fichier
/etc/fstab
. Par exemple, ceci est une entrée pour la partition
/tmp
:
/dev/hda7 /tmp ext2 defaults,nosuid,noexec,nodev 0 2
Vous voyez la différence dans la section des options. L'option
nosuid
ignore complètement les bits setuid et setgid, tandis que
noexec
interdit l'exécution de tout programme sur ce point de montage et
nodev
ignore les fichiers de périphériques. Cela semble bon mais :
L'option
noexec
évite aux binaires d'être exécutés directement mais c'était facilement contournable dans les premières versions du noyau:
alex@joker:/tmp# mount | grep tmp
/dev/hda7 on /tmp type ext2 (rw,noexec,nosuid,nodev)
alex@joker:/tmp# ./date
bash: ./date: Permission non accordée
alex@joker:/tmp# /lib/ld-linux.so.2 ./date
dimanche 3 décembre 2000, 17:49:23 (UTC+0100)
Les versions plus récentes du noyau gèrent cependant l'option
noexec
correctement:
angrist:/tmp# mount | grep /tmp
/dev/hda3 on /tmp type ext3 (rw,noexec,nosuid,nodev)
angrist:/tmp# ./date
bash: ./tmp: Permission non accordée
angrist:/tmp# /lib/ld-linux.so.2 ./date
./date: error while loading shared libraries: ./date: failed to map segment
from shared object: Operation not permitted
Toutefois, de nombreux pirates en herbe utilisent des failles qui essayent de créer et d'exécuter des fichiers dans /tmp
. S'ils ne sont pas futés, ils tomberont sur un pépin. En d'autres termes, un utilisateur ne peut être abusé en exécutant un binaire compromis (genre cheval de Troie) dans /tmp
lorsqu'il a accidentellement ajouté /tmp
dans son PATH.
Soyez aussi vigilant, certains scripts peuvent dépendre du fait que
/tmp
devienne exécutable. Notamment Debconf qui a (avait?) quelques problèmes concernant cela, pour plus d'informations consultez le
http://bugs.debian.org/116448.
Ce qui suit est un exemple un plus peu poussé. Prenez note que, bien que
/var
peut être mis à noexec, certains logiciels
conservent leurs programmes dans /var. Les mêmes conditions peuvent être appliquées à l'option nosuid.
/dev/sda6 /usr ext3 defaults,ro,nodev 0 2
/dev/sda12 /usr/share ext3 defaults,ro,nodev,nosuid 0 2
/dev/sda7 /var ext3 defaults,nodev,usrquota,grpquota 0 2
/dev/sda8 /tmp ext3 defaults,nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/sda9 /var/tmp ext3 defaults,nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/sda10 /var/log ext3 defaults,nodev,nosuid,noexec 0 2
/dev/sda11 /var/account ext3 defaults,nodev,nosuid,noexec 0 2
/dev/sda13 /home ext3 rw,nosuid,nodev,exec,auto,nouser,async,usrquota,grpquota 0 2
/dev/fd0 /mnt/fd0 ext3 defaults,users,nodev,nosuid,noexec 0 0
/dev/fd0 /mnt/floppy vfat defaults,users,nodev,nosuid,noexec 0 0
/dev/hda /mnt/cdrom iso9660 ro,users,nodev,nosuid,noexec 0 0
4.10.1. Paramétrer /tmp en noexec
Soyez vigilant si vous mettez
/tmp
en noexec et que vous voulez installer de nouveaux logiciels étant donné que certains peuvent l'utiliser pendant l'installation.
apt est un programme de ce genre (consultez
http://bugs.debian.org/116448) si
APT::ExtractTemplates::TempDir
n'est pas configuré correctement (consultez
apt-extracttemplates(1)). Vous pouvez paramétrer cette variable dans le fichier
/etc/apt/apt.conf
vers un autre répertoire que
/tmp
et qui aura les droits d'exécution.
4.10.2. Paramétrer /usr en lecture seule
Si vous mettez /usr
en lecture seule, vous serez dans l'incapacité d'installer de nouveaux paquets sur le système Debian GNU/Linux. Vous devrez, avant tout, la remonter en lecture/écriture, puis installer les nouveaux paquets et enfin la remonter en lecture seule. apt peut être configuré pour lancer des commandes avant et après l'installation de paquets, ainsi vous pouvez avoir envie de le configurer correctement.
Pour réaliser cela, modifiez le fichier
/etc/apt/apt.conf
et ajoutez:
DPkg
{
Pre-Invoke { "mount /usr -o remount,rw" };
Post-Invoke { "mount /usr -o remount,ro" };
};
Notez que le Post-Invoke peut échouer avec un message d'erreur « /usr busy ». Cela survient principalement lorsque vous utilisez des fichiers lors de la mise à jour et que ces fichiers sont justement mis à jour. Vous pouvez trouver ces programmes en exécutant
# lsof +L1
Arrêtez ou relancez ces programmes et exécutez la commande de Post-Invoke vous-même.
Attention! Cela veut dire que vous devrez probablement redémarrer la session X (si vous en faites fonctionner une) à chaque fois que vous faites une mise à jour majeure du système. Vous pourriez aussi vous redemander si paramétrer
/usr
en lecture seule est adapté au système. Consultez également cette
http://lists.debian.org/debian-devel/2001/11/threads.html#00212.