Product SiteDocumentation Site

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 :
  • ne s'applique qu'aux systèmes de fichiers ext2 ou ext3 ;
  • peut être contourné facilement.
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[23] 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.


[23] Cela inclut le gestionnaire de paquet dpkg car les scripts d'installation (pre et post) et de suppression (pre et post) sont en /var/lib/dpkg/ et aussi Smartlist.