SELinux の管理スクリプト案 (CentOS 5.4)

2010/01/30 Tomohiro Kumagai

□ SELinux を管理するための設定ツール(案)

CentOS 5.4 に搭載されている SELinux について、その設定方法についてSELinux の動作モードを切り替える (CentOS 5.4)SELinux に新しい許可設定を追加する (CentOS 5.4) に記しましたけど、そういった一連の操作を支援する簡易スクリプトを考えてみました。

 

管理のために、以下の Makefile を用意します。

Makefile はタブ文字と空白文字とを明確に区別するので注意してください。

Makefile

AUDIT_LOG = /var/log/audit/audit.log

AUDIT2ALLOW = audit2allow
SEMODULE = semodule
GETENFORCE = getenforce
SETENFORCE = setenforce

SAVE_DIR = ./policy

DOMAIN_NAME = ${domain}
DOMAIN_LABEL = `echo ${DOMAIN_NAME} | sed 's/_t$$//' | sed 's/[^a-zA-Z0-9]//g'`


usage:
@echo "Usage: make check domain=name"
@echo "Usage: make module domain=name"
@echo "Usage: make module-install domain=name"

checkall:
$(AUDIT2ALLOW) -i $(AUDIT_LOG)

check:
grep ":$(DOMAIN_NAME):" $(AUDIT_LOG) | $(AUDIT2ALLOW)

module:
cd $(SAVE_DIR)
$(CHECKMODULE) -M -m -o $(SAVE_DIR)/$(DOMAIN_LABEL).mod $(SAVE_DIR)/$(DOMAIN_LABEL).te > /dev/null
$(SEPACKAGE) -o $(SAVE_DIR)/$(DOMAIN_LABEL).pp -m $(SAVE_DIR)/$(DOMAIN_LABEL).mod > /dev/null
$(MAKE) module-check

te:
(cd $(SAVE_DIR); grep ":$(DOMAIN_NAME):" $(AUDIT_LOG) | $(AUDIT2ALLOW) -M $(DOMAIN_LABEL) > /dev/null)
$(MAKE) module-check

module-check:
@echo
@echo Generated policy:
@echo
@cat $(SAVE_DIR)/$(DOMAIN_LABEL).te
@echo
@echo Next: make module-install domain=$(DOMAIN_NAME)
@echo

module-install:
$(SEMODULE) -i $(SAVE_DIR)/$(DOMAIN_LABEL).pp
$(MAKE) enforce

enforce:
$(SETENFORCE) Enforcing

permissive:
$(SETENFORCE) Permissive

mode:
$(GETENFORCE)

そしてこれを、次のようなフォルダ構成で保存します。

保存場所はどこでも構いませんが "/var/selinux/" ディレクトリーを作成すると分りやすいかもしれません。

./

Makefile

Policy

 

これで後は、次のような形で SELinux に関する基本的な操作が可能になります。

make enforce 動作モードを Enforce に切り替えます。
make permissive 動作モードを Permissive に切り替えます。
make checkall ログ情報を表示します。ログのローテーションがされている場合には、ローテーション済みのログは対象とならないので注意します。
make check domain=name_t ドメイン名が name_t のログ情報を表示します。ログのローテーションがされている場合には、ローテーション済みのログは対象とならないので注意します。
make te domain=name_t ドメイン名 name_t に対応する TE ファイルとモジュールファイルを生成します。ログのローテーションがされている場合には、ローテーション済みのログは対象とならないので注意します。
make module domain=name_t ドメイン名 name_t に対応する TE ファイルから、モジュールファイルを生成します。TE ファイルを直接編集した場合などに利用します。
make module-install domain=name_t ドメイン名 name_t に対応するモジュールファイルをインストールします。予め make module group=name_t でモジュールファイルを生成しておく必要があります。インストール後は念のため、SELinux の動作モードを Enforcing に戻します。

 

このスクリプトを用いると、例えば httpd に関するポリシーを設定したい場合には、次のような流れになります。

ログから自動生成する場合

初めての生成で、ログから自動的に行いたい場合には、次のようにします。

make permissive

ここでいったん httpd を実際に動かして一連の操作を行います。そのあとで、引き続き次のコマンドを実行します。

make check domain=httpd_t

make te domain=httpd_t

make module-install domain=httpd_t

これで、httpd に関するポリシーを設定することができました。

ポリシーが設定されると、動作モードは自動的に Enforce に設定されます。

 

TE ファイルを手動で設定した場合

一度、ログからの自動生成を行うと、./policy ディレクトリに TE ファイルが生成されています。

以後、追加での許可設定が必要となった場合に、残された最近のログの中からルールを生成し、それを TE ファイルに追加してポリシーを適用するといった流れの場合には、次のような感じになります。

 

まず、残された最新ログの中からルールを生成します。

make check domain=httpd_t

すると、ログに残っている限りのルールが表示されるので、これをもとにして "./policy/httpd_t.te" を編集します。

編集が終わったら、次のようにしてポリシーファイルを生成して、インストールを行います。

make module domain=httpd_t

make module-install domain=httpd_t

これで、httpd に関するポリシーを設定することができました。

ポリシーが設定されると、動作モードは自動的に Enforce に設定されます。

 

    

 

カスタム検索

copyright © Tomohiro Kumagai @ EasyStyle G.K.
contact me: please from mail-form page.