2014年12月31日水曜日

SELinux →判らないのでoff / apparmor → わかりやす!

CentOS6とかで、何某かの事情でhttpdのDocumentRootを変えたいとき、大抵の人が喰らってメゲるのであろうSELinux。正直小生もメゲました。

小生「SELinuxってどうしてます?」
責任者「offにしてます :) 」
どうやら出稼ぎ先ではSELinuxの実績がないらしい。アッサリ諦めて小生もoffにしました。


SELinux。

本家って何処だろう。ここかな。
http://selinuxproject.org/page/Main_Page

難解ですよね。何がって、「独自の用語の馴染まなさ」と「暗黙の挙動」が。

http://itpro.nikkeibp.co.jp/article/COLUMN/20070827/280414/?ST=oss&P=2

  • プロセスには「ドメイン」というラベルが付与される 
    • 誰が?どんなルールで? 
    • プロセスドメインとか呼んだら判りやすくなる気がする 
  • ファイルなどのリソースには「タイプ」と呼ばれるラベルが付与される 
    • 誰が?どんなルールで? 
    • ファイルドメインとか呼んだら判りやすくなる気がする 
しかしファイルに付与するのはドメインじゃなくて、ユーザ+ロール+タイプ+レベルだったりします。何の頓知でしょう。ドメインからロール+タイプへの変換表がないとお話にならないって事じゃありませんか。

「体で覚える」系の人には、実践例を書いてくださってる人もいますね。

http://park1.wakwak.com/~ima/centos4_apache0002_p2.html

このhttpd_sys_script_exec_tてのが何処からともなく出てくる感が、判らなさに拍車を掛けています。前述のURLの方も、マネして書き足すだけが精一杯(?)

肝心のこのタイプ一覧って何処かに無いものでしょうか?

http://itpro.nikkeibp.co.jp/article/COLUMN/20070828/280518/

 この方法でトラブルを解決するには,「ドメインがどのタイプにアクセス可能か」を事前に知っておく必要がある。すべてのドメインについて把握するのは不可能に近いが,トラブル解決によく使うタイプだけは知っておこう。

諦めとる :(

httpdについてはwikiありました。

http://linux.die.net/man/8/httpd_selinux

Oracleがもの凄い丁寧な説明を書いてますが、

https://docs.oracle.com/cd/E39368_01/e48214/ch23s02.html

読めば読むほど判らない。

多機能で確実なのは判るのですが、これ考えた人天才過ぎです。小生は凡人なのでついていけない。

対して、ubuntu系ではお馴染みのapparmor。/etc/apparmor.d にウジャウジャ設定ファイルを置くタイプですが、設定の意図は見れば判ります。

例えば、ubuntuの実際のファイルはこんな感じです。

https://gist.githubusercontent.com/anonymous/d46479d81b3cd2791d8f/raw/0b1ea89e231584b4806b8ad748fc7d6bbeb6a1a4/gistfile1.txt

ハイ、判りましたね :)

よく判らんのですが、apparmorはSUSE発祥らしい。
https://ja.opensuse.org/AppArmor

恐らくSELinuxとapparmorを大雑把に比較するなら

  • (プロセスから)ファイルへのアクセスをファイル側メタデータで管理するSELinux 
  • プロセスの挙動をプロセス側定義ファイルで管理するapparmor 
そんな感じでしょうか。