LSMの作り方で質問です
KaiGai Kohei
kaigai at ak.jp.nec.com
Tue Nov 13 23:48:15 EST 2007
海外です。
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 を付けていたと記憶しています。
参考になったでしょうか?
以上です
--
OSS Platform Development Division, NEC
KaiGai Kohei <kaigai at ak.jp.nec.com>
More information about the JP-kernelnewbies
mailing list