Product SiteDocumentation Site

4.10. Partitionen auf die richtige Art einhängen

Wenn Sie ein Ext-Dateisystem (ext2, ext3 oder ext4) einhängen, können Sie verschiedene Optionen mit dem mount-Befehl oder in /etc/fstab verwenden. Dies ist zum Beispiel mein fstab-Eintrag für meine /tmp-Partition:
  /dev/hda7    /tmp    ext2    defaults,nosuid,noexec,nodev    0    2
Achten Sie auf den Abschnitt mit den Optionen. Die Option nosuid ignoriert komplett alle setuid- und setgid-Bits, während noexec das Ausführen von Programmen unterhalb des Einhängepunkts verbietet und nodev Gerätedateien ignoriert. Das hört sich toll an, aber:
  • ist nur auf ext2 oder ext3-Dateisysteme anwendbar,
  • kann leicht umgangen werden.
Die Option noexec, die verhindert, dass Programme ausgeführt werden können, ließ sich in früheren Kernelversionen leicht umgehen:
  alex@joker:/tmp# mount | grep tmp
  /dev/hda7 on /tmp type ext2 (rw,noexec,nosuid,nodev)
  alex@joker:/tmp# ./date
  bash: ./date: Keine Berechtigung
  alex@joker:/tmp# /lib/ld-linux.so.2 ./date
  So 3. Dec 17:49:23 CET 2000
Neuere Versionen des Kernels verarbeiten aber die Option noexec richtig:
  angrist:/tmp# mount | grep /tmp
  /dev/hda3 on /tmp type ext3 (rw,noexec,nosuid,nodev)
  angrist:/tmp# ./date
  bash: ./tmp: Keine Berechtigung
  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
Wie auch immer, viele Skript-Kiddies haben Exploits, die versuchen, eine Datei in /tmp zu erstellen und auszuführen. Falls sie keine Ahnung haben, werden sie in dieser Grube hängen bleiben. Mit anderen Worten: Ein Benutzer kann nicht hereingelegt werden, einen ausführbaren Trojaner in /tmp laufen zu lassen, zum Beispiel, indem er zufällig /tmp in seinen Suchpfad (PATH) aufnimmt.
Seien Sie sich auch bewusst, dass manche Skripte darauf aufbauen, dass /tmp ausführbare Rechte hat. Bemerkenswerterweise hatte (oder hat?) Debconf Probleme bei dieser Sache, weitere Informationen enthält Fehler http://bugs.debian.org/116448.
Nachfolgend ein gründlicheres Beispiel. Eine Anmerkung dazu: /var könnte auch noexec enthalten, aber manche Software [22] verwahrt ihre Programme unterhalb von /var. Dasselbe gilt für die 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. /tmp noexec setzen

Be careful if setting /tmp noexec when you want to install new software, since some programs might use it for installation. apt is one such program (see http://bugs.debian.org/116448) if not configured properly APT::ExtractTemplates::TempDir (see apt-extracttemplates(1)). You can set this variable in /etc/apt/apt.conf to another directory with exec privileges other than /tmp.

4.10.2. /usr auf nur-lesend setzen

Wenn Sie auf /usr nur lesenden Zugriff erlauben, werden Sie nicht in der Lage sein, neue Pakete auf Ihrem Debian-GNU/Linux-System zu installieren. Sie werden es erst mit Schreibzugriff erneut einhängen müssen, die Pakete installieren und dann wieder nur mit lesendem Zugriff einhängen. Apt kann so konfiguriert werden, dass Befehle vor und nach dem Installieren von Paketen ausgeführt werden. Daher müssen Sie es passend konfigurieren.
Dafür müssen Sie /etc/apt/apt.conf bearbeiten und Folgendes einfügen:
  DPkg
  {
      Pre-Invoke  { "mount /usr -o remount,rw" };
      Post-Invoke { "mount /usr -o remount,ro" };
  };
Beachten Sie, dass das Post-Invoke mit der Fehlermeldung »/usr ist belegt« scheitern kann. Dies passiert vorwiegend, wenn Sie eine Datei benutzen, die aktualisiert wurde. Sie können diese Programme finden, indem Sie Folgendes ausführen:
# lsof +L1
Halten Sie diese Programme an oder starten Sie sie erneut und rufen dann Post-Invoke manuell auf. Achtung! Das bedeutet, dass Sie wahrscheinlich jedes Mal Ihre Sitzung von X (falls Sie eine laufen haben) neu starten müssen, wenn Sie ein größeres Upgrade Ihres Systems durchführen. Sie müssen entscheiden, ob ein nur lesbares /usr zu Ihrem System passt. Vergleichen Sie auch diese http://lists.debian.org/debian-devel/2001/11/threads.html#00212.


[22] Einiges davon trifft auf den Paketverwalter Dpkg zu, da die Installations- oder Deinstallationsanweisungen (post, pre) unter /var/lib/dpkg/ liegen, und auch auf Smartlist.