第4回 NRPEプラグインを作って確認「SELinux、異常なし!」
面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2007/10/3
NRPE用ドメインの作成
ここまででSELinuxのステータスを、Nagiosを使って監視することが可能になりました。せっかくマシンA上でSELinuxを有効にしていますので、さらにNRPE用のドメインを新たに作成し、よりセキュアな環境を構築しましょう。
まず、新たに定義するNRPE用ドメインの構成情報を考えてみましょう。
- xinetdから起動されるnrpeプロセスをnrpe_tドメインとする
- /usr/local/nagios以下のファイルのタイプをnrpe_file_tとする
- /usr/local/nagios/bin/nrpeファイルのタイプをnrpe_exec_tとする
- /usr/local/nagios/etc/nrpe.cfgのタイプをnrpe_etc_tとする
- /usr/local/nagios/libexec以下のプラグインのタイプをbin_tとする
- /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 連載インデックス |
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|