DebianでSELinux (新しいロールの作成) [Linux]
先日のエントリで、やっぱり意味がわからなかったので、素直にrefpolicyからビルドしてみることにした。
staffからmyroleを作ってみることにする。
staff自体の定義は policy/modules/roles/staff.xxになっている。
te : タイプ(型定義)
fc : ファイルコンテキスト
if : インターフェイス(外部参照定義)
これはどのモジュールでも一緒だが、ロールにおいてはfcは存在せず、ifも大したことがない。
teも先日のrefpolicyのページ(http://www.selinuxproject.org/page/RefpolicyBasicRoleCreation)に書いてあるとおり、ロールそのものの定義と、templateを使った宣言がかかれている。あとは他のアプリケーションなどへのアクセス権の設定のみである。
role myrole_r;
userdom_unpriv_user_template(myrole)
staffからコピーしてmyrole_rを定義して、policy/modules.confにmyroleを追加。
その後、 make; make install; make loadしてみると、デフォルトタイプが無いと言われる。
で、上記のページによると、デフォルトタイプとデフォルトコンテキストを定義しろとある。
それらのファイルがどこにあるかというと
config/appconfig-mls/default_contexts
config/appconfig-mls/default_type
にあって、HPにあるように追加すると、
# newrole -r myrole_r
root:myrole_r:myrole_t:s0-s15:c0.c1023 は有効なコンテキストではありません
お、あと少しな感じ。つまりrootユーザーに大してmyrole_rがペアになっていないという意味だろう。
そこで、それらしいのを探してみると、
policy/users に
gen_user(root, sysadm, sysadm_r staff_r ifdef(`enable_mls',`secadm_r auditadm_r') system_r, s0, s0 - mls_systemhigh, mcs_allcats)
と、書かれている。usersのファイルを見てみると、ユーザーとそれに属することができるロールを書いておくものらしい。staff_rの横にmyrole_rを追加する。
・・・
# newrole -r myrole_r
パスワード:
# id -Z
root:myrole_r:myrole_t:s0-s15:c0.c1023
と、無事ロールを作ることができた。最初のモジュール作るところだけだと問題ないが、最後のgen_userのところを考えると、ソースからビルドしないと新規ユーザーは追加できないようだ。
あとrefpolicyでビルドするときにbuild.confをいじったらmake install-headersは必ずやる必要がある。別モジュールをビルドするときにも文句を言われる。
今のところロールを作れたからなんだというわけでもないが、作ることでSELinuxの理解にもつながる。
完成した今にしてみると・・・
・rootと結びつくロールは何か users
・ロールはどのドメインに属しているか default_type
デフォルトコンテキストがまったく役に立っていないことがわかる
というものsshでのログイン直後はremoteログイン扱いでstaff_rになっているので、myroleがいきなり使われることはない。
そう考えると、ここからの発展型としては別のユーザーのデフォルトロールをmyroleにすることなんだろうが、それが案外難しい。
まずrootアカウントは当然のごとく1つしかないので、ログイン直後はsysadm_rなりstaff_rになってしまう。これを変更するなら素直にstaff_rを変更すればいい。(どうせソースからビルドしているんだし)
通常のユーザーはuser_u:user_rとなっているが、そもそも一般ユーザーはルートよりも権限が無いので、余程の特殊なことがしたいわけでもない限りは特別にロールを作る必要はない。
あと、ロールを作ってはみたもののパスワードは必ずルートのパスワードを入力させられるので、これもセキュリティになっているのか激しく謎である。ルートとしてログインしている以上、簡単にsysadm_rにはなることができるので、新しいロールを作る必要も無いし、リモートだからと最初がstaff_rにさせられている理由もわからない。
イマイチここらへんのSELinuxとしての考え方、思想がわからない。ロールに関しては作れるけどあまり意味はないということだろうか。
というわけで、次はMLSのエラーを消すことを目標にしてみる。
staffからmyroleを作ってみることにする。
staff自体の定義は policy/modules/roles/staff.xxになっている。
te : タイプ(型定義)
fc : ファイルコンテキスト
if : インターフェイス(外部参照定義)
これはどのモジュールでも一緒だが、ロールにおいてはfcは存在せず、ifも大したことがない。
teも先日のrefpolicyのページ(http://www.selinuxproject.org/page/RefpolicyBasicRoleCreation)に書いてあるとおり、ロールそのものの定義と、templateを使った宣言がかかれている。あとは他のアプリケーションなどへのアクセス権の設定のみである。
role myrole_r;
userdom_unpriv_user_template(myrole)
staffからコピーしてmyrole_rを定義して、policy/modules.confにmyroleを追加。
その後、 make; make install; make loadしてみると、デフォルトタイプが無いと言われる。
で、上記のページによると、デフォルトタイプとデフォルトコンテキストを定義しろとある。
それらのファイルがどこにあるかというと
config/appconfig-mls/default_contexts
config/appconfig-mls/default_type
にあって、HPにあるように追加すると、
# newrole -r myrole_r
root:myrole_r:myrole_t:s0-s15:c0.c1023 は有効なコンテキストではありません
お、あと少しな感じ。つまりrootユーザーに大してmyrole_rがペアになっていないという意味だろう。
そこで、それらしいのを探してみると、
policy/users に
gen_user(root, sysadm, sysadm_r staff_r ifdef(`enable_mls',`secadm_r auditadm_r') system_r, s0, s0 - mls_systemhigh, mcs_allcats)
と、書かれている。usersのファイルを見てみると、ユーザーとそれに属することができるロールを書いておくものらしい。staff_rの横にmyrole_rを追加する。
・・・
# newrole -r myrole_r
パスワード:
# id -Z
root:myrole_r:myrole_t:s0-s15:c0.c1023
と、無事ロールを作ることができた。最初のモジュール作るところだけだと問題ないが、最後のgen_userのところを考えると、ソースからビルドしないと新規ユーザーは追加できないようだ。
あとrefpolicyでビルドするときにbuild.confをいじったらmake install-headersは必ずやる必要がある。別モジュールをビルドするときにも文句を言われる。
今のところロールを作れたからなんだというわけでもないが、作ることでSELinuxの理解にもつながる。
完成した今にしてみると・・・
・rootと結びつくロールは何か users
・ロールはどのドメインに属しているか default_type
デフォルトコンテキストがまったく役に立っていないことがわかる
というものsshでのログイン直後はremoteログイン扱いでstaff_rになっているので、myroleがいきなり使われることはない。
そう考えると、ここからの発展型としては別のユーザーのデフォルトロールをmyroleにすることなんだろうが、それが案外難しい。
まずrootアカウントは当然のごとく1つしかないので、ログイン直後はsysadm_rなりstaff_rになってしまう。これを変更するなら素直にstaff_rを変更すればいい。(どうせソースからビルドしているんだし)
通常のユーザーはuser_u:user_rとなっているが、そもそも一般ユーザーはルートよりも権限が無いので、余程の特殊なことがしたいわけでもない限りは特別にロールを作る必要はない。
あと、ロールを作ってはみたもののパスワードは必ずルートのパスワードを入力させられるので、これもセキュリティになっているのか激しく謎である。ルートとしてログインしている以上、簡単にsysadm_rにはなることができるので、新しいロールを作る必要も無いし、リモートだからと最初がstaff_rにさせられている理由もわからない。
イマイチここらへんのSELinuxとしての考え方、思想がわからない。ロールに関しては作れるけどあまり意味はないということだろうか。
というわけで、次はMLSのエラーを消すことを目標にしてみる。
コメント 0