When mounting an
Ext
file system (
ext2
,
ext3
or
ext4
), there are several additional options you can apply to the mount call or to
/etc/fstab
. For instance, this is my fstab entry for the
/tmp
partition:
/dev/hda7 /tmp ext2 defaults,nosuid,noexec,nodev 0 2
オプションの項目にちがいがあるのがわかるでしょう。
nosuid
オプションは setuid と setgid ビットを完全に無視します。
noexec
はその マウントポイントでのどんなプログラムの実行も禁止します。そして
nodev
はデバイスを無視します。これはよさそうですが、しかしこれは
noexec
オプションはバイナリが直接実行されるのを防ぎますが、簡単に 回避されます:
alex@joker:/tmp# mount | grep tmp
/dev/hda7 on /tmp type ext2 (rw,noexec,nosuid,nodev)
alex@joker:/tmp# ./date
bash: ./date: Permission denied
alex@joker:/tmp# /lib/ld-linux.so.2 ./date
Sun Dec 3 17:49:23 CET 2000
Newer versions of the kernel do however handle the
noexec
flag properly:
angrist:/tmp# mount | grep /tmp
/dev/hda3 on /tmp type ext3 (rw,noexec,nosuid,nodev)
angrist:/tmp# ./date
bash: ./tmp: Permission denied
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
しかし、多くの script kiddie は /tmp にファイルを作って実行しようとする 攻撃を行います。script kiddie に知識がなければ、この落とし穴に落ちるでしょう。 言いかえれば、たとえば偶然 /tmp を PATH に加えてしまったとき、ユーザが だまされて /tmp にあるトロイの木馬化されたバイナリを実行してしまうことが ありえなくなります。
The following is a more thorough example. A note, though:
/var
could be set noexec, but some software
keeps its programs under in
/var
. The same applies to the nosuid option.
/dev/sda6 /usr ext2 defaults,ro,nodev 0 2
/dev/sda12 /usr/share ext2 defaults,ro,nodev,nosuid 0 2
/dev/sda7 /var ext2 defaults,nodev,usrquota,grpquota 0 2
/dev/sda8 /tmp ext2 defaults,nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/sda9 /var/tmp ext2 defaults,nodev,nosuid,noexec,usrquota,grpquota 0 2
/dev/sda10 /var/log ext2 defaults,nodev,nosuid,noexec 0 2
/dev/sda11 /var/account ext2 defaults,nodev,nosuid,noexec 0 2
/dev/sda13 /home ext2 rw,nosuid,nodev,exec,auto,nouser,async,usrquota,grpquota 0 2
/dev/fd0 /mnt/fd0 ext2 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.2. /usr を読みとり専用に設定する
/usr
を読みとり専用に設定するとあなたの Debian GNU/Linux システムに新パッケージをインストールすることができなくなります。まずそれを 読み書き両用で再マウントし、パッケージをインストールして読みとり専用で 再マウントする必要があるでしょう。apt の (Debian 3.0 「woody」にある) 最新版は パッケージのインストール前後にコマンドを実行するように設定できます。 したがってこれを適切に設定したくなるかもしれません。
これを行うには
/etc/apt/apt.conf
を変更して以下を 追加してください:
DPkg
{
Pre-Invoke { "mount /usr -o remount,rw" };
Post-Invoke { "mount /usr -o remount,ro" };
};
Note that the Post-Invoke may fail with a "/usr busy" error message. This happens mainly when you are using files during the update that got updated. You can find these programs by running
# lsof +L1
Stop or restart these programs and run the Post-Invoke manually.
Beware! This means you'll likely need to restart your X session (if you're running one) every time you do a major upgrade of your system. You might want to reconsider whether a read-only
/usr
is suitable for your system. See also this
discussion on debian-devel about read-only.