ex1-lab

Linux, CentOS, Mac OS X, Windows, 仮想化, Apache等のLinux中心に気になることをメモがわりに・・・

321.3 SELinux

      2017/02/03 この記事は約7分で読むことができます。

321.3 SELinux

重要度 6
説明 SELinux全般の知識があること。
主要な知識範囲

  • SELinuxの設定
  • TE、RBAC、MAC、およびDACの概念と使用方法

重要なファイル、用語、ユーティリティ

  • fixfiles/setfiles
  • newrole
  • setenforce/getenforce
  • selinuxenabled
  • semanage
  • sestatus
  • /etc/selinux/
  • /etc/selinux.d/

SELinux

SELinux(Security-Enhanced Linux)は、アメリカ国家安全保障局がGPL下で提供しているLinuxのカーネルに強制アクセス制御 (MAC)機能を付加するモジュールの名称。
Linuxカーネル2.6で正式にサポートされました

SELinuxなどのセキュアなOSが登場する以前は、DAC(任意アクセス制御)方式のアクセス制御が一般的でした。
DAC方式は、ファイルやディレクトリなどのオブジェクト操作は、そのオブジェクトの所有者にアクセス制御を任せる方式です。
但し、rootユーザーは絶対的な権限が持っていました。
そのため、悪意ある第三者にrootユーザーの権限を奪われると、そのシステム全てに影響がありました。
SELinuxでは、rootユーザーの持っている権限を複数のユーザーやプロセスに細かく分けて、それぞれにセキュリティポリシーをせっていしました。
それぞれのユーザーやプロセスが必要最低限の権限しか持っていないため、ユーザーやプロセスが乗っ取られても、システムへの影響が最小限に抑えることができます

SELinuxでは以下の様な機能があります

MAC
SELinixでは、MAC(Mandatory access control)というアクセス制御方式が採用されています
この方式では、セキュリティポリシーで適用されたとおりにアクセス権が付与されます。
ファイルやディレクトリの所有者や、rootユーザーであってもそのポリシーで決められたことしかできません。
MACはネットワークのソケットやプロセスにも適用されます

TE
TE(Type Enforcement)とは、プロセスのリソースに対するアクセス権を割り当てる機能です
・プロセスに対して「ドメイン」と呼ばれるラベルを付与します
・ファイルやディレクトリ、ソケットなどのリソースに対して「ラベル」と呼ばれるラベルを付与します
・リソースには、「アクセスベクタ」と呼ばれる(読み・書き・実行などの)操作権限を付与します
これらの用いて「どのプロセスが、どのリソースに対して、どのような操作ができるか」を設定することでアクセスの制御します

RBAC
RBAC(Role Base Access Control)は、ユーザーのアクセス権を制御する機構です
RBACは「システム管理者」「メール管理者」のようなロールと呼ばれる役割ごとにアクセス権を設定し、これをユーザーに付与することでアクセス制御します

ドメイン遷移
TEで説明したとおり、プロセスには「ドメイン」というラベルを付与します。
親プロセスから子プロセスを呼び出して実行するような処理の場合、親プロセスと同じ権限を子プロセスに付与するのではなく、最小限の権限で子プロセスを実行したい場合があります。
ドメイン遷移を使用すると、子プロセスに対する権限の制限を可能となります

Pseudoファイルシステム

Pseudoファイルシステムは擬似ファイルシステムとも呼ばれ、カーネルの特殊な情報にアクセスするための仮想的なファイルシステムのことを言います
例えば、システムのプロセス情報が格納されている /proc も Pseudoファイルの一つです
SELinuxのPseudoファイルシステムは、/selinux です

chsid・chcon コマンド

ファイルのセキュリティコンテキスト(現在有効なセキュリティに関する属性)を変更するためのコマンドですが、バージョンの古いSELinuxで使用されていました
現在はこのchsidに置き換わるコマンドして、chcon コマンドが有ります

書式
chcon [] コンテキスト ファイル
chcon [] [-u ユーザー] [-r ロール] [-l カテゴリ] [-t タイプ] ファイル
[]は省略可能

newrole コマンド

newrole コマンドは、SELinuxのコマンドで、シェルを新しいロールで実行するコマンドです

書式
newrole [-r または --role] ロール [-- [引数]]
newrole [-t または --type] タイプ [-- [引数]]
newrole [-r または --role] ロール [-t または --type] タイプ [-- [引数]]
[]は省略可能


・sysadm_r ロールを変更してシェルを起動する

setenfoece

setenfoeceコマンドは、実行中のSELinuxモードを変更するコマンドです

書式
setenfoece モード

モード

0 または permissive permissiveモードに変更する。
セキュリティポリシーに違反するアクセスがあった場合はログに記録されるがアクセスは許可する
1 または enforcing enforcingモードに変更する
セキュリティポリシーに違反するアクセスを拒否する。アクセスされたことはログに記録される

getenforce

getenforceは、SELinuxの動作状況を表示するコマンドです

書式
setenfoece

getenforceコマンドの返り値

Enforcing SELinux機能、アクセス制御が有効
Permissive SElinuxは警告を出力するが、アクセス制限は無効
disabled アクセス制御(SELinux)が無効

sestatus

sestatusは、SELinuxの現在の状態と設定ファイルの状態も出力するコマンドです

セキュリティコンテキスト

セキュリティコンテキストとは、プロセスやリソースなどのセキュリティに関する属性のことです
セキュリティコンテキストは次のようにユーザー識別子、ロール識別子、タイプ識別子、MISで構成されます

セキュリティコンテキストの項目
主なオプション

ユーザー識別子 オブジェクトに結び付けるSELinuxのユーザーを指定。次のようなユーザーを指定
root システム管理用ユーザー
system_u プロセスやオブジェクトを使用するユーザー
user_u 一般ユーザー
ロール識別子 ユーザーを割り当てるロールを指定。次のようなロールを指定
object_r ファイルなどに付与されるロール
staff_r 一般ユーザーが使用するロール。sysadm_rに変更可能
sysadm_r システム管理者が使用するロール
system_r プロセスが使用するロール
user_r 一般ユーザーが使用するロール。sysadm_rに変更可能
タイプ識別子 アクセスを制御するタイプを指定。数百種類のタイプがあり、例えるなら次のようなタイプを指定可能
sshd_t SSH接続時に使用するタイプ
sysadm_t システム管理者が使用するタイプ
MIS MLS(Multi Category Security:情報の機密性)を指定。
リソースに付与されたカテゴリとレベルを比較して、アクセスを制御する。
例えば、自分より役割が上の社員の情報を閲覧できないが、役職が同じ、または下位の社員の情報は閲覧可能と行った制御が可能
ディストリビューションによっては、この項目が存在しない


・SSHプロセスのセキュリティコンテキストを表示

・ファイルのセキュリティコンテキストを表示

・システムに設定されているファイルとタイプの関連付けを表示(file_contextsの内容を表示)



 - LPIC 30x