tomoyotitle.png

TOMOYO Linux LiveCD Tutorial for CentOS 5

このページについて

このページでは TOMOYO Linux の LiveCD の使い方について解説します。 TOMOYO Linux LiveCD は、 CD で起動できる Linux ディストリビューションである CentOS に、 TOMOYO Linux カーネルとツールをインストールして基本的な設定を行った状態で配布している CD イメージです。 TOMOYO Linux LiveCD を使うことで、既存の環境に影響を与えることなく手軽に TOMOYO Linux を体験できます。

LiveCD を入手する

TOMOYO Linux LiveCD の ISO イメージは、 TOMOYO Linux プロジェクトの ダウンロードページから入手できます。

ダウンロードした ISO イメージは書き込みソフトで CD-R に焼いてください。 CD-R に焼きたくない場合、 VMware Player を使うことで ISO イメージのまま TOMOYO Linux LiveCD を起動することもできます。

LiveCD で起動する

CD-R に焼いた LiveCD を CD-ROM ドライブに入れてマシンを起動するか、前節で紹介した方法で VMware Player 上で ISO イメージから起動してください。 以下のようなデスクトップが表示されれば起動完了です。 通常の CentOS LiveCD とほとんど同じですが、デスクトップに TOMOYO Linux 関連のアイコンが追加されています:

desktop.png

「 Keyboard 」アイコンをダブルクリックすると、キーボードの種類を指定できます:

kbdselect-ja.png

LiveCD を使ってみる

まずは「 TOMOYO Linux Policy Violation Log 」アイコンをダブルクリックしてみてください。 以下のようなウィンドウが表示されます:

reject_log.png

この画面は TOMOYO Linux のポリシーに違反したアクセスログを表示しています。 新たなポリシー違反が発生すればすぐに表示されるようになっています。 LiveCD では何の許可も与えていないポリシーで起動されるので、全てのアクセスがポリシー違反ログとして出力されます。 ウィンドウを開いたままで、さまざまな操作をしてみてください。 どんなプロセスがどんな資源にアクセスしたかが逐次表示されます。

続けて、「 TOMOYO Linux Policy Editor 」アイコンをダブルクリックしてみてください。 以下のようなウィンドウが表示されます:

editpolicy.png

この画面には今までにどのようなプロセスが起動されたかを木構造で表示しており、それぞれの行はドメインと呼ばれます。 システム起動時から、実行されたすべてのプロセスがTOMOYO Linuxカーネルで監視されています。 どんなプロセスがどんな資源にアクセスしたかなどの情報が、すべてポリシーとして記録されています。 ポリシーエディタを使ってポリシーをブラウズするだけで、システムの挙動を手に取るように把握することができます。 これが TOMOYO Linux の最大の特徴です。

ポリシーエディタの最初の画面では、 <kernel> を基点として、どんなプロセスがどんなプロセスを起動したのかが木構造で表示されます。 カーソルキーや PageUp / PageDown キーで適当にスクロールして、システム内でどんなプロセスが起動されたかを調べてみてください。

試しに gnome-terminal というプロセスを探してみましょう。 'F' キーを押すと最下行に検索のための1行入力が表示されます。 そこに 'gnome-terminal' と入力して Enter キーを押してください:

find.png

gnome-terminal の下には /usr/bin/sudo という行が存在し、さらにその下に、 /usr/bin/tail や /usr/sbin/ccs-editpolicy という行が存在するのが見てとれます:

domain_gnome-terminal.png

表示されている /usr/bin/tail の行にカーソルを合わせて Enter キーを押してみましょう:

acl_tail.png

それぞれの行の一番左が行番号で、その次に表示されている単語はアクセスの種類を表しています。 file execute が実行を許可、 file write が書き込みモードでのオープンを許可、 file read が読み込みモードでのオープンを許可、 misc env が環境変数名の受け取り許可を表しています。 画面から、 tail コマンドがロケールファイルと、 /var/log/tomoyo/reject_000.log /var/log/tomoyo/reject_001.log /var/log/tomoyo/reject_002.log /var/log/tomoyo/reject_003.log というファイルを読み込んだことが読み取れます。 これはデスクトップの「 TOMOYO Linux Policy Violation Log 」というアイコンをダブルクリックして実行した結果学習されたポリシーです。

もとのドメインの木構造の画面に戻るためには Enter キーを押します。 プロセスがどういう履歴で起動され、どんな資源にアクセスしているかをブラウズしてみてください。

アクセスを制限してみる

学習されたポリシーを見るだけでなく、 TOMOYO Linux によるアクセス制御を体験してみましょう。 先ほどのポリシーエディタの画面は閉じずにそのままにしておいて、画面上端に表示されている「 Applications 」メニューから、「 Accessories 」「 Terminal 」を起動してください:

menu_terminal.png

端末が起動できたら、先ほどのポリシーエディタの画面に戻り、ドメインの木構造が表示されている状態で、 'R' キーを押してポリシーを再読み込みしてください。 そして、 gnome-terminal 以下の /bin/bash を探して見てください。 検索は先ほどと同じく 'F' キーで行えます:

domain_bash.png

これは先ほど起動した端末内で実行されている bash です。 grep や id などのプログラムが bash の開始時に自動的に実行されたことにより、それらのプログラムのためのドメインが作成されています。 端末の画面で、以下のコマンドを実行してください:

$ head /etc/passwd
$ bash
$ tail /etc/passwd
$ exit

bash_learning.png

再度ポリシーエディタの画面に戻って 'R' キーを押すと、実行したプログラムが追加されていることが分かります:

bash_learned.png

この画面で、行番号の次に表示されている数字に注目してください。 今は全ての行で '1' と表示されています:

all_learning.png

これはそのプロセスが動いている TOMOYO Linux のモードを表しており、プロファイル番号とよばれる数値です。 プロファイルとして以下の4種類が定義されており、 LiveCD ではあらかじめ全て 1 (学習モード)に設定されています:

プロファイル番号意味
0無効モード( TOMOYO Linux は何もしない)
1学習モード(ポリシー違反のアクセス要求を容認して、その要求をポリシーに追加する)
2確認モード(ポリシー違反のアクセス要求を容認する)
3強制モード(ポリシー違反のアクセス要求を拒否する)

TOMOYO Linux のアクセス制御を有効にするには、プロファイル番号 3 をドメインに割り当てる必要があります。 今回は gnome-terminal から起動された bash での操作をアクセス制御の対象としてみましょう。 まず、 gnome-terminal 直下の bash にカーソルを合わせてスペースキーを押します。 すると、行番号の左側に '&' マークが表示され、この行が選択された状態になります:

select-1.png

この状態で 'C' キーを押すと、 '&' マークの有無がカーソル行以下全部にコピーされます:

select-2.png

次に、 sudo にカーソルを合わせてスペースキーを押します。すると、行番号の左側の '&' マークが消えます:

select-3.png

この状態で 'C' キーを押すと、 '&' マークの有無がカーソル行以下全部にコピーされます:

select-4.png

この状態で 'S' キーを押すと、ポリシーエディタの最下行にプロファイル番号を入力する 1 行入力が表示されます。 アクセス制御を体験するために、プロファイル 3 (強制モード)を割り当てましょう:

setprofile.png

'&' マークが付いていたドメインにプロファイル番号 3 が割り当てられました:

bash_enforced.png

これでもう gnome-terminal から起動された bash に対しては強制モードで動いています。 端末の画面で適当なコマンドを入力してみてください。 先ほど学習モードで実行したコマンド以外は拒否されるはずです。 以下の画面では、 head /etc/passwd の実行には成功していますが、 ls や ps コマンドの実行は拒否されています:

1st_bash.png

また、1段階目の bash では tail /etc/passwd は拒否されますが、 bash をもう1段起動した場合には許可されます:

2nd_bash.png

これは、 TOMOYO Linux がプロセスをその実行履歴によって区別していることに起因しています。 ポリシーエディタを見ると、以下の2種類の bash が存在します。

head コマンドは1つ目の、 tail コマンドは2つ目の bash のみにしか許可されていないことが分かります。 TOMOYO Linux はシステム起動時から起動されたすべてのプロセスを監視しており、プロセスは実行履歴によって細かく区別されます。

/var/log/tomoyo/reject_003.log には、以下のように mode=enforcing という行を含んだログを見つけることができます。実行履歴と要求されたファイルのパス名だけでなく、プロセスの情報/コマンドライン引数/環境変数など詳細な情報を含んだログが記録されています。より厳密なアクセス制御を行いたい場合には、必要に応じてこれらの情報を条件として指定することもできます。

#2012/03/12 15:39:15# profile=3 mode=enforcing granted=no (global-pid=3957) task={ pid=3957 ppid=3904 uid=500 gid=500 euid=500 egid=500 suid=500 sgid=500 fsuid=500 fsgid=500 type!=execute_handler } path1={ uid=0 gid=0 ino=278537 major=253 minor=0 perm=0755 type=file } path1.parent={ uid=0 gid=0 ino=278529 perm=0755 } exec={ realpath="/bin/ls" argc=2 envc=34 argv[]={ "ls" "--color=tty" } envp[]={ "SSH_AGENT_PID=3707" "HOSTNAME=livecd.localdomain" "TERM=xterm" "SHELL=/bin/bash" "HISTSIZE=1000" "GTK_RC_FILES=/etc/gtk/gtkrc:/home/centos/.gtkrc-1.2-gnome2" "WINDOWID=24139895" "USER=centos" "LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:" "GNOME_KEYRING_SOCKET=/tmp/keyring-8oUnTf/socket" "SSH_AUTH_SOCK=/tmp/ssh-tsEoIb3676/agent.3676" "SESSION_MANAGER=local/livecd.localdomain:/tmp/.ICE-unix/3676" "USERNAME=centos" "MAIL=/var/spool/mail/centos" "PATH=/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/centos/bin" "DESKTOP_SESSION=default.desktop" "GDM_XSERVER_LOCATION=local" "INPUTRC=/etc/inputrc" "PWD=/home/centos" "XMODIFIERS=@im=none" "LANG=en_US.UTF-8" "GDMSESSION=default.desktop" "SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass" "SHLVL=2" "HOME=/home/centos" "GNOME_DESKTOP_SESSION_ID=Default" "LOGNAME=centos" "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-WkqSSGbio0,guid=cef7aeb2362c3dddacb141004f5e14b2" "LESSOPEN=|/usr/bin/lesspipe.sh\040%s" "DISPLAY=:0.0" "G_BROKEN_FILENAMES=1" "COLORTERM=gnome-terminal" "XAUTHORITY=/tmp/.gdmDX2ZAW" "_=/bin/ls" } }
<kernel> /sbin/init /etc/X11/prefdm /usr/sbin/gdm /usr/sbin/gdm-binary /etc/X11/xinit/Xsession /usr/bin/ssh-agent /bin/sh /bin/bash /usr/bin/dbus-launch /etc/X11/xinit/Xclients /usr/bin/gnome-session /usr/bin/nautilus /usr/bin/gnome-terminal /bin/bash
file execute /bin/ls

#2012/03/12 15:39:15# profile=3 mode=enforcing granted=no (global-pid=3957) task={ pid=3957 ppid=3904 uid=500 gid=500 euid=500 egid=500 suid=500 sgid=500 fsuid=500 fsgid=500 type!=execute_handler } path1={ uid=0 gid=0 ino=278537 major=253 minor=0 perm=0755 type=file } path1.parent={ uid=0 gid=0 ino=278529 perm=0755 }
<kernel> /sbin/init /etc/X11/prefdm /usr/sbin/gdm /usr/sbin/gdm-binary /etc/X11/xinit/Xsession /usr/bin/ssh-agent /bin/sh /bin/bash /usr/bin/dbus-launch /etc/X11/xinit/Xclients /usr/bin/gnome-session /usr/bin/nautilus /usr/bin/gnome-terminal /bin/bash
file read /bin/ls

#2012/03/12 15:39:17# profile=3 mode=enforcing granted=no (global-pid=3958) task={ pid=3958 ppid=3904 uid=500 gid=500 euid=500 egid=500 suid=500 sgid=500 fsuid=500 fsgid=500 type!=execute_handler } path1={ uid=0 gid=0 ino=278565 major=253 minor=0 perm=0555 type=file } path1.parent={ uid=0 gid=0 ino=278529 perm=0755 } exec={ realpath="/bin/ps" argc=1 envc=34 argv[]={ "ps" } envp[]={ "SSH_AGENT_PID=3707" "HOSTNAME=livecd.localdomain" "TERM=xterm" "SHELL=/bin/bash" "HISTSIZE=1000" "GTK_RC_FILES=/etc/gtk/gtkrc:/home/centos/.gtkrc-1.2-gnome2" "WINDOWID=24139895" "USER=centos" "LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:" "GNOME_KEYRING_SOCKET=/tmp/keyring-8oUnTf/socket" "SSH_AUTH_SOCK=/tmp/ssh-tsEoIb3676/agent.3676" "SESSION_MANAGER=local/livecd.localdomain:/tmp/.ICE-unix/3676" "USERNAME=centos" "MAIL=/var/spool/mail/centos" "PATH=/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/centos/bin" "DESKTOP_SESSION=default.desktop" "GDM_XSERVER_LOCATION=local" "INPUTRC=/etc/inputrc" "PWD=/home/centos" "XMODIFIERS=@im=none" "LANG=en_US.UTF-8" "GDMSESSION=default.desktop" "SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass" "SHLVL=2" "HOME=/home/centos" "GNOME_DESKTOP_SESSION_ID=Default" "LOGNAME=centos" "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-WkqSSGbio0,guid=cef7aeb2362c3dddacb141004f5e14b2" "LESSOPEN=|/usr/bin/lesspipe.sh\040%s" "DISPLAY=:0.0" "G_BROKEN_FILENAMES=1" "COLORTERM=gnome-terminal" "XAUTHORITY=/tmp/.gdmDX2ZAW" "_=/bin/ps" } }
<kernel> /sbin/init /etc/X11/prefdm /usr/sbin/gdm /usr/sbin/gdm-binary /etc/X11/xinit/Xsession /usr/bin/ssh-agent /bin/sh /bin/bash /usr/bin/dbus-launch /etc/X11/xinit/Xclients /usr/bin/gnome-session /usr/bin/nautilus /usr/bin/gnome-terminal /bin/bash
file execute /bin/ps

#2012/03/12 15:39:17# profile=3 mode=enforcing granted=no (global-pid=3958) task={ pid=3958 ppid=3904 uid=500 gid=500 euid=500 egid=500 suid=500 sgid=500 fsuid=500 fsgid=500 type!=execute_handler } path1={ uid=0 gid=0 ino=278565 major=253 minor=0 perm=0555 type=file } path1.parent={ uid=0 gid=0 ino=278529 perm=0755 }
<kernel> /sbin/init /etc/X11/prefdm /usr/sbin/gdm /usr/sbin/gdm-binary /etc/X11/xinit/Xsession /usr/bin/ssh-agent /bin/sh /bin/bash /usr/bin/dbus-launch /etc/X11/xinit/Xclients /usr/bin/gnome-session /usr/bin/nautilus /usr/bin/gnome-terminal /bin/bash
file read /bin/ps

#2012/03/12 15:39:23# profile=3 mode=enforcing granted=no (global-pid=3960) task={ pid=3960 ppid=3904 uid=500 gid=500 euid=500 egid=500 suid=500 sgid=500 fsuid=500 fsgid=500 type!=execute_handler } path1={ uid=0 gid=0 ino=115066 major=253 minor=0 perm=0644 type=file } path1.parent={ uid=0 gid=0 ino=114689 perm=0755 }
<kernel> /sbin/init /etc/X11/prefdm /usr/sbin/gdm /usr/sbin/gdm-binary /etc/X11/xinit/Xsession /usr/bin/ssh-agent /bin/sh /bin/bash /usr/bin/dbus-launch /etc/X11/xinit/Xclients /usr/bin/gnome-session /usr/bin/nautilus /usr/bin/gnome-terminal /bin/bash /usr/bin/head
file read /etc/fstab

#2012/03/12 15:40:13# profile=3 mode=enforcing granted=no (global-pid=3961) task={ pid=3961 ppid=3904 uid=500 gid=500 euid=500 egid=500 suid=500 sgid=500 fsuid=500 fsgid=500 type!=execute_handler } path1={ uid=0 gid=0 ino=295632 major=253 minor=0 perm=0755 type=file } path1.parent={ uid=0 gid=0 ino=295316 perm=0755 } exec={ realpath="/usr/bin/tail" argc=2 envc=34 argv[]={ "tail" "/etc/passwd" } envp[]={ "SSH_AGENT_PID=3707" "HOSTNAME=livecd.localdomain" "TERM=xterm" "SHELL=/bin/bash" "HISTSIZE=1000" "GTK_RC_FILES=/etc/gtk/gtkrc:/home/centos/.gtkrc-1.2-gnome2" "WINDOWID=24139895" "USER=centos" "LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:" "GNOME_KEYRING_SOCKET=/tmp/keyring-8oUnTf/socket" "SSH_AUTH_SOCK=/tmp/ssh-tsEoIb3676/agent.3676" "SESSION_MANAGER=local/livecd.localdomain:/tmp/.ICE-unix/3676" "USERNAME=centos" "MAIL=/var/spool/mail/centos" "PATH=/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/centos/bin" "DESKTOP_SESSION=default.desktop" "GDM_XSERVER_LOCATION=local" "INPUTRC=/etc/inputrc" "PWD=/home/centos" "XMODIFIERS=@im=none" "LANG=en_US.UTF-8" "GDMSESSION=default.desktop" "SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass" "SHLVL=2" "HOME=/home/centos" "GNOME_DESKTOP_SESSION_ID=Default" "LOGNAME=centos" "DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-WkqSSGbio0,guid=cef7aeb2362c3dddacb141004f5e14b2" "LESSOPEN=|/usr/bin/lesspipe.sh\040%s" "DISPLAY=:0.0" "G_BROKEN_FILENAMES=1" "COLORTERM=gnome-terminal" "XAUTHORITY=/tmp/.gdmDX2ZAW" "_=/usr/bin/tail" } }
<kernel> /sbin/init /etc/X11/prefdm /usr/sbin/gdm /usr/sbin/gdm-binary /etc/X11/xinit/Xsession /usr/bin/ssh-agent /bin/sh /bin/bash /usr/bin/dbus-launch /etc/X11/xinit/Xclients /usr/bin/gnome-session /usr/bin/nautilus /usr/bin/gnome-terminal /bin/bash
file execute /usr/bin/tail

#2012/03/12 15:40:13# profile=3 mode=enforcing granted=no (global-pid=3961) task={ pid=3961 ppid=3904 uid=500 gid=500 euid=500 egid=500 suid=500 sgid=500 fsuid=500 fsgid=500 type!=execute_handler } path1={ uid=0 gid=0 ino=295632 major=253 minor=0 perm=0755 type=file } path1.parent={ uid=0 gid=0 ino=295316 perm=0755 }
<kernel> /sbin/init /etc/X11/prefdm /usr/sbin/gdm /usr/sbin/gdm-binary /etc/X11/xinit/Xsession /usr/bin/ssh-agent /bin/sh /bin/bash /usr/bin/dbus-launch /etc/X11/xinit/Xclients /usr/bin/gnome-session /usr/bin/nautilus /usr/bin/gnome-terminal /bin/bash
file read /usr/bin/tail

さらに TOMOYO Linux を使いこなす

上記手順で解説した内容で、 TOMOYO Linux の基本的なアクセス制御を体験できました。 TOMOYO Linux にはさまざまな機能があります。さらに TOMOYO Linux を使いこなしたいという方は、このページの先頭にあるリンクを辿ってください。