Info: Version 1.4.x is available.


SYAORAN ポリシー解説書

Last modified: $Date: 2011-07-01 13:55:23 +0900 (Fri, 01 Jul 2011) $

1. ポリシーファイルの分類と構文

ファイル名の指定方法について

SYAORAN では、シンボリックリンクや .. 等を全て解決した上でカーネルから見た絶対パス名(以下、正規化されたパス名)を使用している。 当該プロセスが chroot された環境下で動作する場合であっても、 chroot する前のパス名で指定されることに注意。

正規化されたディレクトリ名は常に / で終わる。 正規化されたファイル名は決して / で終わらない。

正規化されたパス名は、全てアスキーコードの表示可能な範囲(0x21~0x7E)で構成されている。 従って、空白文字(0x20)は \040 、 \ 文字(0x5C)は \\ 、その他の表示不可能な文字は \ooo 形式の8進数で表記する。 空白や改行はデリミタとして扱われるので、必ず8進数に変換すること。

SYAORANファイルシステム用ポリシーファイル

このファイルでは、 /dev ディレクトリの内容を指定する。 /dev ディレクトリには多数のデバイスファイルが存在しているが、実際にシステムの動作に必要なのは数十個程度である。 また、デバイスファイルが常に正しいデバイスと繋がっていることは、セキュリティ上、不可欠である。 例えば、 /dev/null がメジャー番号 1 マイナー番号 3 のキャラクタ型デバイスとしてではなく、メジャー番号 8 マイナー番号 0 のブロック型デバイス( /dev/sda )として存在していた場合、たちまち SCSI ハードディスクの内容が破壊されてしまうであろう。

設定ファイルの書式は以下の通りである。

1行に1エントリを記述する。 各エントリには9個の要素がある。

filename マウントポイント以降の正規化されたパス名。但し、最初の / は除く。
permission 8進数で表記されたパーミッション。 000 ~ 777 で指定する。
owner 10進数で表記された所有者。
group 10進数で表記されたグループ。
flags 以下の値の論理和。
  • 1: マウント後に作成を許可する。
  • 2: マウント後に削除を許可する。
  • 4: マウント後にパーミッションの変更を許可する。
  • 8: マウント後に所有者またはグループの変更を許可する。
  • 16: 内部で使用。デバイスファイルにアクセスされたか否か。
  • 32: マウント時点では作成しない。
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= を省略することができる。


2. ポリシーファイルの例

必要なエントリはシステム毎に異なります。

#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

目次へ戻る


sflogo.php