講習を受けてSELinuxへの苦手意識が無くなった

SElinuxといえば扱いが難しいというイメージがありませんか?自分も新しくOSをインストールしたらまずは始めにDisableにして・・・その後結局そのまま・・・みたいな感じだったのですが、セキュリティへの意識をより強化しなくてはという職場の方針で、講習を受けてきました。

まず受けた感想ですが、とても良かったです(小並感)。SELinuxとは何を、どうやってコントロールしているのか、そしてどのように設定するべきか、エッセンスを学ぶことができたように思います。

とりあえずポイントを列挙しておくと(RHEL6を想定)こんなんです。

  • SELinuxは各プロセスがアクセスできるリソースを制御することによって、進入攻撃による被害を最小限に留めることを目的とする。
  • SELinuxはPermissiveでの動作にしておくことで、各プロセスのファイル・ネットワークへのアクセス自体には制限をさせず(そのまま処理継続)、その中でポリシー違反があった場合にその内容を/var/log/audit/audit.logに出力させることができる→開発時にはPermissiveにしておき、実際に動かしてポリシー違反があるかどうかチェックする。違反となる原因を解決させたのちEnforcedにして本番稼動という流れが良い。
  • SELinuxのアクセス制御モードはtargetdが最も扱いやすいのでtargetdで動作させるのを基本とする。
  • SELinuxを動作させた状態でlsコマンド・psコマンドにZオプションをつけるとプロセスやファイルシステムにそれぞれ割り当てられているポリシー「セキュリティコンテキスト」を表示させることができる。
  • セキュリティコンテキストにはユーザ、タイプ、ロール、レベルという属性があり、その組み合わせをラベルと呼ぶ。targetdで動作させるときは特にタイプが重要。
  • プロセスがリソースにアクセスするときはポリシーの設定ファイルを参照する。
  • 可読なポリシーの設定ファイルが/etc/selinux/targetd/contexts/files配下にfile_contexts、file_contexts.localという名前で置かれている。前者はデフォルトの設定で、後者はユーザが追加で定義したもの。実体はバイナリなので読めない。
  • sesearchコマンドで現状のポリシーを検索できる。
  • semanageコマンドでポリシーの変更を行い、restoreconコマンドで反映させる。
  • 一時的な変更を行うときはchconコマンドで。元に戻すときはfixfilesコマンド。
  • ポリシー違反を回避する許可設定をしたいときはaudit2allowコマンドを使えば許可すべき設定を出力することができる。こんな感じに使う。grep AVC audit.log | audit2allow
  • 最近のSELinuxのポリシーはモジュール化されており、モジュールの追加・停止でアクセス制御ルールを変更できる。
  • semoduleコマンドでモジュールを操作する。lオプションで現在のインストール済みモジュール一覧を取得できる。
  • 一時的にポリシーモジュールを無効・有効化するときはsemanage -m [--disable | --enable] modulename
  • ポリシーモジュールはaudit2allowのmオプションでテンプレートを作成すればほぼ自動的にパッケージが作れる
  • 基本的にはアクセスを許可するポリシーを増やすのではなく、デフォルトの設定で収まるようにアプリケーションを設計するべき

今までなんとなくとっつきづらい、難しいもののように思っていましたが、一度その動きを大まかにでも理解できれば、そこまで敬遠するほどのものではないです。むしろ引っかかる原因さえ割り出すことができれば、あとはどうポリシーを設定するべきかだけな気がします。設定も各種ツールが揃ってますし。ただRHEL4とかのSELinuxはとても使いづらいものだったらしいので、そのトラウマが残ってる人は多いのかもしれませんね。今SELinuxに拒否感がある人も一度しっかり勉強してみればその辺の意識も変わるんじゃないでしょうか。