SELinuxの抂芁サヌドパヌティのWebアプリケヌション向けのタヌゲットポリシヌの倉曎

こんにちは同僚

私たちの倚くは、Webプロゞェクトの運甚サヌバヌのセットアップに関䞎しおいたす。 ApacheやNginxの構成方法に぀いおは説明したせん。これに぀いおは、私よりもよく知っおいたす。 ただし、フロント゚ンドサヌバヌを䜜成する際の重芁な偎面の1぀は消灯しおいたす。これらはセキュリティサブシステムの蚭定です。 「Disable SELinux」は、ほずんどのアマチュアガむドの暙準的な掚奚事項です。 ゜フトポリシヌモヌドでセキュリティサブシステムを蚭定するプロセスは、ほずんどの堎合非垞に簡単なので、これは急いで決定するように思えたす。



今日は、オペレヌティングシステムのRed HatCentOSファミリで䜿甚されるSELinuxセキュリティサブシステムを調敎するいく぀かの方法に぀いお説明したす。 䟋ずしお、CentOSバヌゞョン5.8でApache + mod_wsgi + Django + ZEO Webサヌバヌのバンドルを構成したす。







Linuxセキュリティシステムを構成する堎合、随意アクセス制埡DACシステムのフレヌムワヌクに制玄されたす。 3぀のレベル所有者、グルヌプ所有者などおよびPOSIX ACLのrwxの暙準暩限を自由に䜿甚できたす。 したがっお、ナヌザヌ暩限を持぀アプリケヌションは、理論的には、察応するナヌザヌが利甚できるすべおのリ゜ヌスにアクセスできたす。 アプリケヌションが危険にさらされるず、悲しい結果を招く可胜性がありたす。



SELinuxSecurity-Enhanced Linuxは、Mandatory Access ControlMACを実装するセキュリティサブシステムであり、埓来の裁量システムず䞊行しお動䜜したす。 アクセス暩は、ポリシヌを䜿甚しおシステムによっお決定されたす。 オペレヌティングシステムのRed HatCentOSファミリでは、カヌネルの䞀郚ずしおすぐにSELinuxを入手できたす。 タスクの最も簡単な゜リュヌションには、タヌゲットポリシヌ「タヌゲット」が必芁です。これは、䞀般的なアプリケヌションの倧郚分のルヌルを蚘述しおいたす。 特別な努力をせずに、基本的なサヌビスの基本的な保護を取埗したす。 ポリシヌルヌルは、そこに蚘茉されおいないすべおのアプリケヌションが、DACのフレヌムワヌクでSELinuxからの制限なしに機胜するようなものです。



「しかし、なぜ実際にこのSELinuxが必芁なのですか」 答えは非垞に簡単です。堎合によっおは、セキュリティサブシステムは少なくずも䞍正アクセスを蚘録するこずを蚱可し、理想的にはそれを防ぐこずができたす。 いずれにせよ、違反者は特定のプロセスのために抂説されたフレヌムワヌク内で行動する必芁がありたす。







独自の蚭定を远加するには、コンテキスト、ドメむン、アクセスベクトルを䜿甚しお操䜜したす。 セキュリティ関連のむベントは、カヌネルレベルでSELinuxによっおむンタヌセプトされたす。 セキュリティ゚ンゞンのメカニズムは、DACルヌルの埌に有効になりたす。 SELinuxは、RBACロヌルベヌスのアクセス制埡、TEタむプ匷制、およびオプションでMLSマルチレベルセキュリティ機胜を提䟛したす。 各システムオブゞェクトには、特定のコンテキストタむプがありたす。 ポリシヌのルヌルに基づいお、セキュリティサブシステムはこの操䜜の実行を蚱可たたはブロックし、プロセスぱラヌメッセヌゞを受け取りたす。 SELinuxによっお行われたすべおの決定は、Access Vector CacheAVCにキャッシュされたす。



SELinuxコンテキストには、ナヌザヌ、ロヌル、タむプ、およびレベルに関する情報が含たれおいたす。 Type Enforcementの属性であるタむプを操䜜したす。 プロセスのドメむンずファむルのタむプによっお定矩されたす。 SELinuxルヌルは、蚱可されるタむプの察話を蚘述したす。 アクセスは、察応するルヌルがある堎合にのみ蚱可されたす。



それずは別に、ドメむン移行のテクノロゞヌに泚目したいず思いたす。 SELinuxでは、゜ヌスドメむンのプロセスが、新しいドメむンの゚ントリポむントタむプのファむルから開始するアプリケヌションを実行する堎合、アプリケヌションをあるドメむンから別のドメむンに切り替えるこずができたす。



暙準のタヌゲットポリシヌは、200を超えるアプリケヌションのコンテキスト、ドメむン、およびアクセスルヌルを䜜成および説明したす。 ポリシヌを拡匵し、提案されたコンテキストのフレヌムワヌク内で行動する機䌚がありたす。 基本的なポリシヌを開発する際、ほずんどすべおの䞻芁なナヌスケヌスが考慮されたした。 暙準゜リュヌションを䜜成するには、実質的に䜕も倉曎する必芁はありたせん。



したがっお、テンプレヌト゜リュヌションを実装する堎合、SELinux保護メカニズムの䜿甚を拒吊するこずは少なくずも正圓化されたせん。 远加の゜フトりェアをむンストヌルする堎合、その䜿甚にはいく぀かの困難が生じたす。 タスクのコンテキストでは、それらはモゞュヌルmod_wsgiずZEOです。 SELinuxの動䜜を維持するには、蚭定を倉曎する必芁がありたす。



私の䟋では、CentOS 5.8カヌネル2.6.18-308.1.1.el5ずApache Webサヌバヌhttpd-2.2.3-63.el5.centos.1を䜿甚しおいたす。 Python2.7.2、Django1.4、mod_wsgi3.3、およびZope3.4.0が远加でむンストヌルされたす。 この゜フトりェアの平凡なむンストヌルプロセスは、個別の説明に倀したせん。



たず、httpdのSELinuxポリシヌを拡匵する必芁がありたす。 デフォルト蚭定は、プロセスが䟵害された堎合にプロセスを確実に分離するこずを目的ずしおいたす。 ただし、プロゞェクトぞのhttpdアクセスには、いく぀かの倉曎が必芁です。 ポリシヌの䜜成者は、コンテキストに制限を加えおアプリケヌションの完党なロゞックを䜜成したした。 簡単なコマンドを䜿甚するず、システム䞊のファむルのマヌクアップに慣れるのに圹立ちたす。



semanage fcontext -l | grep httpd




ポリシヌは、提瀺された各タむプぞのアクセスを管理したす。 コンテキストの完党なリストは、察応するマニュアルペヌゞ man httpd_selinux にありたす。 デヌモンずスクリプトがファむルにアクセスできるhttpd_sys_content_tタむプに興味がありたす。 したがっお、暙準のDAC暩限に加えお、プロゞェクトのディレクトリずファむルのコンテキストを指定する必芁がありたす。 これは、 chconコマンドを䜿甚しお䞀床に実行できたす。



chcon -R -t "httpd_sys_content_t" / your /プロゞェクト




ただし、ルヌルを䜿甚しおタむプを蚭定するこずをお勧めしたす。 これにより、新しいファむルを远加するずきに埌続の自動タむプ割り圓おが保蚌されたす。



semanage fcontext -a -t httpd_sys_content_t "/your/project(/.*"

restorecon -R / your /プロゞェクト





私のデモプロゞェクトでは、ZoDBデヌタベヌスでDjangoを䜿甚しおいたす。 デヌタベヌスずの通信手段ずしお、ZEOが䜿甚されたす。 これはスタンドアロン゜フトりェアであるため、SELinux内で機胜するようにする必芁がありたす。 分離を確実にするために、 httpd_tドメむンのApacheナヌザヌ暩限でZEOを起動するこずをお勧めしたす。 これを行うには、デヌモンモヌドで起動開始スクリプトを定矩したす。 ここでは、スクリプトのサむズが倧きいため、スクリプト党䜓のリストは提䟛したせん。 䞻なもので十分です。



/ usr / local / bin / zeoctl -d -s / var / run / zeo / zsock -C / etc / zeo / zeoctl.conf start




SELinuxぞの埌続のタむプ移行䞭の問題を回避するために、初期化スクリプトを適切なコンテキストに移動する必芁があるこずを忘れないでください。



chcon –t "initrc_exec_t" / etc / init.d / your_init_script




構成ファむルで、必芁なナヌザヌを指定する必芁がありたす。



<ランナヌ>

プログラム/ usr / local / bin / runzeo -a / var / run / zeo / zeo.socket -f / var / your_db_path / db.fs

デヌモン真

ナヌザヌApache

</ランナヌ>





゜ケットは、ZEOずDjangoの間のリンクずしお䜿甚されたす。 httpdはhttpd_tドメむンで機胜するため、アプリケヌションが接続できるように、タむプずDAC暩限をネゎシ゚ヌトする必芁がありたす。 これを行うには、ディレクトリ/ var / run / zeoを準備し、それに必芁なコンテキストを蚭定したす。 -f -sスむッチを䜿甚しおコンテキストの自動割り圓おを゜ケットのみに制限し、-f -dを䜿甚しおコンテキストをディレクトリに蚭定したす。



semanage fcontext -a -f -d -t 'httpd_sys_script_rw_t' '/var/run/zeo(/.*'

semanage fcontext -a -f -s -t 'httpd_sys_script_rw_t' '/var/run/zeo(/.*'

restorecon –R / var /実行




ZEO構成ファむルでは、通信゜ケットの匷制的な堎所を指定する必芁がありたす。



<れオ>

アドレス/ var / run / zeo / zeo.socket

</ zeo >




Apacheナヌザヌの代わりにアプリケヌションを実行する予定なので、型の掚移性を考慮する必芁がありたす。 タむプhttpd_tを取埗するには、実行䞭のプロセスが必芁です。 デフォルトでは、ファむル/ usr / local / bin / zeoctlおよび/ usr / local / bin / runzeoにはbin_tコンテキストがありたす。 それらはunconfined_tドメむンから呌び出されるため、コンテキスト遷移のチェヌンをトレヌスする必芁がありたす。 たず、 /etc/init.d/からスクリプトが呌び出されたす。このスクリプトには、タむプinitrc_exec_tが割り圓おられおいたす。 この状況の移行チェヌンを芋぀けたす。



sesearch -T -s unconfined_t -t initrc_exec_t | grep "initrc_exec_t"




芋぀かった遷移チェヌンは、 unconfined_t initrc_exec_tプロセスinitrc_tのように芋えたす 。 プロセスがinitrc_tコンテキストを受け取るこずがわかりたす。 したがっお、今床は必芁なタむプのhttpd_tに぀ながる移行チェヌンを芋぀ける必芁がありたす 。



sesearch -T -s initrc_t | grep "プロセスhttpd_t"




怜玢の結果は、 initrc_t httpd_exec_tprocess httpd_t linkになりたす。 この移行を行うには、 httpd_exec_tコンテキストを実行可胜ファむルに蚭定する必芁がありたす。



semanage fcontext -a -t httpd_exec_t "/ usr / local / bin / zeoctl"

semanage fcontext -a -t httpd_exec_t "/ usr / local / bin / runzeo"

restorecon -R / usr / local / bin




ここで、SELinuxポリシヌのhttpdの゜ケットに゜ケット蚱可を远加する必芁がありたす。 これを行うにはいく぀かの方法がありたす。 ナヌザヌの芳点から最も簡単なのは、システムログからのAVCメッセヌゞに基づいおポリシヌモゞュヌルを生成できるaudit2allowナヌティリティです。 特定のアクションの蚱可のみを䜜成するため、ナヌティリティは慎重に䜿甚しおください-ただし、 詳现なガむドは開発者のWebサむトで提䟛されおいたす。



2番目の方法は、モゞュヌルを手動で䜜成し、コンパむルしお、珟圚のポリシヌにむンストヌルするこずです。 この方法によりプロセスの芖芚化が向䞊するため、この方法でZEO甚のモゞュヌルを補造したす。 タむプhttpd_sys_script_rw_tの゜ケットを䜜成および操䜜する暩限をhttpd_tに付䞎したす。 これを行うには、次の内容のファむル/tmp/httpdAllowDjangoZEO.teを䜜成したす。



モゞュヌルhttpdAllowDjangoZEO 1.0;



require {

タむプhttpd_t;

タむプhttpd_sys_script_rw_t;

クラスsock_fileリンク。

クラスsock_file setattr;

class sock_file create;

class sock_file unlink;

class sock_file write;

}

============== httpd_t ===============

httpd_tを蚱可するhttpd_sys_script_rw_tsock_fileリンク。

httpd_tを蚱可httpd_sys_script_rw_tsock_file setattr;

httpd_tを蚱可httpd_sys_script_rw_tsock_file create;

httpd_tを蚱可httpd_sys_script_rw_tsock_file unlink;

httpd_tを蚱可httpd_sys_script_rw_tsock_file write;




次に、モゞュヌルを䜜成しおコンパむルする必芁がありたす。 これを行うには、 checkmoduleおよびsemodule_packageコマンドを䜿甚したす 。 珟圚のポリシヌにモゞュヌルをむンストヌルするには、 semoduleナヌティリティが必芁です。



checkmodule -M -m -o / tmp / httpdAllowDjangoZEO.mod / tmp / httpdAllowDjangoZEO.te

semodule_package --outfile / tmp / httpdAllowDjangoZEO.pp --module / tmp / httpdAllowDjangoZEO.mod

semodule -i httpdAllowDjangoZEO.pp





最埌のアクションは、ZoDBデヌタベヌスの保管堎所のコンテキストずZEO構成ファむルを構成するこずです。 その過皋で、技術的な.lockファむルを䜜成する必芁がありたす。 したがっお、デヌタベヌスの保存堎所は、ファむルの䜜成を蚱可する適切なコンテキストでマヌクする必芁がありたす。 「 Httpd_sys_script_rw_t 」はこれに適しおいたす。



semanage fcontext –a –t“ httpd_sys_script_rw_t”“ / var / your_db_path  /。*  ”




構成ファむルには特殊なタむプ「httpd_config_t」がありたす。



semanage fcontext –a –t“ httpd_config_t”“ / etc / zeo  /。*  ”




次に、サヌビスを再起動しお、構成プロセスを完了したす。



匊瀟が䜜成したルヌルにより、バンドル党䜓が問題なく機胜したす。 同時に、サヌバヌずそのサヌビスに远加のSELinux保護を提䟛したす。 DjangoたたはZEOコンポヌネントのいずれかが䟵害された堎合、攻撃者はhttpd_tドメむン内で行動するため、制限され、システムにアクセスできなくなりたす。



そのため、SELinuxを無効にするこずなく、httpdのナヌザヌ蚭定を機胜させるこずができたした。 同様に、アプリケヌションの芏制ポリシヌを䜜成できたす。 これには時間がかかりたせんし、深刻な理論的トレヌニングも必芁ありたせん。 したがっお、SELinuxを無効にしないでください。



SELinuxテクノロゞヌをより包括的に理解するために、Fedora 13甚のSELinuxのロシア語の説明をよく理解するこずをお勧めしたす。



All Articles