LSMの作り方で質問です

KaiGai Kohei kaigai at ak.jp.nec.com
Wed Nov 14 00:03:13 EST 2007


面さん

海外です

補足させてください。

/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
------------

以上です

KaiGai Kohei wrote:
> 海外です。
> 
> 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