2007年11月14日

[selinux-users:02051] Re: [解決] LSMの作り方で質問(Re: Re: LSMの作り方で質問)

海外です。

jp-kernelnewbies@xxxxx のMLで面さんに Reply した際の
私のメールを転送します。たぶん有益な内容だと思いますので。

# ちなみに、このMLはOSS開発に関するよろず相談を日本語でできる
# という位置づけのコミュニティです。(軽く宣伝)
# http://lists.kernelnewbies.org/mailman/listinfo/jp-kernelnewbies


---- ここから転送 ------------
海外です。

Kazuki Omo wrote:
> > 皆様、始めまして
> >
> > 面と申します。
> >
> > SELinuxやAppArmor, TOMOYOとかと同じセキュアOSモジュールの一つである
> > LIDSの開発者になっています。

LKMLデビューを楽しみにしています。

> > LIDSをカーネル本体に載せようと思ってSubmitする予定ですが、
> > 他の実装(AppArmorとかTOMOYOとか)をよく見れていないんですけれど、
> > SELinuxをDisabled(/etc/selinux/config)の状態で入れてるんでしょうか?
> >
> > 何が言いたいかというと、素のカーネルですとSELinuxがデフォルトで
> > 組み込まれるようにチェックが入っています。
> >
> > で、そのチェックボックスを外して、AppArmor/TOMOYOを選択するという
> > 方式なのか(LIDSは現在はこの形)、そのチェックボックスは入れたままで
> > AppArmor/TOMOYOもmenuconfig等で選択してカーネルを構築し、
> > /etc/selinux/configの記述をDisabledにしているのかを知りたいです。
> >
> > ちなみに、昨日ちょっと作ってみたのですが、SELinuxのチェックボックスを
> > つけたままですと、LIDSでregister_security()を予備に行った時に
> > 「既にregisterされている」エラーが返って来ます。どうやら、SELinuxが
> > 先にregisterしているようです。ですので、他の実装ではどうやって
> > いるのかが気になります。

SELinux を disable にするには3つの方法があります。
1. /etc/selinux/config で SELINUX=disabled と記述する
2. カーネル起動オプションに selinux=0 と記述する
3. カーネルコンフィグで SELinux のチェックボックスを外す

しかし厳密には、(1)と(2)及び(3)には違いがあり、SELinux以外のセキュリティモジ
ュールを利用するには (2) か (3) の方法を使う必要があります。

(2)と(3)の場合は、LSMへのモジュール登録関数である register_security() 関数を
コールしません。したがって、誰もLSMを専有していないために、後でセキュリティ
モジュールを登録する事が可能です。

しかし、(1)の場合は事情が異なります。
まず、カーネル初期化プロセスでは SELinux が自らを LSM モジュールに登録し、
Permissive mode相当の状態になります。次に、最初のプロセスである /sbin/init が
/etc/selinux/config を読み出し、SELINUX=disable の記述があれば SELinux を無効
化します。しかし、SELinuxはLSMモジュールから自らをアンロードしません。
したがって、SELinuxがLSMを専有したままになるため、他のセキュリティモジュールを
登録する事はできません。
この理由は、カーネル初期化プロセスの段階では /etc/selinux/config の内容を読出す
事ができないためです。(ファイルシステムはこの時点ではマウントされていません)

SuSEの場合は、カーネル自体に SELinux は入っているものの、AppArmorをロードする
ためにカーネル起動オプションに selinux=0 を付けていたと記憶しています。

参考になったでしょうか?

以上です

---- さらにもう一通 ------------
面さん

海外です

補足させてください。

/etc/selinux/config に SELINUX=disabled と書いた場合の dmesg
------------
SELinux: Initializing.
SELinux: Starting in permissive mode
selinux_register_security: Registering secondary module capability
Capability LSM initialized as secondary
------------

カーネル起動オプションで selinux=0 と書いた場合の dmesg
------------
SELinux: Disabled at boot.
Capability LSM initialized
------------

このように、起動時のログからも相違点が分かります。
カーネル起動オプションの selinux=0 だけでは、POSIX Capability が LSM を
専有してしまいますので、capability.disable=1 も併せて指定する必要があり
ますね。

カーネル起動オプションで selinux=0 capability.disable=1 と書いた場合
------------
SELinux: Disabled at boot.
Capabilities disabled at initialization
------------

以上です

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




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