Product SiteDocumentation Site

4.10. パーティションを正しくマウントする

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 はデバイスを無視します。これはよさそうですが、しかしこれは
  • only applies to ext2 or ext3 file systems
  • 簡単に回避できます
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 にあるトロイの木馬化されたバイナリを実行してしまうことが ありえなくなります。
/tmp が実行可能であることに依存するスクリプトがあるかもしれないことにも 注意してください。特筆するべきは Debconf にこれに関する問題がある (あった?) ということです。くわしくは Bug http://bugs.debian.org/116448 をごらんください。
The following is a more thorough example. A note, though: /var could be set noexec, but some software [15] 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.1. Setting /tmp noexec

/tmp を noexec に設定して新しいソフトウェアを実行したいときは 注意してください。なぜなら、ソフトウェアの中には /tmp を インストールに使うものがあるかもしれないからです。適切に APT::ExtractTemplates::TempDir (apt-extracttemplates(1) をごらんください) が設定されていなければ、apt は そのようなプログラムのひとつです (http://bugs.debian.org/116448 を ごらんください)。/etc/apt/apt.conf 中のこの変数を /tmp 以外の実行権限がついた他のディレクトリに設定することが できます。

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.


[15] Some of this includes the package manager dpkg since the installation (post,pre) and removal (post,pre) scripts are at /var/lib/dpkg/ and Smartlist