cms on selinux
DESCRIPTION
2008年OSC名古屋(夏)資料TRANSCRIPT
CMS on SELinux (やってみた編)
日本セキュアOSユーザ会
石川 裕基
Agenda
1. SELinux の概略
2. CMS on SELinux
1. SELinux の概略
SELinux の概略 (アクセス制御(TE))
「誰(Subject)が何(Object)に対して何をするか(Action)」の巨大なルール集
事前に許可をした動作のみを可能にする httpd プロセス が A.html に対して読み込みをする
Subject, Object, Action の例
Subject Process
Object File / Directory
Action Read / Write / Link
SELinux の概略 (ラベル)
Subject, Object に付与された特殊な文字列
全てのSubject, Object にはラベルが付与される Subject に付与されるラベル = ドメイン
Object に付与されるラベル = タイプ
付与されるラベルの例
httpd httpd_t
/var/www/html(/.*)? http_sys_content_t
/etc/shadow shadow_t
SELinux の概略 (アクセス制御とラベル)
Subject, Object 付与されたラベルを もとにアクセス制御を行う
(httpdプロセス) の (A.html) に対する (読み込み)を許可
(httpd_t) の (httpd_sys_content_t) に 対する (read) を許可
2. CMS on SELinux
CMS on SELinux (前提条件)
以下の環境下で動作検証を行う
OS(Linux) CentOS 5.2
SELinux Targeted Policy 2.4.6-137
Web Apache 2.2.3
PHP - 5.1.6
DB MySQL 5.0.45-7
CMS XOOPS (ホダ塾ディストリビューション)
1.0.1b
※ アプリケーションは全て yum を使用してインストールをする
CMS on SELinux (必要なAction)
XOOPS が動作するために必要なAction
1. httpd から XOOPS を読み込みができる
2. httpd から XOOPS に書き込みができる
3. httpd から XOOPS DBに接続ができる
4. 適切なラベルを付与する
最も簡単な方法を紹介
CMS on SELinux (必要なAction)
1. httpd から XOOPS を読み込みができる
⇒ /var/www/html 以下に XOOPS を配置する
Webコンテンツに付与されるラベルは
一般的には httpd_sys_content_t である
/var/www/html 以下に配置されたファイルには
httpd_content_t が付与される
XOOPS を Apache (httpd_t) から
読ませて良いファイルとして設定する
CMS on SELinux (必要なAction)
2. httpd から XOOPS に書き込みができる
⇒ # setsebool -P httpd_builten_scripting 1
Boolean値と呼ばれるものを変更することで
書き込みを可能にすることができる
変更するBoolean値は
「httpd_builten_scripting」である
httpd_sys_content_t は httpd_t からの 読み込みのみを許可する
CMS on SELinux (必要なAction)
2. httpd から XOOPS に書き込みができる(※)
⇒ # setsebool -P httpd_builten_scripting 0
⇒ # semanage fcontext -a -t httpd_sys_script_rw_t ‘/var/www/html/hd(/.*)?’
書き込みを行いたい対象のみを httpd_t から
書き込ませて良いものとしてラベリングする
httpd_t の 書き込みを許可するラベルは
httpd_sys_script_rw_t である
前述の場合、全ての httpd_sys_content_t に 影響を及ぼす
CMS on SELinux (必要なAction)
3. httpd から XOOPSのDB(mysql) に接続できる
⇒ # setsebool -P httpd_can_network_connect_db 1
外部の DB を使用する場合は Boolean値を変更する必要がある
変更するBoolean値は 「httpd_can_network_connect_db」である
local に存在するの DB に接続する場合は 対応する必要はない
CMS on SELinux (必要なAction)
4. 適切なラベルを付与/再構築する
ラベルが適切に設定されていない場合、 不正なアクセスとして処理される
適切なラベルを付与/再構築する
SELinux はラベルを用いてアクセス制御を行う
⇒ # touch /.autorelabel && shutdown -r now (または、) # restorecon -RF -v /var/www
Demo
時間があれば Demo をします。