Info: Version 1.3.1 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 形式の８進数で表記する。 空白や改行はデリミタとして扱われるので、必ず８進数に変換すること。

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

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

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

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

filename | マウントポイント以降の正規化されたパス名。但し、最初の / は除く。
permission | ８進数で表記されたパーミッション。 000 ～ 777 で指定する。
owner | １０進数で表記された所有者。
group | １０進数で表記されたグループ。
flags | 以下の値の論理和。 1: マウント後に作成を許可する。 2: マウント後に削除を許可する。 4: マウント後にパーミッションの変更を許可する。 8: マウント後に所有者またはグループの変更を許可する。 16: 内部で使用。デバイスファイルにアクセスされたか否か。 32: マウント時点では作成しない。
type | デバイスファイルの型。 'd' (ディレクトリ), 'p' (ＦＩＦＯ), 's' (ソケット), 'c' (キャラクタ型デバイス), 'b' (ブロック型デバイス), 'l' (シンボリックリンク) , 'f' (通常ファイル) のいずれかを指定。
symlink_data | マウント時に作成されるシンボリックリンクの内容。 type が l 以外の場合は不要。
major | １０進数で表記されたメジャー番号。 type が c または b 以外の場合は不要。
minor | １０進数で表記されたマイナー番号。 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 に反映されるので、不要なエントリを削除するために利用できる。ディレクトリ、ＦＩＦＯ、ソケット、シンボリックリンク、通常ファイルはオープンされたかどうかに関係なく常に .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

目次へ戻る