TOP情報セキュリティ> ケーパビリティを設定する場合
LIDS
なぜなにLIDS〜シンプル・セキュアOS〜

歴史と機能と設定と

著者:日本SELinuxユーザ会 LIDS支部  面 和毅   2007/6/26
前のページ  1  2  3
ケーパビリティを設定する場合

   ケーパビリティはlinuxカーネル2.4から採用されました。一般的な「特権(uid=0)」を約30種類の「ケーパビリティ」と呼ばれるものに分割し、それぞれをプロセスに割り当てられるようにすることで、プロセスが不要な権限を持たないようにする考え方です。

   カーネル2.6では以下の表9のように分割されています。
CAP_CHOWN
CAP_DAC_OVERRIDE
CAP_DAC_READ_SEARCH
CAP_FOWNER
CAP_FSETID
CAP_KILL
CAP_SETGID
CAP_SETUID
CAP_SETPCAP
CAP_LINUX_IMMUTABLE
CAP_NET_BIND_SERVICE
CAP_NET_BROADCAST
CAP_NET_ADMIN
CAP_NET_RAW
CAP_IPC_LOCK
CAP_IPC_OWNER
CAP_SYS_MODULE
CAP_SYS_RAWIO
CAP_SYS_CHROOT
CAP_SYS_PTRACE
CAP_SYS_PACCT
CAP_SYS_ADMIN
CAP_SYS_BOOT
CAP_SYS_NICE
CAP_SYS_RESOURCE
CAP_SYS_TIME
CAP_SYS_TTY_CONFIG
CAP_MKNOD
CAP_LEASE
CAP_AUDIT_WRITE
CAP_AUDIT_CONTROL

表9:カーネル2.6でのケーパビリティの状況

   例えばhttpdにPort80番を使用させたい場合には、今までは特権ポート(1023番以下のポート)を使用するためにuid=0で動作させる必要がありました。しかしケーパビリティを活用することで、図2のように「CAP_NET_BIND_SERVICE」というケーパビリティを与えるだけでよくなります。

ケーパビリティを付与した例
図2:ケーパビリティを付与した例

   このようにプログラムにケーパビリティを設定する場合、通常のLinuxではlibcapパッケージに含まれる「getpcap/setpcap」コマンドを使用します。しかしこのコマンドは使用方法が意外に面倒なことがあります。それに比べてLIDSでは以下のコマンドを実行するだけで済むため、非常に直観的にプロセスにケーパビリティを割り当てることができます。

lidsconf -A -s /usr/sbin/httpd -o CAP_NET_BIND_SERVICE 80 -j GRANT


最新の動向/開発状況と将来像

   最初の「特徴」部分でも述べましたが、LIDSは昨年から一時開発が停滞し(LIDSは死んだという話も出たぐらい)、開発/活動が活発でないコミュニティとみられていました。

   2006年の「LSM不要論」の際には「LSMを用いて実装しているので、LIDSをカーネルのメインラインに統合しよう」という動きも出ていたくらいだったのですが、停滞のために初期(1999年頃)からLIDSを使用していたユーザも、離れていってしまいました。

   しかし、今年の5月に入って最新のカーネル2.6.21に対応したバージョンが公開され、開発が再開されています。なお今回のバージョンでは、筆者自身がメインで開発を行っています。

   最新バージョンでは以下のような変更・追加を行っています。

  • カーネル2.6.21に対応(Cryptoやfile構造体まわりの修正)
  • 組み込みに特化したACL-shrink機能の実装
  • LIDS_EXECの実装/CAP_KILLなどLIDSに特化したケーパビリティの修正

表10:最新バージョンでの変更・追加点

   これによって、最新のカーネルでも旧来のLIDSの機能を使用できるようになりました。

   また、今後はTDE/TPE/SandboxingやNF_MARKなど、ネットワークまわりの機能をLIDS-2系列に実装し、年内にlids-2.2.3をリリースしたいと考えています。このなかでもNF_MARKのアイデアは面白く、これを使用することによって同じポート番号を使用するプログラムでも異なったroutingを書けるようになります。

   図3はネットワークの負荷分散のために、MF_MARKを使ってPort80宛にアクセスするFireFoxと、パッケージ管理ツールのaptコマンドで、それぞれで違うルータを経由する例を解説したものです。

MF_MARKの利用例
図3:MF_MARKの利用例

   また、以前のバージョンで実装していた、プロセス間通信やメモリまわりの制御も再実装していこうと考えています。

   このように、LIDSは「単なるセキュアOS」というよりも、「他のツール類(iptablesなど)と連係する、セキュリティツール」というスタンスをとっています。ここで紹介した以外にもいろいろアイデアをだし、それを実装するといった形で開発が進められています。

   皆様もLIDSを使用してみて、コミュニティに「このような実装は面白いよね」とアイデアをだしていただければ幸いです。

前のページ  1  2  3


日本SELinuxユーザ会 LIDS支部 面 和毅
著者プロフィール
日本SELinuxユーザ会 LIDS支部    面 和毅
1997年よりサーバ構築およびセキュリティ全般をあつかう仕事に従事し、Linuxを触りはじめる。現在LIDSの布教活動に力を入れており、SELinuxユーザ会内でLIDS支部を立ち上げている。活動として、最新バージョンのLIDSの開発と、LIDSを用いたシステム構築の紹介を行っている。


INDEX
歴史と機能と設定と
  LIDSの歴史
  LIDSの導入方法
ケーパビリティを設定する場合