Benpianエッセイは、SELinuxがアイデアや経験のいくつかを学ぶものを記録します…
、SELinuxの概要
SELinuxは、新しいLinuxのセキュリティポリシーメカニズムの開発のための米国の国家安全保障局NSAコンピュータセキュリティインフラストラクチャによってLinuxのセキュリティ強化(拡張Linuxのセキュア)を。 SELinuxは、システム管理者は、より柔軟なセキュリティポリシーを定義することを可能にします。
Linux2.6カーネルはSELinuxはSELinuxのカーネルレベルので、私たちのすべてを有効にするには、オペレーティングシステムの設定ファイルを変更するために再起動する必要があり、コアに統合されます後にSELinuxは、カーネルレベルのセキュリティメカニズムです。
今の中に発見主流のLinuxバージョンはSELinuxの機構、CentOSの/ RHELを統合されているデフォルトのSELinuxメカニズムで有効になっています。
二、SELinuxの基本的な概念
プロセスとシステムリソース(ファイル、ネットワークソケット、システムコールなど):我々は、オペレーティングシステムのセキュリティメカニズムは、制限をするために、実際に二つのことであることを知っています。
事前知識がそれらを学んだ、Linuxオペレーティングシステムは、ユーザーとグループの概念によって制限され、当社のシステム·リソースにあり、我々は、各プロセスが実行するために、ユーザーが必要であることを知っています。
ドメイン(DOMIN)およびコンテキスト(文脈):SELinuxの中の二つの基本的な概念を定義し、これらの二つのことのために。
ドメインの制限を行うために使用されるが、コンテキストは、システムリソースへの制限です。
我々は、PSで、現在のプロセスについての情報のフィールドを表示するには、このコマンドを-Zでき、SELinuxの情報は、プロセスは次のとおりです。
【xiaoluo〜@ルート]#psの-Z
LABEL PID TTY TIME CMD
unconfined_u:unconfined_r:はunconfined_t:S0-S0:c0.c1023 2503 PTS / 0 0時○○分00秒SU
unconfined_u:unconfined_r:はunconfined_t:S0-S0:c0.c1023 2511 PTS / 0 0時○○分00秒のbash
unconfined_u:unconfined_r:はunconfined_t:S0-S0:c0.c1023 3503 PTS / 0 0時○○分00秒PS
LS -Zコマンドによって、私たちは情報SELinuxのファイルであるファイルコンテキスト情報を、見ることができます:
【xiaoluo〜@ルート]#LSを-Z
。-rw ——-ルートルートsystem_u:object_r:admin_home_t:S0アナコンダ-ks.cfgを
。drwxr-XR-Xルートルートunconfined_u:object_r:admin_home_t:S0デスクトップ
-rw-R – R – +ルートルートsystem_u:object_r:admin_home_t:S0 install.logに
。-rw-rを – r–のルートルートsystem_u:object_r:admin_home_t:S0 install.log.syslog
後、私たちは表して、これらのフィールドを探索しています。
第三に、政策
SELinuxのでは、我々はどのコンテキストにアクセスできるドメインを制御するポリシーを定義することです。
私たち自身がサービスまたはプログラムの一部を保護する必要がない限り、SELinuxの、戦術のプリセットモード品種では、我々は通常、独自のポリシーを定義する必要はありません
デフォルトのターゲット(目標)ポリシーで使用されているCentOSの/ RHELでは、この戦略の目標は何ですか?
ターゲット·ポリシーは、SELinuxの制限によってのみターゲット·プロセスを定義し、非標的プロセスは、通常、当社のWebアプリケーションは、などが挙げられる。これらのWebアプリケーションのhttpd、mysqldを、DHCPD、として、ターゲットプロセスであり、SELinuxの制限ではありません。
私たちのCentOSのSELinuxの設定ファイルは/ etc / sysconfig / selinuxファイルディレクトリに格納され、我々はコンテンツの内部を見ることができます。
コードをコピー
[ルートxiaoluo〜@]#猫の/ etc /のsysconfig / selinuxを
#このファイルは、システム上にSELinuxの状態を制御します。
#のSELINUX =の3つの値のいずれかを取ることができます。
#施行 – SELinuxのセキュリティポリシーが適用されます。
#許容性 – SELinuxのではなく、強制の警告を出力します。
#無効 – いいえSELinuxポリシーがロードされません。
SELINUX =施行
#1 SELINUXTYPE =これら2つの値のいずれかを取ることができます。
#ターゲット – ターゲットプロセスが保護され
#のMLS – マルチレベルのセキュリティ保護を提供します。
SELINUXTYPE =目標と//当社の戦略は、政策CentOSの使用を標的とすることです
コードをコピー
四、SELinuxのモード
SELinuxの存在施行の3つの動作モードは、許容されており、障害
①enforcing力モード:限り、アクションがポリシーに違反しているとして禁止され、カーネルとして記録された情報
②permissive許可モード:ポリシーに違反するアクションが禁止されることはありませんが、警告メッセージが表示されます
③disabled無効モード:ときに、ネットワークの問題の一部へのアクセスが適用されないようにSELinuxを無効にし、SELinuxのシステムなしで、通常、非常に理解し私たちのSELinux同じではありません、モードは、無効に設定されています。
私は、/ etcのsysconfig / selinuxを/主SELinuxの設定ファイルの上にあると述べました
コードをコピー
[ルートxiaoluo〜@]#猫の/ etc /のsysconfig / selinuxを
#このファイルは、システム上にSELinuxの状態を制御します。
#のSELINUX =の3つの値のいずれかを取ることができます。
#施行 – SELinuxのセキュリティポリシーが適用されます。
#許容性 – SELinuxのではなく、強制の警告を出力します。
#無効 – いいえSELinuxポリシーがロードされません。
SELINUX =我々はSELinuxが強制されているデフォルトの動作モードを参照してください//強制
#1 SELINUXTYPE =これら2つの値のいずれかを取ることができます。
#ターゲット – ターゲットプロセスが保護され
#のMLS – マルチレベルのセキュリティ保護を提供します。
SELINUXTYPE =目標と
コードをコピー
SELinuxが強制された私たちのデフォルトのモードでは、我々は、許容または無効に変更することができます
我々はSELinuxの現在のステータスを表示する場合は、次のように表示するgetenforceコマンドを使用することができます。
[ルート@ xiaoluo〜】■getenforce
強制
[0 | 1]現在の動作モードは、我々は現在の動作状態SELinuxを設定するのであれば、あなたはsetenforceを使用することができ、実施されている変更するコマンド、setenforce 0 1は実施表し、許容設定を示します
【注】setenforce SELinuxの設定によっては一時的な変化であり、システムを再起動したときにあなたが永久に主SELinuxの設定ファイルを変更することにより、それを変更したいので、もし、失敗します。
コードをコピー
[ルート@ xiaoluo〜】■setenforce 0
[ルート@ xiaoluo〜】■getenforce
寛容な
[ルート@ xiaoluo〜】■setenforce 1
[ルート@ xiaoluo〜】■getenforce
強制
コードをコピー
【xiaoluo〜@ルート]#LSを-Z
。-rw ——-ルートルートsystem_u:object_r:admin_home_t:S0アナコンダ-ks.cfgを
。drwxr-XR-Xルートルートunconfined_u:object_r:admin_home_t:S0デスクトップ
-rw-R – R – +ルートルートsystem_u:object_r:admin_home_t:S0 install.logに
。-rw-rを – r–のルートルートsystem_u:object_r:admin_home_t:S0 install.log.syslog
object_r:admin_home_t:この事S0、私たちは今、これを分析する必要があります私たちは、私たちが伝統的なsystem_uよりも、そのコマンドls以上を発見し、SELinuxの情報であり、我々はファイルのls -Zコマンド·コンテキスト情報によって、これを表示することができます文は意味を表します
system_u:object_r:admin_home_t:S0
によってこの文:分割は4になった、最初の段落のsystem_uユーザを表し、2番目はobject_r役割を表し、番目の段落はSELinuxのについての最も重要な情報であり、admin_homeは最後の段落がS0である、型を表しますMLS、MCSに関連するもので、必要はありませんパイプへ
①system_uはuser_uはsystem_u、通常のユーザー権限のないユーザーを表し、rootはrootアカウントの状態を表し、SELinuxのユーザーを参照する一般的な使用の役割と、ユーザのタイプの身元を確認することができるシステム·プロセス。時にはアイデンティティと異なる権限を持つ異なる役割、ユーザーを切り替えることがsuコマンドを使用できますが、ユーザーIDが実質的な役割を持っていない対象と政策環境にアカウントを切り替えるときにSELinuxのユーザのために、ユーザーIDの変更を変更していないものの、 。
ロールファイルディレクトリのための一般的なobject_r②object_r、system_r政策環境における標的のユーザーの役割に役割のための一般的な方法は、一般system_r。ユーザーの役割は、ユーザーグループの概念に似ている、別の役割は、ユーザーが複数の役割を持つことができますが、同時に1つのロールのみを使用することができます別のアイデンティティの権限を持っています。政策環境では実質的な役割、目標と役割、プロセスの役割は、すべてのファイルが対象となる政策環境でsystem_r役割ではありません。
③admin_homeファイルおよびプロセスはSELinuxが制限されたアクセスの種類に応じて、関連する複合型があります。
5つの実施例
ここでは、コンテキストの値と、SELinuxのアクセス制御の状況を見ての例を持っています
例えば、私は、我々は、デフォルトWeb WWWサーバの保管場所は、/ var / www / htmlディレクトリの下にあることを知って、よくWebサーバーをセットアップし、我々は新しいテストindex.htmlページを作成するためにここにいる場合は、当社のWWWサーバの更新を開始しますその内容を見ることができ、その後、私たちは/ homeディレクトリにindex.htmlページを作成するのであれば、次の/ var / www / htmlディレクトリに移動し、ページを更新し、それはしません通常表示?
まず、私たちはhttpdサービスを開始します。
[ルート@ xiaoluo〜]#サービスのhttpdの再起動
停止のhttpd:[OK]
のhttpdの起動:httpdの:apr_sockaddr_info_get()xiaoluoに失敗しました
httpdが:確実にServerNameのための127.0.0.1を使用して、サーバーの完全修飾ドメイン名を特定できませんでした
[OK]
次に、ブラウザを開いて、アクセスに私達の127.0.0.1を入力し、インターフェイスを表示するには、この時間は、Apacheのテスト·インタフェースは、次のとおりです。
/ var / www / htmlと設定ページの下に、この時点で私たちはいずれも存在しないため。
【xiaoluoホーム@ルート]#LL / var / www / htmlと設定/
合計0
次に、我々は/ homeディレクトリにあるindex.htmlページを作成し、私たちの/ var / www / htmlディレクトリの次に移動
コードをコピー
[ルート@ xiaoluoホーム]#viとのindex.htmlを
これは、SELinuxの約テストです
【xiaoluoホーム@ルート]#mvのindex.htmlを/ var / www / htmlと設定/
[ルート@ xiaoluo HTML]ます。#cd / var / www / htmlと設定/
[ルート@ xiaoluo HTML]#のLS
index.htmlを
コードをコピー
この場合には、通常の状況下で、我々は、ブラウザのページを更新する場合は、この時点でのindex.html HTMLディレクトリのページの存在下では、index.htmlページにジャンプする必要があるため、
しかし、我々は最終的には、このテストページまたはページで見つかったという事実は、なぜですか?この私たちの関係SELinuxのセキュリティポリシーでは、我々は、エラー·メッセージを見つけるために、このファイルのaudit.logこのカタログは/ var / log /監査を行くことができます
コードをコピー
[ルート@ xiaoluo HTML]#テール/var/log/audit/audit.log
TYPE = CRED_DISP MSG =監査(1369575601.957:289):ユーザーのpid = 3637 UID = 0 AUID = 0 SES = 44 SUBJ = system_u:system_r:crond_t:S0-S0:c0.c1023 MSG = ‘OP = PAM:setcred ACCT = “ルート” EXE = “は、/ usr / sbin / crond「ホスト名=?ADDR =端子=クーロンRES =成功」
TYPE = USER_END MSG =監査(1369575601.957:290):ユーザーのpid = 3637 UID = 0 AUID = 0 SES = 44 SUBJ = system_u:system_r:crond_t:S0-S0:c0.c1023 MSG = ‘OP = PAM:session_close ACCT = “ルート” EXE = “は、/ usr / sbin / crond「ホスト名=?ADDR =端子=クーロンRES =成功」
タイプ= AVCのMSG =監査(1369575729.534:291):AVC:PID = = “httpdの”パス3619 COMM = “/ var / www / htmlと設定/ index.htmlを「DEV = SDA2のino = 538738 scontext = unconfined_uのため拒否された{GETATTR} :system_r:httpd_t:S0 tcontext = unconfined_u:object_r:home_root_t:S0 TCLASS =ファイル
タイプ= SYSCALLのMSG =監査(1369575729.534:291):アーチ= c000003eシステムコール= 4成功=なし終了= -13 A0 = 7f34198634f8 A1 = 7fffbc87bee0 A2 = 7fffbc87bee0 A3 = 7f341985ff60商品= 0 PPID = 3612 PID = 3619 AUID = 500 UID = 48 GID = 48 EUID = 48 SUID = 48 FSUID = 48 EGID = 48 SGID = 48 fsgid = 48 TTY =(なし)、SES = 1 COMM = “httpdの” EXE = “は、/ usr / sbin / httpdの「SUBJ = unconfined_u: system_r:httpd_t:S0キー=(ヌル)
タイプ= AVCのMSG =監査(1369575729.535:292):AVC:PID = = “httpdの”パス3619 COMM = “/ var / www / htmlと設定/ index.htmlを「DEV = SDA2のino = 538738 scontext = unconfined_uのため拒否された{GETATTR} :system_r:httpd_t:S0 tcontext = unconfined_u:object_r:home_root_t:S0 TCLASS =ファイル
タイプ= SYSCALLのMSG =監査(1369575729.535:292):アーチ= c000003eシステムコール= 6成功=なし終了= -13 A0 = 7f34198635c8 A1 = 7fffbc87bee0 A2 = 7fffbc87bee0 A3 = 1アイテム= 0 PPID = 3612 PID = 3619 AUID = 500 UID = 48 GID = 48 EUID = 48 SUID = 48 FSUID = 48 EGID = 48 SGID = 48 fsgid = 48 TTY =(なし)、SES = 1 COMM = “httpdの” EXE = “は、/ usr / sbin / httpdの「SUBJ = unconfined_u: system_r:httpd_t:S0キー=(ヌル)
タイプ= AVCのMSG =監査(1369575736.549:293):AVC:PID = = “httpdの”パス3618 COMM = “/ var / www / htmlと設定/ index.htmlを「DEV = SDA2のino = 538738 scontext = unconfined_uのため拒否された{GETATTR} :system_r:httpd_t:S0 tcontext = unconfined_u:object_r:home_root_t:S0 TCLASS =ファイル
タイプ= SYSCALLのMSG =監査(1369575736.549:293):アーチ= c000003eシステムコール= 4成功=なし終了= -13 A0 = 7f34198634f8 A1 = 7fffbc87bee0 A2 = 7fffbc87bee0 A3 = 7f341985ff60商品= 0 PPID = 3612 PID = 3618 AUID = 500 UID = 48 GID = 48 EUID = 48 SUID = 48 FSUID = 48 EGID = 48 SGID = 48 fsgid = 48 TTY =(なし)、SES = 1 COMM = “httpdの” EXE = “は、/ usr / sbin / httpdの「SUBJ = unconfined_u: system_r:httpd_t:S0キー=(ヌル)
タイプ= AVCのMSG =監査(1369575736.549:294):AVC:PID = = “httpdの”パス3618 COMM = “/ var / www / htmlと設定/ index.htmlを「DEV = SDA2のino = 538738 scontext = unconfined_uのため拒否された{GETATTR} :system_r:httpd_t:S0 tcontext = unconfined_u:object_r:home_root_t:S0 TCLASS =ファイル
タイプ= SYSCALLのMSG =監査(1369575736.549:294):アーチ= c000003eシステムコール= 6成功=なし終了= -13 A0 = 7f34198635c8 A1 = 7fffbc87bee0 A2 = 7fffbc87bee0 A3 = 1アイテム= 0 PPID = 3612 PID = 3618 AUID = 500 UID = 48 GID = 48 EUID = 48 SUID = 48 FSUID = 48 EGID = 48 SGID = 48 fsgid = 48 TTY =(なし)、SES = 1 COMM = “httpdの” EXE = “は、/ usr / sbin / httpdの「SUBJ = unconfined_u: system_r:httpd_t:S0キー=(ヌル)
コードをコピー
ログファイルから、我々はindex.htmlには、理由のうち、ページを更新し確認することができ、当社のSELinuxのセキュリティポリシーが発生したためであります
ただのls -Zコマンドを使用してindex.htmlのコンテキスト情報の上に移動を見てみましょう
[ルート@ xiaoluoは、HTML】■LS -Z
。-rw-rを – r–のルートルートunconfined_u:object_r:home_root_t:S0のindex.html
私たちは、その3番目のフィールドのタイプはこれが理由です、home_root_tであることがわかりましたか?デフォルトの情報のSELinuxのタイプはディレクトリを継承するので、これは、私たちは/ homeディレクトリに作成index.htmlファイルであるため、我々はコンテキスト情報/ホームこのディレクトリを見ることができます:
[ルート@ xiaoluo HTML]#LSの-Z -d /ホーム/
drwxr-XR-Xルートルートsystem_u :. object_r:home_root_t:S0 /ホーム/
、我々は、3番目のフィールドを参照してください、と私たちは親ディレクトリに影響された値のファイルのコンテキストで見ることができるのと同じindex.htmlには、通常の状況下で、彼らはコンテキストの親ディレクトリの値を継承します持っていますただし、ファイル生成し、いくつかのインストールサービスのコンテキスト値の例外は、親ディレクトリのコンテキストの値を継承しません、サービスは自動的にそのようなHTTPサービスとして、それらの値のコンテキストを作成しますでは/ var / wwwディレクトリディレクトリはhttpdをインストールしない場合にインストールされていませんサービス後にサービスが自動的に必要なディレクトリを作成し、サービス関連のディレクトリとファイルにだけコンテキスト値を定義します、彼らは親ディレクトリの値のコンテキストを継承しません。
[ルート@ xiaoluo HTML]#LSの-Z -d / VAR
。drwxr-XR-Xルートルートsystem_u:object_r:var_t:S0 / VAR
[ルート@ xiaoluo HTML]#LSの-Z -d / var / www / htmlと設定/
drwxr-XR-Xルートルートsystem_u :. object_r:のhttpd_sys_content_t:s0の/ var / www / htmlと設定/
この時点で、我々はコンテキストタイプ/ var / www / htmlと設定ディレクトリを発見したのhttpd_sys_content_tで、タイプのindex.html私たちは上に移動するが、我々は違反ので、SELinuxのモードが強制され、この時点で動作するためには、home_root_tですポリシーアクションを禁止し、私たちはページをリロードされる内部情報私たちのindex.htmlには表示されませんので、この時間は、我々はこの問題を解決する必要がありますか?
典型的には、溶液は、二つで構成されています。
①直接SELinuxの動作モードには、無効に設定されているので、問題をインターセプトするには、no戦略はありませんが、その後、私たちのシステムは、SELinuxのセキュリティを持っていないされています
私たちのファイルのコンテキスト情報を修復するrestoreconコマンドまたはCHCONコマンドで②
コマンドは、デフォルトのコンテキストrestoreconコマンドファイルを回復するために使用することができます:
restoreconコマンド-R -v /var/www/html/index.html // – Rは再帰を表し、それがディレクトリである場合、このディレクトリ内のすべてのサブディレクトリ、ファイルが修復されます
CHCONコマンドは、ファイルのコンテキスト情報を変更することができ、我々は通常変更するリファレンスファイルを使用します。
CHCON –reference = / var / www / htmlと設定/ index.htmlを/var/www/html/test.html
ここでは、restoreconコマンドコマンド私たちのデフォルトのコンテキストを使用して、ファイルを復元する必要があります。
[ルート@ xiaoluo HTML]#restoreconコマンド-vのindex.html
restoreconコマンド/var/www/html/index.htmlコンテキストunconfined_uをリセット:object_r:home_root_tを:s0-> unconfined_u:object_r:のhttpd_sys_content_t:S0
[ルート@ xiaoluoは、HTML】■LS -Z
。-rw-rを – r–のルートルートunconfined_u:object_r:のhttpd_sys_content_t:s0のindex.htmlを
あなたが私たちのindex.htmlの内部内容を見ることができ、index.htmlのコンテキスト情報は、コンテキスト情報の親ディレクトリのHTMLディレクトリを継承し、この時間は、我々はページを更新するだろう、将来の使用のrestoreconコマンドコマンドを参照してください
この例では、我々は、間のSELinuxのファイルコンテキスト情報との関係を理解し、エラーの嘘を見つけるために、ログファイルを表示して/var/log/audit/audit.log情報を知っているし、修復するにはrestoreconコマンドコマンドによる私たちのファイルへのコンテキスト情報
本篇主に基本的な概念とSELinuxのSELinuxはSELinuxのに関連するいくつかのコマンドのエッセイより具体的には、コンテンツや知識のいくつかは、将来的には、学習の過程を記録されます! ! !
Leave a Reply