2012年4月30日月曜日

TOMOYO Linuxをためしてみる。

というわけで、TOMOYO Linuxの導入メモ。


TOMOYO Linuxってなんだ?

TOMOYO Linuxは某CCさんの親友T.Dさんのが名前の由来になっている。
元ネタとの関係はLinux「はにゃ~ん♪」化計画を参照、よく考えられてるよ、俺もこんな企画が出来る人になりたいなぁ

名前の由来が漫画だからといって侮る無かれ、TOMOYOはNTTデータがスポンサーについている「強制アクセス制御」の実装だったりする。
「どのプロセスが、どんな資源を使って、何をしようとしているか」を報告させ、場合によっては規制をかけることが出来るという代物。プロセスの動きが見えるのでシステム解析にも使えるらしい。

というわけで、よくわからないので入れてみることにする。


TOMOYO Linuxをインストール

手順はドキュメントをみつつやってみる。

まずはマシンの情報を確認
%cat /etc/`ls /etc -F | grep "release$\|version$"`
CentOS release 6.2 (Final)

%uname -m
x86_64
物によってはバイナリ版が配布されていたりもするが、Centos 6.2のx86_64版はバイナリ配布はしてないので自前でコンパイルすることに。

まずは必要なパッケージをインストール、まぁ「ncurses-devel」以外はデフォルトで入っていると思うけど・・・
%sudo yum -y install wget patch gcc make ncurses-devel

次にカーネルのソースコードをダウソしてきて展開、展開したフォルダの中に移動する。
%wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.3.4.tar.gz
%tar xfvz linux-3.3.4.tar.gz
%cd linux-3.3.4
続いてカーネルにTOMOYO Linuxのパッチを当てる。
今回使うカーネルは3.3.4なので、パッチのファイル名は「ccs-patch-3.3.diff」
%wget -O ccs-patch-1.8.3-20120401.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49684/ccs-patch-1.8.3-20120401.tar.gz'
%wget -O ccs-patch-1.8.3-20120401.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49684/ccs-patch-1.8.3-20120401.tar.gz.asc'
%gpg ccs-patch-1.8.3-20120401.tar.gz.asc
%tar -zxf ccs-patch-1.8.3-20120401.tar.gz
%patch -sp1 < patches/ccs-patch-3.3.diff

コンパイル前の初期設定をする。「Security options」内に設定する部分があるが、今回はデフォルト設定でいく。
make -s menuconfig

いよいよコンパイル。
%make -s dep
%make -s
%make -s modules
%sudo make -s modules_install install
根気強く待っているとそのうち終わる。


管理ツールのインストールと設定の初期化

TOMOYO Linuxの管理に使う管理ツールを準備する。
%wget -O ccs-tools-1.8.3-20120414.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49693/ccs-tools-1.8.3-20120414.tar.gz'
%wget -O ccs-tools-1.8.3-20120414.tar.gz.asc 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/49693/ccs-tools-1.8.3-20120414.tar.gz.asc'
%gpg ccs-tools-1.8.3-20120414.tar.gz.asc
%tar -zxf ccs-tools-1.8.3-20120414.tar.gz
%cd ccs-tools/
%sudo make -s USRLIBDIR=/usr/lib
%sudo make -s USRLIBDIR=/usr/lib install
これで「/usr/lib/ccs」以下にTOMOYO Linuxの関連ファイルがインストールされる。

ファイルは揃ったのでとりあえず設定の初期化
%sudo /usr/lib/ccs/init_policy


ブートローダの設定をして再起動

いよいよ再起動のお時間、、、とその前に、起動時にtomoyo linuxが起動するようにブートローダを書き換えます。
まずはカーネルのファイル名を確認
ls -l /boot
合計 37981
lrwxrwxrwx  1 root root       22  4月 30 12:05 2012 System.map -> /boot/System.map-3.3.4
-rw-r--r--. 1 root root  2313117  1月 24 12:02 2012 System.map-2.6.32-220.4.1.el6.x86_64
-rw-r--r--  1 root root  2477173  4月 30 12:05 2012 System.map-3.3.4
-rw-r--r--. 1 root root   100947  1月 24 12:02 2012 config-2.6.32-220.4.1.el6.x86_64
drwxr-xr-x. 3 root root     1024  1月 31 12:27 2012 efi
drwxr-xr-x. 2 root root     1024  4月 30 14:20 2012 grub
-rw-r--r--. 1 root root 15569772  1月 31 12:29 2012 initramfs-2.6.32-220.4.1.el6.x86_64.img
-rw-r--r--  1 root root 10235246  4月 30 12:06 2012 initramfs-3.3.4.img
drwx------. 2 root root     1024  1月 31 12:21 2012 lost+found
-rw-r--r--. 1 root root   171175  1月 24 12:02 2012 symvers-2.6.32-220.4.1.el6.x86_64.gz
lrwxrwxrwx  1 root root       19  4月 30 12:05 2012 vmlinuz -> /boot/vmlinuz-3.3.4
-rwxr-xr-x. 1 root root  3940016  1月 24 12:02 2012 vmlinuz-2.6.32-220.4.1.el6.x86_64
-rw-r--r--  1 root root  4070368  4月 30 12:05 2012 vmlinuz-3.3.4
日付とバージョン的に考えて、「vmlinuz-3.3.4」が新しいカーネルなんだねきっと。
というわけでGRUBの設定ファイルを確認。
「/boot/grub/grub.conf」を見て「vmlinuz-3.3.4」の設定が増えてるっぽいところを確認、上の方に書かれているので「default=0」としてvmlinuz-3.3.4が起動するように変更。
default=0
timeout=5
#splashimage=(hd0,0)/grub/splash.xpm.gz
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
hiddenmenu

title CentOS (3.3.4)
        root (hd0,0)
        kernel /vmlinuz-3.3.4 ro root=UUID=7e0438cf-9f72-4c99-9e4e-17836e4810ae rd_NO_LUKS rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=hpet console=tty0 console=ttyS0,115200n8r
        initrd /initramfs-3.3.4.img

title CentOS (2.6.32-220.4.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-220.4.1.el6.x86_64 ro root=UUID=7e0438cf-9f72-4c99-9e4e-17836e4810ae rd_NO_LUKS rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=hpet console=tty0 console=ttyS0,115200n8r
        initrd /initramfs-2.6.32-220.4.1.el6.x86_64.img

そしていよいよreboot!
%sudo reboot
起動したのでカーネルが変わっているか確認してみる。
%uname -s -r
Linux 3.3.4
よいらしい、なのでさっそく試してみる。


TOMOYO Linuxの起動確認

TOMOYO Linuxの「ccs-editpolicy」という管理ツールを使ってドメインを見てみる
%sudo /usr/sbin/ccs-editpolicy
「ドメイン」というのは「プロセスの実行履歴」ということらしい。
ということは、これを確認すれば「どういう経路を伝ってだれに呼ばれたのか?」がわかるということだ。

そこでいま起動した「ccs-editpolicy」を探してみたところ、こんな感じらしい。
<kernel> /usr/sbin/sshd /bin/bash /usr/sbin/ccs-editpolicy
この記述によると、呼び出しの順番はこんな感じ。
  1. kernel
  2. sshd
  3. bash
  4. ccs-editpolicy
今はsshでリモートログインしながら使っているので、 sshd(リモートログイン)がbash(ログインシェル)を呼び出し、bashがccs-editpolicyという挙動を取っている。

このように、実行履歴(TOMOYO用語でドメイン)がわかるので、ドメインに対する権限を調整すると、「sshログインではXXできるが、telnetログインではできない」というようなアクセス制御が出来るらしい。
つまり、「リモートログインのやつにはsuやsudoさせない」とかいうことも可能ってことなのか?。


TOMOYO Linuxの使い道?

ドメイン(実行履歴)がわかるというのはなかなか面白いことだと思う。

たとえばなんだか分からないプロセスが動いていたとして、ドメインを確認すればだいたい何をしているのかわかるかもしれない、「こいつがこれを呼ぶのはおかしい、ウィルスじゃね?」とかもわかるわけだ。

設定とかをもろもろした直後の、ウィルスなどに感染する前のドメインをすべて記録して、それ以外をすべて禁止すれば、ウィルスを送り込まれてもビクともしないシステムにできるかもしれない。

システムの振る舞いを調べたい人やセキュリティに興味が有る人は暇な時にためしてみるといいよ〜

2012年4月29日日曜日

Linuxで管理人ユーザを作成してみる

長いこと使っていなかったのでLinuxの勉強やり直し。
VPSの初期状態(rootユーザはいるが、普通のユーザがいないよ)からはじめる


鯖管は基本的に一人ではやらないはず、にもかかわらずrootさんしかいないと「だれが何をやったのか?」がわからなくなってしまう。
なので管理人がいるならrootとは別に「管理人ユーザ」を作っておいたほうがいいらしい。

そこで管理人ユーザを作成してみるが、この時、「うっかり大事な操作をしてしまわないようにする」のも大事だと思う。
そこで管理人は管理人でも「大事な操作の時には一手間必要になる管理人」を作成してみる。


アクセス制御をいろいろやる方法もあるけれど、ここは手っ取り早く「sudoコマンドを使わないと大事な操作ができない」ユーザを作ってみる。


まずはユーザの追加から

管理者(root)でログインして「users」というグループの「yosilove」さんを作成し、パスワードを付与する。
#useradd -g users yosilove 
#passwd yosilove 
この時、あえて管理者グループ(wheel)には入れない。
普段使いのユーザが管理者権限を持っていると、大事な設定ファイルをうっかり編集して大変なことになってしまうことがあるので・・・

なんでもかんでも簡単にできちゃうrootなユーザはなるべく誰も(自分も)使わないようにする。


一時的に管理者権限が使えるように

とはいえ、このままだと設定変更をするたびにrootでログインしないといけないという面倒な事態になるので、 必要な時だけ管理者権限(厳密にはroot(管理者)よりは権限低いけど)を使えるようにする。

というわけで一時的に管理者権限を使えるようにするためのコマンド(sudo)の設定ファイルを修正。
まずは編集権限をあげる
chmod +w /etc/sudoers
好きなエディタで開いて「yosiloveが どのホストからも=(あらゆる権限で) どんなコマンドでも」実行できるようにする
yosilove        ALL=(ALL)       ALL
そしてうっかり編集を防ぐために編集権限をなくしておく。
chmod -w /etc/sudoers


さて、うまくできたか試してみる。
まずはrootユーザでファイルを作成、当然他人は見れないはず。
#touch /root/Mienai_file.txt
#ls -l /root
合計 0
-rw-r--r-- 1 root root 0  4月 29 20:27 2012 Mienai_file.txt
ユーザをyosiloveに変えてためしてみるが、狙い通りやはり見えない
$su yosilove
$ls /root
ls: cannot open directory /root: 許可がありません
だがしかし、sudoコマンドを使うと管理者権限で実行できるので見える
$sudo ls -l /root
合計 0
-rw-r--r-- 1 root root 0  4月 29 20:27 2012 Mienai_file.txt


できたー!!