321.3 SELinux
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 ロールを変更してシェルを起動する
# newrole -r 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の現在の状態と設定ファイルの状態も出力するコマンドです
$ sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 24 Policy from config file: targeted
セキュリティコンテキスト
セキュリティコンテキストとは、プロセスやリソースなどのセキュリティに関する属性のことです
セキュリティコンテキストは次のようにユーザー識別子、ロール識別子、タイプ識別子、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プロセスのセキュリティコンテキストを表示
$ ps axZ | grep ssh system_u:system_r:sshd_t:SystemLow-SystemHigh 2186 ? Ss 0:00 /usr/sbin/sshd system_u:system_r:sshd_t:SystemLow-SystemHigh 2423 ? Ss 0:00 sshd: ishikawa [priv]
・ファイルのセキュリティコンテキストを表示
$ ls -laZ ~/.ssh/ drwx------. hoge hoge_grp system_u:object_r:ssh_home_t:s0 . drwxr-x---. hoge hoge_grp system_u:object_r:user_home_dir_t:s0 .. -rw-------. hoge hoge_grp system_u:object_r:ssh_home_t:s0 authorized_keys -rw-r--r--. hoge hoge_grp system_u:object_r:ssh_home_t:s0 config -rw-------. hoge hoge_grp system_u:object_r:ssh_home_t:s0 id_rsa -rw-r--r--. hoge hoge_grp system_u:object_r:ssh_home_t:s0 id_rsa.pub -rw-r--r--. hoge hoge_grp system_u:object_r:ssh_home_t:s0 known_hosts
・システムに設定されているファイルとタイプの関連付けを表示(file_contextsの内容を表示)
$ view file_contexts.homedirs # file_contexts.homedirs一部抜粋 /home/[^/]* -d user_u:object_r:user_home_dir_t /home/[^/]*/.+ user_u:object_r:user_home_t
ディスカッション
コメント一覧
まだ、コメントがありません