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:
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
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.