以下では、Turbolinux 10 Server(カーネルバージョン 2.6.8-?? 以降)で TOMOYO Linux 1.6.6を利用する手順を解説します。この手順書に従って操作すれば、 TOMOYO Linuxの基本的な機能を体験し、簡単な設定と運用が行えるようになります。
導入の流れは以下の通りです。
TOMOYO Linuxのツールをインストールします。ツールには、ポリシーの管理を行うプログラムが収録されています。
Turbolinux 10 Serverにはバイナリパッケージが提供されていますので、それを利用します。
# wget -O ccs-tools-1.6.6-1.TL10S.i586.rpm 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/30299/ccs-tools-1.6.6-1.TL10S.i586.rpm' # rpm -ivh ccs-tools-1.6.6-1.TL10S.i586.rpm
以上でTOMOYO Linuxのインストールは終了です。続いて設定に移ります。
この節の操作を自動で行うスクリプトが付属しているのでそれを実行します。
# /usr/lib/ccs/init_policy.sh --file-only-profile
init_policy.shは10分以上時間を要する場合がありますので気長にお待ちください。
TOMOYO Linuxの設定を保存するディレクトリは/etc/ccsです。
TOMOYO Linuxには多くの機能があり、どの機能をON/OFFにするのかの設定をプロファイルとよびます。 プロファイルは複数作成して切り替えて使うことができます。 すべてのプロファイルは/etc/ccs/profile.confという単一のファイルに保存します。
今回はファイルに対するアクセス制御の機能のみを利用するため、 /etc/ccs/profile.confの内容は以下のようなっているはずです。
0-COMMENT=-----Disabled Mode----- 0-MAC_FOR_FILE=disabled 0-TOMOYO_VERBOSE=disabled 1-COMMENT=-----Learning Mode----- 1-MAC_FOR_FILE=learning 1-TOMOYO_VERBOSE=disabled 2-COMMENT=-----Permissive Mode----- 2-MAC_FOF_FILE=permissive 2-TOMOYO_VERBOSE=enabled 3-COMMENT=-----Enforcing Mode----- 3-MAC_FOR_FILE=enforcing 3-TOMOYO_VERBOSE=enabled
profile.confの1行は以下のような構文になっています。
(プロファイル番号)-(設定項目)=(制御モード)
すなわち、行頭の番号がプロファイルを切り替えるためのプロファイル番号で、 '=' の左が設定項目、'=' の右が制御モードです。
設定項目COMMENTは、プロファイルを区別しやすくするためのコメントで、TOMOYO Linuxの機能には影響を与えません。
設定項目MAC_FOR_FILEは「ファイルに対するアクセス制御」を表しており、 制御モードがdisabledなら無効、learningなら学習、permissiveなら確認(アクセス拒否ログを出力するが実際には拒否しない)、enforcingなら強制、という設定が行えます。
設定項目TOMOYO_VERBOSEは「アクセス拒否の情報をコンソールに出力するかどうか」を表しており、 制御モードがdisabledなら出力なし、enabledなら出力ありになります。
上記設定では、プロファイル番号が0~3の4つのプロファイルを作成しており、それぞれの意味は以下のようになります。
プロファイル0 | ファイルに対するアクセス制御を無効にする、コンソールにアクセス拒否を出力しない |
---|---|
プロファイル1 | ファイルに対するアクセス制御を学習モードにする、コンソールにアクセス拒否を出力しない |
プロファイル2 | ファイルに対するアクセス制御を確認モードにする、コンソールにアクセス拒否を出力する |
プロファイル3 | ファイルに対するアクセス制御を強制モードにする、コンソールにアクセス拒否を出力する |
プロファイル1の学習モードで行ったアクセスを元にポリシーを作成し、 プロファイル2の確認モードで仮運用して必要なポリシーが作成できているかを確かめ、 プロファイル3の強制モードで本運用としてアクセス制御を行う、 というのが基本的な運用の流れです。
ポリシーを変更することができるプログラムは、/etc/ccs/manager.confというファイルで指定します。 以下のプログラムが指定されているはずです。
/usr/lib/ccs/loadpolicy /usr/lib/ccs/editpolicy /usr/lib/ccs/setlevel /usr/lib/ccs/setprofile /usr/lib/ccs/ld-watch /usr/lib/ccs/ccs-queryd
/etc/ccs/exception_policy.conf には以下の 12 種類の例外が指定されています。
TOMOYO Linuxのログは、アクセスが許可された要求のログと、アクセスが拒否された要求のログの2種類に分けることができます。 今回は、アクセス拒否ログのみを保存する設定を行います。
ログを保存するには、ccs-toolsのccs-auditdというデーモンプログラムを使用します。 アクセス拒否ログのみを保存する設定でccs-auditdをLinuxの起動時に実行するには、 以下のコマンドで/etc/rc.d/rc.localの末尾にccs-auditdの起動コマンドを追加します。
# echo "/usr/sbin/ccs-auditd /dev/null /var/log/tomoyo/reject_log.txt" >> /etc/rc.d/rc.local
この設定では、/var/log/tomoyo/reject_log.txtにアクセス拒否ログが保存されます。 ログを保存するディレクトリをあらかじめ作っておきます。
# mkdir -p /var/log/tomoyo
以上でTOMOYO Linuxを使うための基本的な設定は終わりです。
/sbin/ccs-init を実行してください。
# /sbin/ccs-init
問題が無ければすぐに終了します。
Linux を再起動してください。
# reboot
起動プロセスが終了するとログインプロンプトが表示されるので、rootでログインしてください。
今回は、以下の操作をTOMOYO Linuxに学習させ、強制モードでは学習させた操作以外が拒否されることを確かめます。
まずは学習モードの設定を行います。
プロファイル1が学習モードです。 このプロファイルを以下のコマンドで/sbin/mingettyから起動されるプログラムに割り当てます。
# /usr/sbin/ccs-setprofile -r 1 '<kernel> /sbin/mingetty'
このコマンドは、
/sbin/mingettyから起動されるプログラムすべてにプロファイル1を割り当てる
という意味です。/sbin/mingettyはログインシェルを起動するプログラムで、 /sbin/mingetty以下にプロファイル1を割り当てることで、ログイン後の操作を学習する設定になります。 設定は即時に有効になるので、上記ccs-setprofileコマンドを実行したあとは既に学習モードになっています。
<kernel> /sbin/mingettyを引用符で囲まないと、シェルのリダイレクト機能が働いて /sbin/mingettyの内容が書き換えられてしまいますのでくれぐれもご注意ください。
それでは、前述の4つの操作を学習させましょう。学習は通常のLinuxのように操作することで行えます。
一見普通のLinuxと変わりなく操作できますが、 裏ではTOMOYO Linuxがアクセス許可を監視し、 操作ごとにポリシーとしてメモリ上に記憶しています。
生成されたポリシーの参照・編集には、ccs-toolsのccs-editpolicyを用います。
# /usr/sbin/ccs-editpolicy
ccs-editpolicyを起動すると、TOMOYO Linux起動後に、プロセスがどのように呼び出されたかが表示されます。 この「プロセスの呼び出し」を、TOMOYO Linuxでは「ドメイン遷移」とよびます。
ドメイン遷移の中から、mingettyを探してみてください。ドメイン遷移からmingettyを検索するには、 'f'キーを押して、下に出たプロンプトで"mingetty"と入力してEnterキーを押します。
行番号の右側に表示されている数字は、そのドメインに割り当てられているプロファイル番号です。 /sbin/mingetty 以下のドメインが 1 になっているのは、先ほど ccs-setprofile コマンドを用いて 1 を割り当てたためです。
/sbin/mingetty下の/bin/login以下では、ログインしてからのプロセス実行履歴が分かります。 その中からさらに、/bin/headコマンドを探してみてください。 headコマンドの行でEnterキーを押すと、以下の画面が表示されます。
これは先ほどの操作で学習したポリシーで、
<kernel> /sbin/mingetty /bin/login /bin/bash /bin/headというドメイン(赤下線)は、
- /etc/passwdへの読み込みアクセスを許可する(青下線)
ということを意味しています。
TOMOYO Linuxでは、 「プログラムの絶対パスで表現したプロセスの実行履歴」をドメインとよびます。 すべてのプロセスはいずれか1つのドメインに所属しており、 アクセス制御はドメインごとにポリシーとして設定します。
ドメインにおけるファイルに対するアクセス許可は、 通常のLinuxにおけるファイルに対するパーミッションと 同様の3種類(読み込み・書き込み・実行)の他にも、 ファイルの新規作成・削除・名前変更なども設定できます。
ポリシーはメモリ上に置かれており、このままLinuxをシャットダウンしてしまうと、 学習したポリシーも失われてしまいます。ポリシーをハードディスクの/etc/ccs以下に 保存するには以下のようにします。
# /usr/sbin/ccs-savepolicy
それでは、先ほど自動学習したポリシーを使って、強制アクセス制御を体験してみましょう。
'q'キーでccs-editpolicyを終了してから、以下のコマンドを実行します。
# /usr/sbin/ccs-setprofile -r 3 '<kernel> /sbin/mingetty'
この操作により、/sbin/mingetty以下のドメインに強制アクセス制御が適用されるようになります。
この状態で以下の操作を行ってみます。
図中の赤下線のコマンドは先ほど学習モードで行った操作ですので、問題なく実行できます。 逆に青下線のコマンドはエラーになります。
エラーになった操作のログは、ccs-auditdによって/var/log/tomoyo/reject_log.txtに保存されています。
#2009-02-20 13:25:12# profile=3 mode=enforcing pid=2864 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0 argc=3 envc=24 argv[]={ "tail" "-3" "/etc/passwd" } envp[]={ "MANPATH=/usr/lib/qt3/doc/man:" "HOSTNAME=tomoyo" "TERM=linux" "SHELL=/bin/bash" "HISTSIZE=1000" "QTDIR=/usr/lib/qt3" "HISTFILESIZE=1000" "USER=root" "LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:" "ENV=/root/.bashrc" "USERNAME=" "MAIL=/var/spool/mail/root" "PATH=/usr/lib/qt3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/sbin/:/usr/sbin/:/usr/sbin/" "PWD=/root" "LANG=C" "PS1=[\\u@\\h\040\\W]\\$\040" "HISTCONTROL=ignoredups" "SHLVL=1" "HOME=/root" "LESS=-X" "LOGNAME=root" "LESSOPEN=|/usr/bin/lesspipe.sh\040%s" "G_BROKEN_FILENAMES=1" "_=/bin/tail" }
<kernel> /sbin/mingetty /bin/login /bin/bash
allow_execute /bin/tail
#2009-02-20 13:25:12# profile=3 mode=enforcing pid=2864 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0
<kernel> /sbin/mingetty /bin/login /bin/bash
allow_read /bin/tail
#2009-02-20 13:25:22# profile=3 mode=enforcing pid=2867 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0
<kernel> /sbin/mingetty /bin/login /bin/bash /bin/head
allow_read /etc/shadow
#2009-02-20 13:25:29# profile=3 mode=enforcing pid=2891 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0
<kernel> /sbin/mingetty /bin/login /bin/bash /bin/tcsh
allow_create /tmp/langrc.csh.2868
#2009-02-20 13:25:33# profile=3 mode=enforcing pid=2892 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0 argc=1 envc=30 argv[]={ "date" } envp[]={ "MANPATH=/usr/lib/qt3/doc/man:/usr/lib/qt3/doc/man:" "HOSTNAME=tomoyo" "TERM=linux" "SHELL=/bin/bash" "HISTSIZE=1000" "QTDIR=/usr/lib/qt3" "HISTFILESIZE=1000" "USER=root" "LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:" "ENV=/root/.bashrc" "USERNAME=" "MAIL=/var/spool/mail/root" "PATH=/usr/lib/qt3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/qt3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/sbin/:/usr/sbin/:/usr/sbin/:/usr/X11R6/bin" "PWD=/root" "LANG=C" "PS1=[\\u@\\h\040\\W]\\$\040" "HISTCONTROL=ignoredups" "SHLVL=2" "HOME=/root" "LESS=-X" "LOGNAME=root" "LESSOPEN=|/usr/bin/lesspipe.sh\040%s" "G_BROKEN_FILENAMES=1" "_=/bin/tcsh" "HOSTTYPE=i586-linux" "VENDOR=intel" "OSTYPE=linux" "MACHTYPE=i586" "GROUP=root" "HOST=tomoyo" }
<kernel> /sbin/mingetty /bin/login /bin/bash /bin/tcsh
allow_execute /bin/date
上記のログから、 Turbolinux 10 Serverの「/bin/tcsh」を起動すると「~/.tcshrc」から呼ばれた「~/.lang/langrc.csh」により「/tmp/langrc.csh.プロセスID」というテンポラリファイルが生成されていたことが判明しました。今回は確認モードによる確認を経ずに強制モードにしたので、エラーになってしまいました。実際のシステムで使う場合には、確認モードを利用してアクセス許可の不足が無いことを確認してから強制モードにするようにしてください。
このようにTOMOYO Linuxのファイルに対するアクセス制御を用いれば、
行ったかを監視することもできます。