SELinuxのCIL (Part2)
こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面です。
前回から少し時間が経ってしまいましたが、SELinuxのCILについての説明を行います。
(前回からの間に、SELinux CILリファレンスガイドの翻訳を行っていましたので、興味のある方は是非目を通してみてください。)
今回から、前回で作成したサービス”send_config”に専用のSELinuxドメイン”sendconfig_t”を用意するようなモジュールを、Reference PolicyとCILの双方を用いて作成してみます。まず今回は、Reference Policyを用いて作る方法を紹介します。
Reference Policyを用いて独自ドメイン用のポリシを作成する
Reference Policyを用いて独自ドメインを作成するのは、RedHat系(Fedora, CentOSなどを含む)の場合には雛形を用意してくれるツールが充実しているため、比較的簡単です。そもそも、Reference Policyを作成しているという気さえしなくなっています。
まず、 「SELinux Management Tool」を起動します。これは、GUIでアプリケーションの中から起動するか、コンソールで”system-config-firewall”で起動できます。
もしメニューに「SELinux Management Tool」が見つからなかったり、”system-config-firewall”コマンドがない場合には、パッケージ”policycoreutils-gui”をyumコマンドなどを用いてインストールして下さい。
GUIツールが起動したら、左ペインで「ポリシモジュール」を選択し、右ペインで「新規」をクリックします。「SELinuxポリシー生成ツール」が起動します。今回は「標準的なinitデーモン」を選択します。
「名前」「実行ファイル」「initスクリプト」を入力する画面が出てきます。今回は、名前は”sendconfig”、実行ファイルは”/opt/test_dir/bin/send_config”、Initスクリプトは”/opt/test_dir/scripts/run_send_config.sh”を入力します。
“sendconfig”のバインド先となるネットワークポートを指定する画面が出てきます。この”sendconfig”は、Port80/TCPで待ち受けるため、ここで”TCPポート”の”全て”をチェックし、Por番号として80を選択します。
“sendconfig”の接続先のポートの選択画面になります。特に指定はしないので、ここではTCPで”全て”をチェックします。
“sendconfig”の一般的な特性の選択画面になります。今回の場合、ここにある項目には特に当てはまらないので、ここでは何もチェックしません。
“sendconfig”の管理するファイル・ディレクトリの選択画面になります。今回の場合、send_configは
- /etc/fstabにある情報
- /proc/cpuinfoにある情報
と、
のみにREADでアクセスを掛けに行きますので、ここで上記2ファイルを指定します。
“sendconfig”のブーリアンの指定画面になります。今回の場合、ブーリアンは設定しませんので、ここでは何も指定しません。
“sendconfig”ドメインのファイル類の雛形を、どこに出力するかの指定を行います。今回は、/root/sendconfigというディレクトリを作成して、そこに吐き出すようにします。
「適用」を押すと、雛形が出力されます(画面上は何も変わらないので、雛形が出力されたかどうかは別途ディレクトリ内を見てみないとわかりません)。
ここで雛形作成は終わりになりますので「キャンセル」をクリックします。
- rootユーザでターミナルを開いて、/root/sendconfigディレクトリ内を見てみると、雛形が出力されているのがわかります。/usr/share/selinux/devel/Makefileをこのディレクトリにコピーします
[root@fedora23 sendconfig]# pwd /root/sendconfig [root@fedora23 sendconfig]# ls sendconfig.fc sendconfig.if sendconfig.te sendconfig_selinux.spec [root@fedora23 sendconfig]# cp /usr/share/selinux/devel/Makefile . [root@fedora23 sendconfig]# ls Makefile sendconfig.fc sendconfig.if sendconfig.te sendconfig_selinux.spec [root@fedora23 sendconfig]#
rootユーザで”make”を実行すると、sendconfig.ppというバイナリポリシが作成されるので、”semodule -i sendconfig.pp”を実行してモジュールをロードします。
[root@fedora23 sendconfig]# make Compiling targeted sendconfig module /usr/bin/checkmodule: loading policy configuration from tmp/sendconfig.tmp /usr/bin/checkmodule: policy configuration loaded /usr/bin/checkmodule: writing binary representation (version 17) to tmp/sendconfig.mod Creating targeted sendconfig.pp policy package rm tmp/sendconfig.mod.fc tmp/sendconfig.mod [root@fedora23 sendconfig]# ls Makefile sendconfig.if sendconfig.te tmp sendconfig.fc sendconfig.pp sendconfig_selinux.spec [root@fedora23 sendconfig]# semodule -i sendconfig.pp
- systemctl stop send_config
- systemctl start send_config
を実行して、send_configを再起動します。”ps axZ”で確認すると、send_configのプロセスがsendconfig_tドメインで動作していることがわかります。
[root@fedora23 sendconfig]# ps axZ|grep send system_u:system_r:sendconfig_t:s0 718 ? Ss 0:00 /bin/sh /opt/test_dir/scripts/run_send_config.sh system_u:system_r:sendconfig_t:s0 727 ? S 0:00 /opt/test_dir/bin/send_config
このように、Reference Policyの場合には、殆どSELinuxの知識がなくても一通りのポリシを作成することが可能になっています。
まとめ
今回はReference PolicyでのSELinuxドメインの作成(殆どGUIの説明ですが。。。)について説明しました。
次回はいよいよ、CILを用いてのSELinuxドメインの作成について説明します。