RHEL7のドキュメントである、「SELINUX ユーザーおよび管理者のガイド」を読んでSELinuxを勉強しながら、今後使いそうな部分の内容を整理したものです。
はじめに
- SELinuxによるアクセス制御は、Mandatory Access Control(MAC)を実装したもの。ほかに、従来からあるユーザとグループとディレクトリやファイルのモードによるものはDiscretionary Access Controlがある。
- SELinuxのポリシールールは、DACの後に適用されるため、DACで拒否するものにはSELinuxのポリシールールは適用されず、SELinuxのログにも残らない。
- SELinuxのポリシールールは、SELinuxコンテキストというラベルを使って記述する。SELinuxコンテキストは、それぞれのプロセスやシステムリソースに割り当てられる。
- SELinuxコンテキストには、次のフィールドがある。:ユーザー、ロール、タイプ、セキュリティーレベル
- このうち、タイプの利用頻度が高い。タイプは、通常_tで終わる名前を持つ。なお、タイプのことをタイプコンテキストと呼ぶ。ほかにドメインと呼ぶ場合もある。
SELINUX コンテキスト
- SELinuxステータスの確認方法:sestatus
- ロールの定義はプロセスのみ有効で、ファイルに対しては無効。
ターゲットポリシー
- SELINUX を使った作業 ====================
SELinuxを使った作業
- ブール値の一覧出力:getsebool -a semanageコマンドをインストールしておくと、説明付きで表示できたりするので便利。 ブール値は特定の用途毎にonかoffかの設定があり、これを変更するだけでSELinuxのポリシーを変更できる。
- ブール値の設定:setsebool -P パラメータ名 {on|off} -Pは恒久設定にするためのオプション。-Pがない場合は再起動後は変更前の状態になる。
- 一時的なファイルコンテキストの変更:chcon -t タイプ ファイル名 一時的な変更として変更可能。-Rはrecursive。
- ターゲットポリシーによるファイルコンテキストの変更:restorecon -v ファイル名 /etc/selinux/targeted/contexts/files/にあるファイルに従ってコンテキストを復元する。-vはverbose。
- ターゲットポリシーの変更:semanage fcontext -a -t タイプ ファイルのフルパスまたは"正規表現" ターゲットポリシーを変更するだけで、ファイルのコンテキストは変更しない。restoreconで適用する。-aはコンテキストの新規追加。 なお、ファイルのコンテキストは基本的に親ディレクトリのコンテキストを引き継ぐ。
- ターゲットポリシーからの削除:semanage fcontext -d パスまたは"正規表現" なお、semanageはsetfilesコマンド等を利用している。
- コンテキストのマウント:mount -o context=SELinux_user:role:type:level ここで指定したコンテキストはファイルシステムに対して変更されず、一時的なものとして利用できる。 拡張属性(EA)に対応していない(コンテキストの記録ができない)場合にも利用可能。 この場合は、chconによるコンテキスト変更はできない。
- コンテキストを含めてファイルをコピー:cp --preserve=context オプションがない場合は、通常のターゲットポリシーに基づき設定。通常は親ディレクトリを継承。
- コンテキストを指定してファイルをコピー:cp --context=systemu:objectr:sambasharet:s0
- ファイル、ディレクトリの移動:mv 移動時はコンテキストが維持される。そのため、ターゲットポリシーに合わずアクセスできない場合が多い。
- ターゲットポリシーと実際のファイルの比較:matchpathcon -V ファイル 差分を表示する。適用する場合はrestoreconを使う。
- コンテキストを維持してtarする:tar --selinux オプションがない場合はコンテキスト情報は失う。
- tarの展開時にターゲットポリシーを適用する:tar -xvf archive.tar | restorecon -f -