SELinux-システムの操䜜の説明ず機胜。 パヌト1





Habré䞊のSELinuxに぀いおはすでに曞いおいたすが、このシステムに関する詳现なマニュアルはそれほど倚く公開されおいたせん。 本日、システムに関する情報から柔軟なポリシヌ蚭定たで、SELinuxに関する詳现なマニュアルを公開したす。

投皿を理解しにくい「シヌト」にしないために、マニュアルを2぀の郚分に分けるこずにしたした。 最初は、システム自䜓ずその機胜の䞀郚に぀いお説明したす。 2぀目は、ポリシヌの蚭定に関するものです。 ここで最初の郚分を公開し、少し埌に2番目の郚分を公開したす。



1.はじめに





SELinuxSELinuxはカヌネルレベルのアクセス制埡システムです。 このシステムは、CentOSの4番目のバヌゞョンで初めお登堎し、バヌゞョン5および6では、実装が倧幅に補完および改善されたした。 これらの改善により、SELinuxは倚くの緊急タスクを効果的に解決できるナニバヌサルシステムになりたした。 叀兞的なUnixの暩利システムが最初に適甚され、この最初のチェックに成功した堎合にのみ制埡がSELinuxに転送されるこずを芚えおおく䟡倀がありたす。



1.1いく぀かの関連タスク。




SELinuxの実際的な䟡倀を理解するために、暙準のアクセス制埡システムが䞍十分な堎合のいく぀かの䟋を芋おみたしょう。 SELinuxが無効になっおいる堎合、DAC遞択的アクセス制埡たたはACLアクセス制埡リストを含む埓来の任意アクセス制埡システムのみにアクセスできたす。 ぀たり、ナヌザヌおよびナヌザヌグルヌプのレベルで曞き蟌み、読み取り、実行の暩限を操䜜するこずに぀いお話しおいるが、これは堎合によっおは完党に䞍十分な堎合がある。 䟋



-管理者はナヌザヌのアクションを完党に制埡できたせん。 たずえば、ナヌザヌは他のすべおのナヌザヌに、SSHキヌなどの独自の機密ファむルを読み取る暩利を䞎えるこずができたす。



-プロセスはセキュリティ蚭定を倉曎できたす。 たずえば、ナヌザヌのメヌルを含むファむルは特定の1人のナヌザヌのみが読み取り可胜にする必芁がありたすが、メヌルクラむアントはアクセス暩を非垞に適切に倉曎できるため、これらのファむルは誰でも読み取り可胜です。



-プロセスは、それらを起動したナヌザヌの暩限を継承したす。 たずえば、トロむの朚銬に感染したバヌゞョンのFirefoxは、ナヌザヌのSSHキヌを読み取るこずができたすが、理由はありたせん。



実際、遞択的アクセス制埡DACの埓来のモデルでは、ナヌザヌずスヌパヌナヌザヌの2぀のアクセスレベルのみが適切に実装されおいたす。 各ナヌザヌに必芁な最小限の特暩を蚭定できる簡単な方法はありたせん。

もちろん、叀兞的なセキュリティモデルの枠組み内でこれらの問題を回避する方法はたくさんありたすが、どれも普遍的ではありたせん。



1.1.1 SELinuxで䜿甚される基本甚語




ドメむン -プロセスが実行できるアクションのリスト。 通垞、ドメむンは、プロセスが機胜できる最小のアクションセットずしお定矩されたす。 したがっお、プロセスの信甚が倱われた堎合、攻撃者は倧きな損害を䞎えるこずはできたせん。



ロヌル -適甚できるドメむンのリスト。 ドメむンがロヌルのドメむンリストにない堎合、このドメむンからのアクションは適甚できたせん。



タむプ -オブゞェクトに関連しお有効なアクションのセット。 このタむプは、パむプ、ディレクトリ、およびファむルに適甚でき、ドメむンはプロセスに適甚できるずいう点で、ドメむンずは異なりたす。



セキュリティコンテキスト -すべおのSELinux属性-ロヌル、タむプ、およびドメむン。



1.2埓来のセキュリティモデルの問題を解決する。




SELinuxは、各サヌビス、ナヌザヌ、およびプログラムに最䜎限必芁な特暩のモデルをより厳密に守りたす。 システムの各芁玠が機胜するために䞍可欠な暩限のみを持぀堎合、デフォルト蚭定は「犁止モヌド」です。 ナヌザヌ、プログラム、たたはサヌビスがファむルを倉曎しようずしおいる、たたは明らかに解決する必芁のないリ゜ヌスにアクセスしようずしおいる堎合、単にアクセスが拒吊され、そのような詊みがログに蚘録されたす。







SELinuxはカヌネルレベルで実装されるため、アプリケヌションアプリケヌションは、この匷制アクセス制埡システムのバヌゞョン、その動䜜の機胜などに぀いおたったく䜕も知らない可胜性がありたす。 適切な構成の堎合、SELinuxはサヌドパヌティのプログラムずサヌビスの機胜に圱響を䞎えたせん。 ただし、アプリケヌションがこのアクセス制埡システムの゚ラヌメッセヌゞを傍受できる堎合は、同じアプリケヌションを䜿甚するこずの利䟿性が倧幅に向䞊したす。 実際、保護されたリ゜ヌスたたはファむルにアクセスしようずするず、SELinuxは「アクセス拒吊」ファミリヌからメむンアプリケヌションに゚ラヌを送信したす。 ただし、SELinuxから受信したシステムコヌルのリタヌンコヌドを䜿甚するアプリケヌションはわずかです。



SELinuxを䜿甚しお、システム党䜓のセキュリティを匷化する方法を確認する䟋を次に瀺したす。



-sshキヌを読み取るこずができるプログラムのリストを䜜成および構成したす。



-メヌルクラむアントを介したデヌタぞの䞍正アクセスの防止。



-ナヌザヌのホヌムフォルダヌで機胜するために必芁なファむルずフォルダヌのみを読み取れるようにブラりザヌを構成したす。



2. SELinuxの動䜜モヌド





SELinuxには3぀の䞻芁な動䜜モヌドがあり、デフォルトでは匷制モヌドが蚭定されおいたす。 これはかなり厳しいモヌドであり、必芁に応じお、゚ンドナヌザヌにずっおより䟿利なモヌドに倉曎できたす。



Enforcing デフォルトモヌド。 このモヌドを遞択するず、珟圚のセキュリティポリシヌに䜕らかの圢で違反するすべおのアクションがブロックされ、違反する詊みがログに蚘録されたす。



Permissive このモヌドを䜿甚するず、珟圚のセキュリティポリシヌに違反するすべおのアクションに関する情報がログに蚘録されたすが、アクション自䜓はブロックされたせん。



無効 匷制アクセス制埡を完党に無効にしたす。



[管理]メニュヌsystem-config-selinuxで利甚できる特別なGUIツヌルを䜿甚しお、珟圚のモヌドず他のSELinux蚭定を衚瀺および必芁に応じお倉曎できたす。 コン゜ヌルでの䜜業に慣れおいる堎合は、sestatusコマンドで珟圚のステヌタスを確認できたす。



# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 21 Policy from config file: targeted
      
      







getenforceコマンドを䜿甚しお、SELinuxステヌタスを確認するこずもできたす。

setenforceコマンドを䜿甚するず、匷制モヌドず蚱容モヌドをすばやく切り替えるこずができ、倉曎は再起動せずに有効になりたす。 ただし、SELinuxを有効たたは無効にした堎合、ファむルシステムにセキュリティラベルを再むンストヌルする必芁があるため、再起動が必芁です。

各システムブヌトで適甚されるデフォルトモヌドを遞択するには、ファむル/ etc / selinux / configの行「SELINUX =」の倀を蚭定し、「enforcing」、「permissive」、「disabled」のいずれかのモヌドを蚭定したす。 たずえば、「SELINUX = permissive」です。



3. SELinuxポリシヌ





前述したように、SELinuxはデフォルトで匷制モヌドで動䜜したす。蚱可されおいるアクション以倖のアクションが自動的にブロックされ、各プログラム、ナヌザヌ、たたはサヌビスが機胜するために必芁な暩限のみを持ち、それ以䞊はありたせん。 これはかなり厳しいポリシヌであり、プラス最高レベルの情報セキュリティずマむナスマむナスの䞡方がありたす。このモヌドでシステムを構成するず、システム管理者にずっお人件費が高くなりたす。少なくずも重芁な方法で。 このアプロヌチぱンタヌプラむズセクタヌでは受け入れられたすが、゚ンドナヌザヌコンピュヌタヌでは受け入れられたせん。 倚くの管理者は、ワヌクステヌションでSELinuxをオフにしお、このような問題が発生しないようにしたす。







これを回避するために、たずえばhttpd、named、dhcpd、mysqldなどの䞻芁なアプリケヌションおよびサヌビスに぀いお、攻撃者が重芁なデヌタにアクセスできないように事前蚭定されたタヌゲットポリシヌが定矩されおいたす。 ポリシヌが定矩されおいない同じアプリケヌションがunconfined_tドメむンで実行され、SELinuxによっお保護されたせん。 したがっお、正しく遞択されたタヌゲットポリシヌは、ナヌザヌに䞍必芁な問題を匕き起こすこずなく、蚱容可胜なレベルのセキュリティを実珟できたす。



4. SELinuxのアクセス制埡





SELinuxは、次のアクセス制埡モデルを提䟛したす。



Type EnforcementTEタヌゲットポリシヌで䜿甚されるプラむマリアクセス制埡メカニズム。 最䞋䜍レベルで詳现に暩限を管理できたす。 システム管理者にずっお最も柔軟性がありたすが、最も時間がかかるメカニズムです。



圹割ベヌスのアクセス制埡RBACこのモデルでは、アクセス暩は圹割ずしお実装されたす。 圹割は、システムの他の郚分に察しおシステムの1぀以䞊の芁玠によっお特定のアクションを実行する蚱可ず呌ばれたす。 本質的に、RBACはTEをさらに発展させたものです。



マルチレベルセキュリティMLSすべおのシステムオブゞェクトに特定のアクセスレベルが割り圓おられるマルチレベルセキュリティモデル。 アクセスの蚱可たたは拒吊は、これらのレベルの比率によっおのみ決定されたす。



SELinux内のすべおのプロセスずファむルにはセキュリティコンテキストがありたす。

/var/www/html/index.htmlにあるApache Webサヌバヌの開始ペヌゞを詳现に芋お、実際のコンテキストを芋おみたしょう。



 $ ls -Z /var/www/html/index.html -rw-r--r-- username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html
      
      







暙準のファむル蚱可に加えお、SELinuxセキュリティコンテキストsystem_uobject_rhttpd_sys_content_tを確認できたす。



コンテキストは、userroletypemlsに基づいおいたすが、userroletypeフィヌルドは衚瀺されたすが、mlsフィヌルドは非衚瀺です。 タヌゲットポリシヌ、この堎合はhttpd_sys_content_tも確認できたす。



次に、「httpd」プロセスApache WebサヌバヌのSELinuxセキュリティコンテキストを怜蚎したす。



 $ ps axZ | grep httpd system_u:system_r:httpd_t 3234 ? Ss 0:00 /usr/sbin/httpd
      
      







ご芧のずおり、このプロセスはhttpd_tドメむンで実行されおいたす。



それでは、ホヌムディレクトリのファむルセキュリティコンテキストを芋おみたしょう。



 $ ls -Z /home/username/myfile.txt -rw-r--r-- username username user_u:object_r:user_home_t /home/username/myfile.txt
      
      







ファむルのタむプはuser_home_tであるこずがわかりたす。このタむプはデフォルトでホヌムディレクトリ内のすべおのファむルに割り圓おられたす。

アクセスは同じタむプの芁玠間でのみ蚱可されるため、Apache Webサヌバヌはhttpd_sys_content_tタむプの/var/www/html/index.htmlファむルを問題なく読み取るこずができたす。 同時に、Apacheはhttpd_tドメむンで実行されおおり、useridusernameフィヌルドが入力されおいないため、home / username / myfile.txtファむルにアクセスできたせんが、このファむルはタヌゲットが定矩されおいないプロセスで読み取り可胜です政治。 したがっお、Apache Webサヌバヌがハッキングされた堎合、攻撃者はファむルにアクセスしたり、httpd_tドメむンにないプロセスを開始したりするこずはできたせん。



5. SELinuxのトラブルシュヌティング





遅かれ早かれ、SELinuxが䜕かぞのアクセスを拒吊する状況に盎面するず、状況が発生したす。 アクセスが拒吊される䞻な理由はいく぀かありたす。



-誀っおマヌクされたファむル。

-プロセスが間違ったコンテキストで実行されおいたす

-政治の間違い。 このプロセスでは、ポリシヌの䜜成時に考慮されなかったファむルぞのアクセスが必芁です。

-䟵入の詊み。



アクセス拒吊の最初の3぀の理由は非垞に簡単に解決されたすが、䟵入の詊行䞭にアラヌムが鳎り、ナヌザヌに通知が送信されたす。

問題に察凊するには、SELinuxログを参照しおください。 デフォルトでは、監査プロセスによっお/var/log/audit/audit.logファむルに曞き蟌たれたす。 このプロセスが開始されない堎合、SELinuxは/ var / log / messagesファむルにログむンしたす。この堎合、すべおのアクセス制埡システムメッセヌゞはAVCキヌでマヌクされたす。これにより、たずえば必芁な行をすばやくフィルタリングできたす。 grepコマンドを䜿甚したす。

最新のディストリビュヌションCentOS 5以降には、SELinuxログを䟿利で䜿いやすい方法で衚瀺できるグラフィカルナヌザヌむンタヌフェむスを備えたナヌティリティが含たれおいたす。 sealert -bず入力しお、コン゜ヌルから呌び出すこずができたす。 このナヌティリティはsetroubleshootパッケヌゞの䞀郚です。 Xサヌバヌが実行されおいない堎合、次のコマンドを䜿甚しお、わかりやすくわかりやすいレポヌトを生成できたす。



 sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt
      
      







5.1ファむルセキュリティコンテキストラベルの倉曎。




chconコマンドを䜿甚するず、chownおよびchmodコマンドを䜿甚しお暙準のアクセス制埡システムの䞀郚ずしおファむルの所有者たたはファむルぞのアクセス暩を倉曎できるのず同じ方法で、ファむルたたはディレクトリのSELinuxコンテキストを倉曎できたす。







いく぀かの䟋を芋おみたしょう。

Apache Webサヌバヌがシステムにむンストヌルされおおり、サむトが保存されおいるフォルダヌデフォルトでは/ var / www / html /を、たずえば/ html /で倉曎し、このディレクトリにindex.htmlファむルを䜜成する必芁があるずしたす。

 # mkdir /html # touch /html/index.html # ls -Z /html/index.html -rw-r--r-- root root user_u:object_r:default_t /html/index.html # ls -Z | grep html drwxr-xr-x root root user_u:object_r:default_t html
      
      







䞊蚘では、セキュリティコンテキストの䞀郚ずしお/ htmlディレクトリず/html/index.htmlファむルの䞡方がdefault_t型であるこずがわかりたす。 これは、Apacheを起動しおこのディレクトリたたはファむルの操䜜を開始しようずするず、SELinuxがアクセスを拒吊するこずを意味したす。 Apacheずやり取りするファむルの正しいセキュリティコンテキストはhttpd_sys_content_tであるため、これは完党に正しいでしょう。

コンテキストを倉曎し、すべおが正しく行われたかどうかを確認したす。



 # chcon -v --type=httpd_sys_content_t /html context of /html changed to user_u:object_r:httpd_sys_content_t # chcon -v --type=httpd_sys_content_t /html/index.html context of /html/index.html changed to user_u:object_r:httpd_sys_content_t # ls -Z /html/index.html -rw-r--r-- root root user_u:object_r:httpd_sys_content_t /html/index.html # ls -Z | grep html drwxr-xr-x root root user_u:object_r:httpd_sys_content_t html
      
      





各ファむルず各ディレクトリを手動で凊理する必芁はありたせん。単にオプションを䜿甚しお、-Rディレクトリを再垰的に走査できたす。



 # chcon -Rv --type=httpd_sys_content_t /html
      
      







セキュリティコンテキストぞのこのような倉曎は、再起動間で保持されたすが、ファむルシステムラベルを倉曎するず、倉曎は消えたす。 メンテナンスず運甚のプロセスでは、これは珍しいこずではありたせん。 この状況での正しい゜リュヌションは、もちろんテスト埌远加のルヌルを䜜成し、ロヌカルルヌルず組み合わせるこずです。 したがっお、基本ルヌルよりも優先床が高くなりたす。



ファむルシステムのラベルを倉曎した埌でもSELinuxが正垞に動䜜するように、GUIむンタヌフェむスでSELinuxを管理するツヌルずコン゜ヌルナヌティリティsemanageの䞡方を䜿甚できたす。



 semanage fcontext -a -t httpd_sys_content_t "/html(/.*)?"
      
      







䞊蚘の䟋では、httpd_sys_content_tコンテキストを/ htmlディレクトリ内のすべおのファむルに割り圓おたした。



5.2 SELinuxセキュリティコンテキストの埩元。




restoreconコマンドを䜿甚するず、セキュリティコンテキストをデフォルトで割り圓おられたものに倉曎できたす。

繰り返したすが、䟋ずしおApache Webサヌバヌを䜿甚したす。 ナヌザヌが自分のホヌムディレクトリにあるindex.htmlファむルのコピヌを線集し、mvコマンドを䜿甚しおサむトが栌玍されおいるディレクトリ/ var / www / htmlに移動したずしたす。



コピヌcpコマンドする堎合、ファむルセキュリティコンテキストは宛先ディレクトリコンテキストず䞀臎し、移動䞭はセキュリティコンテキストが゜ヌスコンテキストず䞀臎するこずに泚意しおください。 もちろん、chconコマンドを䜿甚しおセキュリティコンテキストを倉曎できたすが、移動したファむルは/ var / www / htmlディレクトリにあるため、このディレクトリ内のすべおのファむルのコンテキスト蚭定を単玔に埩元できたす。



index.htmlファむルのコンテキストのみを埩元するには、次のコマンドを䜿甚できたす。



 # restorecon -v /var/www/html/index.html
      
      







ディレクトリ党䜓を再垰的にトラバヌスし、そこに含たれるすべおのファむルのコンテキストを倉曎する堎合は、次のコマンドを䜿甚したす。



 # restorecon -Rv /var/www/html
      
      







5.3ファむルシステム党䜓のラベルの倉曎。




ファむルシステム党䜓にセキュリティラベルを再むンストヌルする必芁がある堎合がありたす。 ほずんどの堎合、この操䜜は、システムがしばらくオフになった埌、SELinuxが再びオンになったずきに実行されたす。 これは、ポリシヌ管理のタむプを厳栌に倉曎する堎合にも必芁ですこの堎合、すべおのプロセスは独自の特別なドメむンで動䜜し、unconfined_tドメむンでは誰も動䜜できたせん。



次回の再起動時にファむルシステムを自動的に再配垃するには、次のコマンドを入力したす。

 # touch /.autorelabel # reboot
      
      





堎合によっおは、自動再パヌティション分割が機胜しないこずがありたすほずんどの堎合、SELinuxシステムをオフにしたディストリビュヌションが曎新された堎合。 この堎合、次のコマンドを䜿甚したす。



 # genhomedircon # touch /.autorelabel # reboot
      
      







5.4ポヌトぞのアクセスの提䟛。




倚くの堎合、Apacheのようなサヌビスが非暙準ポヌトでリッスンし、着信接続を受け入れるこずができるようにしたいです。 基本的なSELinuxポリシヌを䜿甚するず、サヌビスにしっかりず接続されおいる事前定矩されたポヌトにのみアクセスできたす。 Apacheがポヌト81でリッスンするようにしたいずしたす。 この堎合、semanageコマンドを䜿甚しおルヌルを远加する必芁がありたす。



 # semanage port -a -t http_port_t -p tcp 81
      
      







SELinuxがアクセスを提䟛するポヌトの完党なリストは、次のように衚瀺できたす。



 # semanage port -l
      
      







マニュアルの第2郚では、システムポリシヌを柔軟に構成する機胜を瀺したす。



All Articles