第4回 NRPEプラグインを作って確認「SELinux、異常なし!」


面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2007/10/3


 NRPE用ドメインの作成

 ここまででSELinuxのステータスを、Nagiosを使って監視することが可能になりました。せっかくマシンA上でSELinuxを有効にしていますので、さらにNRPE用のドメインを新たに作成し、よりセキュアな環境を構築しましょう。

 まず、新たに定義するNRPE用ドメインの構成情報を考えてみましょう。

  1. xinetdから起動されるnrpeプロセスをnrpe_tドメインとする
  2. /usr/local/nagios以下のファイルのタイプをnrpe_file_tとする
  3. /usr/local/nagios/bin/nrpeファイルのタイプをnrpe_exec_tとする
  4. /usr/local/nagios/etc/nrpe.cfgのタイプをnrpe_etc_tとする
  5. /usr/local/nagios/libexec以下のプラグインのタイプをbin_tとする
  6. /usr/local/nagios/tmp以下のテンポラリファイルのタイプをnrpe_tmp_tとする

 これらの考えに従ってポリシーを作成していきます。具体的なポリシーの作成方法は、この連載の第1回を参照してください。nrpe.teファイルとnrpe.fcファイルは次のようになります。

#DESC NRPE

#Define nrpe_t domain
daemon_domain(nrpe)
type nrpe_etc_t, file_type, sysadmfile;
type nrpe_file_t, file_type;
type inetd_child_port_t, port_type;

#Allow general domain access to nrpe_t
general_domain_access(nrpe_t)
allow nrpe_t nrpe_etc_t:file r_file_perms;
allow nrpe_t nrpe_file_t:dir r_dir_perms;
allow nrpe_t file_t:file { read getattr };
allow nrpe_t security_t:dir { read search };
allow nrpe_t security_t:file { read };

# allow nrpe_t usr_t:file { getattr read };

# allow nrpe_t {etc_t etc_runtime_t } :file r_file_perms;
allow nrpe_t bin_t:dir r_dir_perms;

# read_sysctl(nrpe_t)

# allow nrpe_t proc_t:file { read getattr };

# for executing
allow nrpe_t bin_t:lnk_file read;

# etc
allow nrpe_t var_log_t:dir search;
allow nrpe_t var_log_t:file { read getattr };
allow nrpe_t sbin_t:dir search;
allow nrpe_t sbin_t:file { read getattr execute execute_no_trans };
allow nrpe_t etc_t:dir read;
allow nrpe_t etc_t:file read;
allow nrpe_t etc_runtime_t:file { read getattr };
allow nrpe_t proc_t:dir { read search };
allow nrpe_t proc_t:file { read getattr };
allow nrpe_t selinux_config_t:dir search;
allow nrpe_t initrc_var_run_t:file { read lock getattr };
allow nrpe_t initrc_t:dir { getattr search } ;
allow nrpe_t initrc_t:file { read } ;

allow nrpe_t fixed_disk_device_t:blk_file { getattr } ;
allow nrpe_t shell_exec_t:file { rx_file_perms execute_no_trans };
can_exec(nrpe_t bin_t)

can_network(nrpe_t)

allow nrpe_t inetd_child_port_t:tcp_socket name_bind;

# for SSL
allow nrpe_t initrc_t:tcp_socket { read getattr write ioctl };
allow nrpe_t urandom_device_t:chr_file { read getattr ioctl };

# for SELinux Log
allow nrpe_t tmp_t:dir { write create getattr search add_name remove_name };
allow nrpe_t tmp_t:file { read write unlink create getattr };
allow nrpe_t initrc_tmp_t:file { read write getattr };

# for reducing SELinux ignorable logs
dontaudit nrpe_t { zope_t httpd_t syslogd_t portmap_t snmpd_t security_t devpts_t }:dir getattr;
dontaudit nrpe_t unconfined_t:dir { getattr search };
dontaudit nrpe_t httpd_t:dir { getattr };
リスト7 nrpe.teファイルの内容

# nrpe
/usr/local/nagios -- system_u:object_r:nrpe_file_t
/usr/local/nagios/bin/nrpe -- system_u:object_r:nrpe_exec_t
/usr/local/nagios/etc/nrpe.cfg -- system_u:object_r:nrpe_etc_t
/usr/local/nagios/libexec(/.*)? -- system_u:object_r:bin_t
リスト8 nrpe.fcファイルの内容

 yumなどでselinux-policy-targeted-sourceファイルをインストールしたら(第1回の環境であればすでにインストールされています)、これらのnrpe.te/nrpe.fcファイルをそれぞれ、

/etc/selinux/targeted/src/policy/domains/programs/nrpe.te
/etc/selinux/targeted/src/policy/file_contexts/programs/nrpe.fc

として保存し、/etc/selinux/targeted/src/policy以下で、

# make reload

とすることにより、新しいポリシーがコンパイルされ、ロードされます。第1回でも説明しましたが、この時点ではファイルの再ラベリングは行われませんので、/usr/local/nrpe以下のファイルのコンテキストを手動(chconコマンドなど)で変更するか、

# make relabel

を実行してください。

 NRPEの動作を確認しよう

 それでは、設定したポリシーでNRPEがnrpe_tドメインで動作しているかをチェックしてみましょう。

 ほかのクライアントからマシンA(NRPEが動作しているマシン。例では192.168.231.138)の5666ポートにtelnetコマンドなどで接続しておきます。

omok@lucretia:~$ telnet 192.168.231.138 5666
Trying 192.168.231.138...
Connected to 192.168.231.138.
Escape character is '^]'.
リスト9 NRPEに接続する

 マシンA上でpstree -Zコマンドでプロセスのツリー構造とセキュリティコンテキストを確認すると、xinetdプロセスの子プロセスとして起動されたNRPEがnrpe_tドメインで動作していることが分かります。

pstree -Zの結果

init(`user_u:system_r:unconfined_t')
  |-acpid(`user_u:system_r:initrc_t')
  |-atd(`user_u:system_r:initrc_t')
  |-crond(`user_u:system_r:initrc_t')

---省略---

   `-xinetd(`root:system_r:initrc_t')
      `-nrpe(`root:system_r:nrpe_t')

リスト10 pstree -Zの結果

 また、この状態でNagiosサーバもきちんとマシンAから情報を取ってくることができています。

図5 nrpe_tドメインでも正常に動作している

 2回にわたり、SELinuxの監視をテーマに紹介してきました。これにより、Nagiosを使ってセキュリティを確保しながらSELinuxの情報を取得することができるようになりました。さらにSELinuxの設定/ポリシーの集中管理などに関しては、SELinuxでの機能追加が待たれる状態です。

 次回は、CentOS 5で大幅に変更されたSELinuxの状況を、実際にポリシーを追加/SELinuxの設定を変更することで見ていきたいと思います。

3/3
 

Index
NRPEプラグインを作って確認「SELinux、異常なし!」
  Page1
Nagios+NRPEによるSELinuxの監視
SELinuxの何を監視するか
  Page2
SELinuxのステータスを返すプラグインの作成
nrpe.cfgファイルの修正
Page3
NRPE用ドメインの作成
NRPEの動作を確認しよう


Profile
面 和毅(おも かずき)

サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー


学生時代よりUNIXに親しむ。1997年からサーバ構築およびセキュリティ全般を扱う仕事に従事、Linuxを使い始める。

現在はLIDSの普及活動に注力。LIDSユーザ会(LIDS-JP)の立ち上げやLIDS関連文書の日本語化、LIDSを用いたシステム構築の紹介などを行っている。また、サイオステクノロジーでビジネス面でのLIDSの普及活動に注力している。

2005年12月より、LIDS Teamに参加し、LIDSの公式な開発チームの一員として活動している。

スイッチ・オン! SELinux 連載インデックス


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間