Info: Version 1.5.x is available.
Last modified: $Date: 2011-07-01 13:55:23 +0900 (Fri, 01 Jul 2011) $
SYAORAN では、シンボリックリンクや .. 等を全て解決した上でカーネルから見た絶対パス名(以下、正規化されたパス名)を使用している。 当該プロセスが chroot された環境下で動作する場合であっても、 chroot する前のパス名で指定されることに注意。
正規化されたディレクトリ名は常に / で終わる。 正規化されたファイル名は決して / で終わらない。
正規化されたパス名は、全てアスキーコードの表示可能な範囲(0x21~0x7E)で構成されている。 従って、空白文字(0x20)は \040 、 \ 文字(0x5C)は \\ 、その他の表示不可能な文字は \ooo 形式の8進数で表記する。 空白や改行はデリミタとして扱われるので、必ず8進数に変換すること。
このファイルでは、 /dev ディレクトリの内容を指定する。 /dev ディレクトリには多数のデバイスファイルが存在しているが、実際にシステムの動作に必要なのは数十個程度である。 また、デバイスファイルが常に正しいデバイスと繋がっていることは、セキュリティ上、不可欠である。 例えば、 /dev/null がメジャー番号 1 マイナー番号 3 のキャラクタ型デバイスとしてではなく、メジャー番号 8 マイナー番号 0 のブロック型デバイス( /dev/sda )として存在していた場合、たちまち SCSI ハードディスクの内容が破壊されてしまうであろう。
設定ファイルの書式は以下の通りである。
1行に1エントリを記述する。 各エントリには9個の要素がある。
| filename | マウントポイント以降の正規化されたパス名。但し、最初の / は除く。 |
| permission | 8進数で表記されたパーミッション。 000 ~ 777 で指定する。 |
| owner | 10進数で表記された所有者。 |
| group | 10進数で表記されたグループ。 |
| flags | 以下の値の論理和。
|
| type | デバイスファイルの型。 'd' (ディレクトリ), 'p' (FIFO), 's' (ソケット), 'c' (キャラクタ型デバイス), 'b' (ブロック型デバイス), 'l' (シンボリックリンク) , 'f' (通常ファイル) のいずれかを指定。 |
| symlink_data | マウント時に作成されるシンボリックリンクの内容。 type が l 以外の場合は不要。 |
| major | 10進数で表記されたメジャー番号。 type が c または b 以外の場合は不要。 |
| minor | 10進数で表記されたマイナー番号。 type が c または b 以外の場合は不要。 |
各行は '\n' で区切られる。 ファイル名・ディレクトリ名の内容は全て正規化した形で指定する。 ただし、ディレクトリ名の末尾の / は省略可能である。
シンボリックリンクの内容は正規化する必要は無い。
空白文字などをシンボリックリンク中に含める目的で \\ および \ooo 形式によるエスケープを行うことが可能である。
使用方法:
| Step 1 | flags が 0 の状態の設定ファイルを作成する。 |
| Step 2 | accept モードでマウントする。設定ファイルを /etc/ccs/syaoran.conf に作成して /dev にマウントする場合、 mount -t syaoran -o accept=/etc/ccs/syaoran.conf none /dev を実行する。 |
| Step 3 | 通常通りシステムを稼動させる。実際のアクセスされた内容に基づき flags の値が更新される。 |
| Step 4 | 学習結果はマウントポイント直下にある .syaoran というファイルを通じて読み出すことができるのでこれを適当に編集(不要なシンボリックリンクの削除など)して /etc/ccs/syaoran.conf に保存する。 accept モードでは、実際にオープンされたキャラクタ型デバイスとブロック型デバイスのみが .syaoran に反映されるので、不要なエントリを削除するために利用できる。ディレクトリ、FIFO、ソケット、シンボリックリンク、通常ファイルはオープンされたかどうかに関係なく常に .syaoran に反映される。 |
| Step 5 | アンマウントする。 |
| Step 6 | enforce モードでマウントする場合は、 mount -t syaoran -o enforce=/etc/ccs/syaoran.conf none /dev を実行する。 enforce モードでは、 flags の値が更新されることは無い。 エントリ不足などによりポリシー違反が発生すると SYAORAN-ERROR: というメッセージが表示される。以下のコマンドを用いて知ることができる。 dmesg | grep ^SYAORAN-ERROR: |
カーネルのコマンドラインに SYAORAN=accept または SYAORAN=enforce と指定することで、デフォルトのモードを指定できる。デフォルトのモードを指定した場合は、マウント時に accept= または enforce= を省略することができる。
必要なエントリはシステム毎に異なります。
| #filename | permission | owner | group | flags | type | [ symlink_data | major minor ] | |
| pts | 755 | 0 | 0 | 0 | d | ||
| shm | 755 | 0 | 0 | 0 | d | ||
| fd | 777 | 0 | 0 | 0 | l | /proc/self/fd | |
| stdin | 777 | 0 | 0 | 0 | l | /proc/self/fd/0 | |
| stdout | 777 | 0 | 0 | 0 | l | /proc/self/fd/1 | |
| stderr | 777 | 0 | 0 | 0 | l | /proc/self/fd/2 | |
| null | 666 | 0 | 0 | 0 | c | 1 | 3 |
| zero | 666 | 0 | 0 | 0 | c | 1 | 5 |
| random | 644 | 0 | 0 | 0 | c | 1 | 8 |
| urandom | 644 | 0 | 0 | 0 | c | 1 | 9 |
| tty | 666 | 0 | 0 | 0 | c | 5 | 0 |
| tty0 | 600 | 0 | 0 | 12 | c | 4 | 0 |
| tty1 | 600 | 0 | 0 | 12 | c | 4 | 1 |
| tty2 | 600 | 0 | 0 | 12 | c | 4 | 2 |
| tty3 | 600 | 0 | 0 | 12 | c | 4 | 3 |
| tty4 | 600 | 0 | 0 | 12 | c | 4 | 4 |
| tty5 | 600 | 0 | 0 | 12 | c | 4 | 5 |
| tty6 | 600 | 0 | 0 | 12 | c | 4 | 6 |
| tty7 | 600 | 0 | 0 | 12 | c | 4 | 7 |
| tty8 | 600 | 0 | 0 | 12 | c | 4 | 8 |
| cdrom | 777 | 0 | 0 | 3 | l | /dev/scd0 | |
| mouse | 777 | 0 | 0 | 3 | l | psaux | |
| console | 600 | 0 | 0 | 1 | c | 5 | 1 |
| fd0 | 660 | 0 | 19 | 0 | b | 2 | 0 |
| fd1 | 660 | 0 | 19 | 0 | b | 2 | 1 |
| fd2 | 660 | 0 | 19 | 0 | b | 2 | 2 |
| fd3 | 660 | 0 | 19 | 0 | b | 2 | 3 |
| hda | 660 | 0 | 6 | 0 | b | 3 | 0 |
| hda1 | 660 | 0 | 6 | 0 | b | 3 | 1 |
| hda2 | 660 | 0 | 6 | 0 | b | 3 | 2 |
| hda3 | 660 | 0 | 6 | 0 | b | 3 | 3 |
| hda5 | 660 | 0 | 6 | 0 | b | 3 | 5 |
| hda6 | 660 | 0 | 6 | 0 | b | 3 | 6 |
| hda7 | 660 | 0 | 6 | 0 | b | 3 | 7 |
| hda8 | 660 | 0 | 6 | 0 | b | 3 | 8 |
| hda9 | 660 | 0 | 6 | 0 | b | 3 | 9 |
| hda10 | 660 | 0 | 6 | 0 | b | 3 | 10 |
| hda11 | 660 | 0 | 6 | 0 | b | 3 | 11 |
| hda12 | 660 | 0 | 6 | 0 | b | 3 | 12 |
| initctl | 600 | 0 | 0 | 3 | p | ||
| log | 666 | 0 | 0 | 15 | s | ||
| rtc | 644 | 0 | 0 | 0 | c | 10 | 135 |
| ptmx | 666 | 0 | 0 | 0 | c | 5 | 2 |
| ram | 777 | 0 | 0 | 3 | l | /dev/ram0 | |
| ram0 | 660 | 0 | 6 | 0 | b | 1 | 0 |
| ram1 | 660 | 0 | 6 | 0 | b | 1 | 1 |
| sda | 660 | 0 | 6 | 0 | b | 8 | 0 |
| initrd | 660 | 0 | 6 | 1 | b | 1 | 250 |
| psaux | 600 | 0 | 0 | 0 | c | 10 | 1 |
| apm_bios | 600 | 0 | 0 | 0 | c | 10 | 134 |
| cpu | 755 | 0 | 0 | 0 | d | ||
| cpu/0 | 755 | 0 | 0 | 0 | d | ||
| cpu/0/microcode | 600 | 0 | 0 | 0 | c | 10 | 184 |
| ttyS0 | 660 | 0 | 14 | 0 | c | 4 | 64 |
| ttyS1 | 660 | 0 | 14 | 0 | c | 4 | 65 |
| ttyS2 | 660 | 0 | 14 | 0 | c | 4 | 66 |
| ttyS3 | 660 | 0 | 14 | 0 | c | 4 | 67 |
| ptal-printd | 777 | 0 | 0 | 3 | l | /var/run/ptal-printd | |
| gpmctl | 700 | 0 | 0 | 3 | s | ||
| scd0 | 660 | 0 | 6 | 0 | b | 11 | 0 |