実践Linux
SELinux        SELinux 目次へ  TOP(HOME)へ


SELinux リファレンス・ポリシーで新しいドメインを作成する     2012年4月

新たなドメインを付与するには,リファレンス・ポリシーのマクロを使う。この方法を使えば、わりと簡単にポリシーの追加がカバーできるようだ。
ここでは、自作アプリケーションへのドメインの付与を想定してみる。

モジュール・パッケージの作成
ドメインを付与するサンプル・アプリケーションを/develop/selinux-domain-test/myappliとする。
ここでは「myappli_t」という名前のドメインを付与し、「myappli」という名前のモジュール・パッケージを作成してみる。また「新しいタイプの付与」同様、作業ディレクトリを「/root/selinux」とする。
さらに、このアプリは、/var/lib/myappli/data以下に読み書きアクセスするものとし、このアクセスにも保護をかけてみる。

(1)teファイルの作成
myappliというモジュール・パッケージを作成するため、「myappli.te」という名前のteファイルを作成する。
設定すべき項目は定型化されており、次のような構成になる(マクロを使うため、モジュールの命名にはリファレンス・ポリシーの書式を用いる。ゴシック部分が新しいドメイン導入の要点)。
myappli.teファイル
 policy_module(myappli, 1.0)     ポリシー・モジュールの命名

 type myappli_exec_t;     実行ファイルに「testapp_exec_t」というタイプを付与するための宣言
 files_type(myappli_exec_t)

 type myappli_wr_t;     読み書き用ファイルに「myappli_wr_t」というタイプを付与するための宣言
 files_type(myappli_wr_t)

 type myappli_t;     ドメインを宣言
 domain_type(myappli_t)     ※
 domain_entry_file(myappli_t, myappli_exec_t)     ※
 unconfined_domtrans_to(myappli_t, myappli_exec_t)     ※

 allow myappli_t myappli_wr_t:dir create_dir_perms;
 allow myappli_t myappli_wr_t:file create_file_perms;


最後の2行は、パーミッション・マクロを使用してmyappli_tドメインが「myappli_wr_t」というタイプにアクセスできるように設定している。
ここで記述がない場合でも(書き方がわからない等、とりあえず書かなくても)、後のaudit2allowコマンドで同等のものが要求されるはず(マクロのような簡潔な記述にはならないが)。

※の3行がリファレンス・ポリシーのマクロで、プロセスにドメインを付与する設定やドメインに必要最小限の権限を与えている。これはどのようなアプリケーションに対するドメインかによって変わってくるが、基本は次の表を参照。今回はコマンドライン・アプリケーションなので、3つめのマクロ群を適用する。これによりコマンドライン・アプリケーションとして動作するための必要最小限の設定が行われる。
アプリケーションの種別 適用するマクロ
システム起動スクリプトの中で使われるコマンド init_system_domain(ドメイン, 実行ファイルのタイプ)
デーモン・プログラム init_daemon_domain(ドメイン, 実行ファイルのタイプ)
コマンドライン・アプリケーション domain_type(ドメイン)
domain_entry_file(ドメイン, 実行ファイルのタイプ)
unconfined_domtrans_to(ドメイン, 実行ファイルのタイプ)

(2)fcファイルの設定
fcファイルには、実行ファイルに「myappli_exec_t」というタイプを付与し、読み書き用の/var/lib/myappli/data以下には「myappli_wr_t」というタイプを付与、myappli_tドメインだけがこのタイプにアクセスできるようにしておく(実際のアクセス許可はteファイルのallow文となるが)。
myappli.fcというファイルに、次のように記述する。
 /develop/selinux-domain-test/myappli gen_context (system_u:object_r:myappli_exec_t,s0)
 /var/lib/myappli/data(/.*)? gen_context(system_u:object_r:myappli_wr_t,s0)


(3)設定の反映
fcのタイプ付け設定を反映するrestoreconコマンドを忘れないようにする。
# make
# semodule -i myappli.pp
# restorecon -F /develop/selinux-domain-test/myappli
# restorecon -RF /var/lib/myappli/data

(4)ドメインの確認
設定を反映したらアプリケーションを動作させて、ドメインが正しく付与されているかを確かめる。この確認操作は、Enforcingモードでは権限が足りずにアプリケーションの起動が失敗する場合が多いため、permissiveモードで行う。
# setenforce 0
# /develop/selinux-domain-test/myappli
ドメインを確認するには,別の端末を開き、ps -eZコマンドで確認する。
# ps -eZ | grep myappli

(5)足りない設定を追加する
permissiveモードで動作テストを行い、
# audit2allow -a -l -r
で必要な設定を生成してmyappli.teファイルに追加していく。

再度、
# make
# semodule -i myappli.pp

以上を成功するまで繰り返していく。


SELinux目次


TOP(HOME)へ

目 次
HOME
 全体のシステム構成&目次


RockyLinux

RockyLinux8.4のインストール

旧サーバーからのデータ移行

ネットワークの設定ほか
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
DHCPサーバー
FTPサーバー
FTPS(FTP over SSL/TLS)
Webサーバー
  アクセス解析ツールAwstats
Mail(Dovecot&Postfix)サーバー
MariaDB(MySQL)サーバー
SSHサーバー
SSHトンネル
SSH+MariaDB+Exel
Sambaサーバー
openVPNサーバー
VNCサーバー(リモートディスクトップ)

systemdとfirewalldについて


CentOS8
CentOS7
CentOS5〜6

SELinux

Cプログラミング


●その他
クラウド Amazon EC2
Raspberry Piで遊ぶ
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く


●趣味の世界
相対性理論
量子力学
群論
熱力学・統計力学
解析力学
物理でつかう数学
超弦理論(ノート作成中)