2008年8月15日

[selinux-users:02125] Fallback Label Configuration Example

海外です。

先日の Linux Foundation シンポジウムで来日した Paul Moore 氏が、
自身のブログで『Fallback Label Configuration Example』と題して、
CIPSOやLabeled IPsecといったプロセスのセキュリティコンテキストを
伝播させるプロトコルが利用*できない*場合に、接続元IPアドレスや
ネットワークデバイスに基づいて、代替のセキュリティコンテキストを
設定するための方法を記しています。


http://paulmoore.livejournal.com/1758.html

重要な情報である割には、意外と認知されていませんので、勝手に翻訳
してみました。ご参考になれば。

================================================================
Linux カーネル v2.6.25 で追加された新機能の一つが、NetLabelを利用した
ピアーラベル(peer label)のフォールバックの設定です。この機能は、システ
ム管理者が(CIPSO や Labeled IPsecなどの)ピアーラベル伝達プロトコルが
有効で無い場合のピアラベルを設定する事を可能にします。
この記事では、ピアーラベルのフォールバックを設定するための NetLabel の
設定方法を簡潔に紹介しようと思います。

その最初のステップは、Linux カーネルと設定ツールの双方が正しくインストー
ルされている事を確認する事です。標準的なディストリビューションの Linux
カーネル v2.6.25 以降で NetLabel は正しく機能します。加えて、設定ツール
である netlabelctl が新しい設定オプション
をサポートしている事を確認する必要があります。これは netlabel_tools パッ
ケージ v0.18 以降でなければいけません。
以下のコマンドの実行により、正しいバージョンがインストール/実行されている
事を確認できます。

# netlabelctl -p mgmt version
NetLabel protocol version : 2

最初のコマンドは、Linuxカーネルが NetLabel 制御プロトコル ver.2 を解釈で
きる事を意味しており、これにはピアーラベルのフォールバックを設定するため
の設定オプションが含まれています。

# netlabelctl -h
NetLabel Control Utility, version 0.18 (libnetlabel 0.18)
Usage: netlabelctl [<flags>] <module> [<commands>]

Flags:
-h : help/usage message
-p : make the output pretty
-t <secs> : timeout
-v : verbose mode

Modules and Commands:
mgmt : NetLabel management
version
protocols
map : Domain/Protocol mapping
add default|domain:<domain> protocol:<protocol>[,<extra>]
del default|domain:<domain>
list
unlbl : Unlabeled packet handling
accept on|off
add default|interface:<DEV> address:<ADDR>[/<MASK>]
label:<LABEL>
del default|interface:<DEV> address:<ADDR>[/<MASK>]
list
cipsov4 : CIPSO/IPv4 packet handling
add trans doi:<DOI> tags:<T1>,<Tn>
levels:<LL1>=<RL1>,<LLn>=<RLn>
categories:<LC1>=<RC1>,<LCn>=<RCn>
add pass doi:<DOI> tags:<T1>,<Tn>
del doi:<DOI>
list [doi:<DOI>]

次のコマンドは netlabelctl の v0.18 がインストールされており、次に利用す
るフォールバックの設定コマンドがサポートされている事を確認します。

全て問題なければ、設定を確認するためのテストツールをビルドするステップに
進みましょう。
厳密に言えば、これはピアラベルのフォールバックを設定するのに必要な事では
ありませんが、あなたの設定が正しい事を確認するには良い方法でしょう。
ここで利用するシンプルなテストツールは、IPv4のTCPソケット用に基本的なピ
アラベルの機能をテストするためのもので、これを getpeercon_server と呼び
ます。C言語のソースコードをダウンロードし、以下のコマンドによってコンパ
イルする必要があります。Fedoraシステム上であれば、libselinux-develパッケ
ージがインストールされている事を確認してください。

# gcc -o getpeercon_server getpeercon_server.c -lselinux
# ./getpeercon_server
usage: ./getpeercon_server <port>

見ての通り、getpeercon_server は接続を待つための TCP ポート番号を引数と
して取ります。
もし、getpeercon_server をポート5000で起動し、telnetやnetcat等でこれに接
続したなら、以下のように表示される事でしょう。

# ./getpeercon_server 5000
-> creating socket ... ok
-> listening on TCP port 5000 ... ok
-> waiting ... connect(127.0.0.1,NO_CONTEXT)
Hello NetLabel Fans!
-> connection closed
-> waiting ...

上記の例では、クライアントは localhost (127.0.0.1) から接続しており、この
接続からはピアーラベルを取得できていない (NO_CONTEXT) 事がわかります。では、
続いて localhost にピアーラベルのフォールバックを設定してもう一度やってみ
ましょう。
フォールバックを追加するのは簡単で、コマンド一個で設定する事が可能です。下
記の実行例は2つのコマンドを実行していますが、最初のコマンドは、フォールバッ
クのピアーラベル "system_u:object_r:netlabel_peer_t:s0" を、ネットワークデ
バイス "lo" 経由の送信元アドレス 127.0.0.1 から来たトラフィックに追加指定ま
す。
次のコマンドは、全てのフォールバックのピアーラベルを表示しています。これは
必要な手順ではありませんが、設定が正しく行われている事を確認するのに役立ち
ます。

# netlabelctl unlbl add interface:lo address:127.0.0.1 \
label:system_u:object_r:netlabel_peer_t:s0
# netlabelctl -p unlbl list
Accept unlabeled packets : on
Configured NetLabel address mappings (1)
interface: lo
address: 127.0.0.1/32
label: "system_u:object_r:netlabel_peer_t:s0"

では、この新しいフォールバックのピアーラベルの設定の下で、もう一度テストを
行ってみましょう。

# ./getpeercon_server 5000
-> creating socket ... ok
-> listening on TCP port 5000 ... ok
-> waiting ... connect(127.0.0.1,system_u:object_r:netlabel_peer_t:s0)
Fallback Labels Are Really Cool!
-> connection closed
-> waiting ...

結果を見ると、一個の重要な点を除くと最初の実行例と同じである事に気が付くで
しょう。先ほどの NO_CONTEXT に代わり、テストツールは設定したフォールバック
のピアーラベルを表示しています。
Linuxカーネルは、CIPSOタグやLabeled IPsec Security Associationで与えられる
通常のピアーラベルと同じように、このフォールバックのピアーラベルを取り扱う
事ができます。
この事は、フォールバックのピアーラベルをアプリケーションに伝達するだけでな
く、LSM(この場合はSELinux)のネットワークセキュリティポリシーを適用する場
合に利用できるという事を意味します。
しかしながら、フォールバックのピアーラベルは、CIPSOやLabeled IPsecによって
オーバーライドされるという重要な特徴は気に留めておいてください。つまり、フ
ォールバックとLabeled IPsec情報の双方が利用可能である場合、Linuxカーネルは
Lebeled IPsec情報を利用し、フォールバックを無視します。
フォールバックのピアーラベルは、ネットワークインターフェース、ネットワーク
アドレスとネットマスクの組み合わせ、あるいは、"default" ネットワークインタ
ーフェースが選択された場合には、単純にネットワークアドレスとネットマスクの
組み合わせによって決定されます。

NetLabelのフォールバックピアーラベルを利用する前に、少し考えておくべき事が
あります。
一つは、フォールバック機能は Linux カーネル v2.6.25 にマージされていますが、
"netlabelctl -p unlbl list" コマンドにでは IPv6 のフォールバックピアーラベ
ルを表示できないというものです。この問題は v2.6.26 で修正されました。
もう一つは、Fedora が netlabel_tools v0.18 をまだ採用していないため、新しい
フォールバックの機能を利用するためには netlabelctl を別途ダウンロードしてビ
ルドしなければならないというものです。
Red Hat の Bugzilla には、最新の netlabel_tools パッケージを Fedora にマージ
するよう要求するエントリーがファイルされています。

* テストツールのダウンロード
http://free.linux.hp.com/~pmoore/files_lj/getpeercon_server.c
* NetLabel 設定ツールのダウンロード (v0.18)
http://sourceforge.net/project/showfiles.php?group_id=174379
* Fedora Bugzilla エントリー (#439833)
https://bugzilla.redhat.com/show_bug.cgi?id=439833

--
KaiGai Kohei <kaigai@xxxxx>


投稿者 xml-rpc : 2008年8月15日 23:49
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/76258
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。