Scientific Linux 6 でのSELinux管理コマンドまとめ

CentOS 5 から Scientific Linux 6 で環境再構築するタイミングでSELinuxを有効にして運用しているので、SELinux運用において必要なコマンドをまとめておく。SELinux管理について体系的に学びたい場合は 日経Linux: 第一人者がやさしく教える新SELinux入門 が良いだろう。

セキュリティ・コンテキストの読み方

<ユーザー名>:<ロール>:<ドメイン or タイプ>:<MLS>

識別子 意味
ユーザー名 プロセスまたはファイルを作成したSELinuxユーザー名。あまり気にしなくてよい
ロール Strictポリシーで使用する。Targetedポリシーでは使わないので無視してよい
ドメイン or タイプ プロセスの場合はドメインと呼び、ファイルなどのリソースの場合はタイプと呼ぶ。重要な識別子
MLS MLSポリシーで使用するレベルやカテゴリー。Targetedポリシーでは使わないので無視してよい

SELinuxは「○○ドメインは△△タイプを□□できる」(例: smbd_tドメインはsamba_share_tタイプをreadできる)といった定義がされたポリシー・ファイルによってアクセス制御を行う。つまり(Targetedポリシーの)SELinux管理とは、このドメインとタイプを管理することが中心となる。

Targetedポリシーの場合、unconfined_tとinitrc_tドメインはすべてのリソースへのすべてのアクセスが許可されている。ログイン・ユーザーの起動したプロセスはすべてunconfined_tドメインで起動されるので、ログインして使用する限りはSELinuxにアクセス拒否されることはない。

プロセスのセキュリティ・コンテキストの確認方法

リソースのセキュリティ・コンテキストの確認方法

動作モードの確認方法

モード 意味
Enforcing SELinuxが有効で、ポリシー違反のアクセスは拒否される。本番モード
Permissive SELinuxが有効だが、ポリシー違反のアクセスはログに記録されるだけでアクセスは拒否されない。テスト・モード
Disabled SELinuxが無効

動作モードの変更方法

引数 意味
0 Permissiveモードに一時的に変更。SELinuxが原因で想定どおり動作しない場合は、このモードに変えてテストしてみるとよい
1 Enforceモードに一時的に変更。Permissiveモードから元に戻す場合に使用

SELinuxの有効無効を変更する、またはEnforcingモードとPermissiveモードを永続的に変更する場合は /etc/selinx/config を変更してOSを再起動する。disabledからenforcingに一気に変更してしまうとセキュリティ・コンテキストが誤っていた場合にOSが起動しないなどの問題が起きるので、permissiveで一度起動し、以下のrestoreconしてからenforcingにするのが安全だろう。

SELinuxでアクセス拒否されたかどうかの確認方法

auditパッケージがインストールされており、auditdが起動していれば /var/log/audit/audit.log にtype=AVCとして記録される。以下はsmbd_tドメインのsmbdプロセスがinitrc_tmp_tタイプの /tmp/zabbix_restart.log をappendしようとしたが拒否されたログだ。

audit.logは日時が読みにくいので、ausearchを使うのもよい

setroubleshoot-serverパッケージがインストールされていれば /var/log/message にもアクセス拒否が記録される。

ログに記されたsealertを実行すると、どのようにすればアクセス拒否を解除できるのかのアドバイスがもらえる。ただ、このアドバイスで拒否が解除できるのは五分五分って感じかな。

/var/lib/setroubleshoot/email_alert_recipients にメールアドレスを記述しておくと、setroubleshootがアクセス拒否を見つけ次第、sealeartの結果をメールしてくれるので「SELinuxが原因で動作しない」という状況にすぐに気づくことができる。

/etc/setroubleshoot/setroubleshoot.cfg のfrom_addressに記述されたメールアドレスからメールが届くが、私の環境ではドメイン部分がホスト名で補完されると送信拒否されてしまうので、以下のように変更している。

セキュリティ・コンテキストを初期化する

リソースに正しいセキュリティ・コンテキストがついていないためにアクセス拒否されている場合、restoreconでデフォルトのセキュリティ・コンテキストに初期化できる。

セキュリティ・コンテキストはリソースが生成されたタイミングで /etc/selinux/targeted/contexts/files/file_contexts に記述されたパスに従ってデフォルト値が設定される。つまり、cpでは新たなコンテキストが設定されるが、mvではコンテキストは更新されない。圧縮ファイルを/tmpに展開して、そこからmvしたときは必ずrestoreconで初期化しよう。

条件付きポリシーを変更する

デフォルトでは厳しいポリシーになっていてアクセス拒否されてしまうが、用途に合わせてポリシーを緩める必要がある場合に簡単に変更できるのが条件付きポリシーだ。どのような条件付きポリシーが用意されているかはgetseboolで分かる。

条件付きポリシーはsetseboolで変更する。

条件付きポリシーは手軽ではあるが、onにすればするほどSELinuxの防御は弱くなるので、onにするべきかどうかは慎重に判断しよう。

セキュリティ・コンテキストを一時的に変更する

一部のリソースのセキュリティ・コンテキストを手動で変更する場合はchconを使用する。

セキュリティ・コンテキストを永続的に変更する

chconで変更したセキュリティ・コンテキストはrestoreconしてしまうと再びデフォルトに戻ってしまうので、semanageでfile_contextsに新たなルールを追加しておくのが良いだろう。追加するパスは正規表現で記述する。

file_contextsは直接開いても良いが、semanageからは以下のように一覧できる。

追加したルールを削除する場合は以下のように行う。

新しいポリシーを追加する

「○○ドメインは△△タイプを□□できる」というポリシーを新たに追加する必要がある場合は、audit.logからテキスト形式のTEファイルを作成し、TEファイルからバイナリ形式のPPファイルというモジュール・パッケージを作成し、PPファイルをポリシー・ファイルに追加するという手順になる。

/var/log/audit/audit.log をそのまま使うと今までアクセス拒否されたすべてがごちゃ混ぜになってしまうので、抽出してから使用するのが良いだろう。

抽出されたaudit.logからaudit2allowを使ってTEファイルを作成する。

作成されたTEファイルを見てみよう。

PPファイルはaudit2allowが自動生成してくれるが、手動でTEファイルを編集した場合などは /usr/share/selinux/devel ディレクトリにTEファイルを移動してmakeする必要がある。

作成したPPファイルをインストールする。

現在のモジュール一覧を以下のように取得できる。

インストールされたモジュールを削除する場合は以下のように行う。

One thought on “Scientific Linux 6 でのSELinux管理コマンドまとめ”

コメントを残す