第1回 CMSツールをよりセキュアに導入しよう
面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2007/5/23
Zopeドメインの構成情報を考える
では、Zopeを動作させる上でのドメイン構成を考えてみましょう。
- まず、プロセスやファイルにつくタイプ(プロセスの場合には特にドメインと呼びます)を決めましょう。zopeのプロセスが動作するドメインをzope_tとします。
- 次に、/etc/init.d/zopeのスクリプトを実行してZopeを立ち上げた際に、このzope_tドメインへと遷移するための「エントリポイント」を決めます。SELinuxでは親プロセスから子プロセスへとドメインが引き継がれますが、「Xドメインで動作していたプロセスが、プログラムhogeを実行すると、Yドメインとなって動作する」というように、ドメインの変更(遷移)を定義することができます。この際の、ドメインが遷移するきっかけとなるプログラムhogeのことをエントリポイントと呼びます。今回は、/etc/init.d/zopeを実行した際に動作する、/usr/bin/zopectlをエントリポイントとし、そのファイルに付与するタイプをzope_exec_tとします。
図5 エントリポイント
- 次に、Zope関連のリソースのコンテキストを決めます。/var/lib/zope以下にZope関連のファイルが展開されますので/var/lib/zope以下をzope_var_lib_tとし、設定ファイルが置かれる/var/lib/zope/etc以下をzope_conf_tとします。
全体的な構成情報は、図6をご確認ください。
図6 今回考えたZopeドメインの構成情報 |
なお、今回は実運用で最も多く使われる可能性がある「Targetedポリシー」を想定していますので上記の構成情報でほぼ足りますが、ユーザー/ロールにまで制限をかけられる「Strictポリシー」を使用する場合には、さらにロールなどの考察が必要になってきます
Zopeドメインを作成する
上記で考えた構成情報に基づいて作成したzope.teファイルとzope.fcファイルを示します。
#DESC Zope #Define zope_t domain daemon_domain(zope) type zope_conf_t, file_type, sysadmfile; type zope_var_lib_t, file_type, sysadmfile; #Allow general domain access to zope_t general_domain_access(zope_t) allow { zope_t initrc_t } zope_conf_t:file r_file_perms; allow zope_t zope_conf_t:dir r_dir_perms; allow zope_t usr_t:file { getattr read }; allow zope_t {etc_t etc_runtime_t } :file r_file_perms; allow zope_t bin_t:dir r_dir_perms; allow zope_t self:capability { setuid setgid dac_override dac_read_search }; read_sysctl(zope_t) allow zope_t proc_t:file { read getattr }; # for library allow zope_t var_lib_t:dir { getattr search }; rw_dir_create_file(zope_t zope_var_lib_t) allow zope_t zope_var_lib_t:sock_file create_file_perms; can_exec(zope_t zope_var_lib_t) # for executing allow zope_t bin_t:lnk_file read; allow zope_t shell_exec_t:file rx_file_perms; can_exec(zope_t bin_t)can_network(zope_t) # tcp port 8080 and udp port 3130 is http_cache_port_t (see net_contexts) allow zope_t http_cache_port_t:tcp_socket name_bind; # for reducing SELinux ignorable logs dontaudit zope_t { boot_t tmp_t home_root_t security_t devpts_t }:dir getattr; dontaudit zope_t sbin_t:dir search; dontaudit zope_t usr_t:lnk_file read; dontaudit zope_t tty_device_t:chr_file { read write }; |
リスト1 zope.te |
# zope.fc /usr/bin/zopectl system_u:object_r:zope_exec_t /var/lib/zope(/.*)? system_u:object_r:zope_var_lib_t /var/lib/zope/etc(/.*)? system_u:object_r:zope_conf_t |
リスト2 zope.fc |
zope.fcファイルに関しては、見ただけで大体理解できると思います。ディレクトリ以下に再帰的にドメインを付与する際に正規表現が使用できます。なお、Targetedポリシーを想定しているため、ファイルに対して与えられるユーザー識別子/ロール識別子はそれぞれsystem_u/object_rとなっています。
zope.teファイルに関しては、コメントを除いて上から3行目まででタイプ(ドメイン)の定義を行っています。1行目では、デーモンとして動作するドメインということでzope_tの定義を行っていますが、こちらに関してはマクロを使用しています。マクロを使用することにより、煩雑に定義/設定しなくてはならない構文を省略することができ、作業が大幅に楽になります。そのほか、allow文などの定義でも今回はマクロを多用して、簡単にzopeドメインのアクセスが定義できるようにしてあります。マクロに関しては、/etc/selinux/targeted/src/policy/macros以下にマクロがまとまっていますので、そちらを参考にしながら定義をしていくとよいでしょう。
また、動作に支障がないレベルで権限を付与した状態でも、アクセス違反ログが出力されてしまいますので、ログの量を制限するために下4行で“dontaudit”を設定しています。この構文を用いると、この構文に当てはまるアクセス違反のログは出力されなくなります。
例えば、一番下の行により「zope_tドメインのプロセスがtty_device_tタイプを持つキャラクタファイル(chr_file)にread/writeを行った」というアクセス違反が起きた場合のログは出力されなくなります。
これらのzope.te/zope.fcファイルをそれぞれ、
/etc/selinux/targeted/src/policy/domains/programs/zope.te /etc/selinux/targeted/src/policy/file_contexts/programs/zope.fc |
として保存し、/etc/selinux/targeted/src/policy以下で、
# make reload |
とすることにより、新しいポリシーがロードされます。なお、“make reload”だけではファイルコンテキストの再付与は行われませんので、
# make relabel |
とするか、/(ルート)以下に.autorelabelというファイルをtouchコマンドで作成し、Permissiveモードで再起動を行うことにより、新しく定義したファイルコンテキストでのファイルシステムの再ラベリングが行われます。
再ラベリングまでを行ってEnforcingモードで起動すると、zopeのプロセスがzope_tドメインで動作します。
[root@centos4 ~]# getenforce Enforcing [root@centos4 ~]# ps axZ | grep zope user_u:system_r:zope_t 2888 ? Ss 0:00 /usr/bin/python /usr/lib/zope/lib/python/zdaemon/zdrun.py -S /usr/lib/zope/lib/python/Zope2/Startup/zopeschema.xml -b 10 -d -s /var/lib/zope/var/zopectlsock -u zope -x 0,2 -z /var/lib/zope /var/lib/zope/bin/runzope user_u:system_r:zope_t 2889 ? S 0:43 /usr/bin/python /usr/lib/zope/lib/python/Zope2/Startup/run.py -C /var/lib/zope/etc/zope.conf |
図7 zopeプロセスがzope_tドメイン下で動作している |
これにより、Zopeでセキュリティ上の問題が発生した場合にも、被害を極小化することができます。
このポリシーの注意点
このポリシーでは、/usr/bin/zopectlをエントリポイントとしました。従って、initrc_tが/usr/bin/zopectlを動作させた場合にはすべてzope_tドメインとなってしまいますので、「Ploneのみにドメインを付与する」ということができていません。これを解決するには、もう少しドメインを細かく設定する必要があります。
また、/var/lib/zope以下をすべてzope_var_lib_tとしたために、zope_var_lib_tというライブラリにも実行権限を与えなくては動作しないという結果になってしまっています。これを解決するには、/var/lib/zope以下のbinディレクトリにも個別のタイプを与える必要があります。このように、ドメインをより細かく分けていくと、SELinuxのセキュリティはより強固になっていきます(その分、設定が大変になってしまいますが)。
次回は、今回インストールしたシステムを例として、SELinuxを用いたシステムをバックアップする際に必要なTipsを紹介します。
3/3 |
Index | |
CMSツールをよりセキュアに導入しよう | |
Page1 SELinuxは運用のステージへ PloneをSELinuxで保護する Ploneのインストール SELinux外でのセキュリティの担保 |
|
Page2 SELinux(Targeted)でのPlone/Zope CentOS 4.4でのポリシーの編集方法 |
|
Page3 Zopeドメインの構成情報を考える Zopeドメインを作成する このポリシーの注意点 |
Profile |
面 和毅(おも かずき) サイオステクノロジー株式会社 OSSテクノロジーセンター 開発支援グループ グループマネージャー 学生時代よりUNIXに親しむ。1997年からサーバ構築およびセキュリティ全般を扱う仕事に従事、Linuxを使い始める。 現在はLIDSの普及活動に注力。LIDSユーザ会(LIDS-JP)の立ち上げやLIDS関連文書の日本語化、LIDSを用いたシステム構築の紹介などを行っている。また、サイオステクノロジーでビジネス面でのLIDSの普及活動に注力している。 2005年12月より、LIDS Teamに参加し、LIDSの公式な開発チームの一員として活動している。 |
スイッチ・オン! SELinux 連載インデックス |
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|