実践Linux                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目次
 SELinuxの基本設定
 新しいタイプとポリシーモジュールの作成   マクロを利用したteファイルの記述
 新しいドメインの導入



TOP(HOME)へ

目 次

特別企画
Raspberry Piで遊ぶ

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

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
  Wordpressでブログ構築
FTPサーバー
FTPS(FTP over SSL/TLS)
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー
ドメインの追加

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

SELinux
SELinux基本設定
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

coLinux
Fedora11で試す

Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作

●その他
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く