Edited at

SELinuxについてのメモ

More than 5 years have passed since last update.

SELinux ドキュメント(4章5章)をざっと読んで気になる点をまとめました。


ドキュメントの所在

Security Enhanced Linux


SELinuxって?


  • Linuxのセキュリティを強化する仕組みで、カーネルに追加される

  • 米国国家安全保障局 (National Security Agency) が開発した


SELinuxのセキュリティの仕組み


  • プロセスとファイルの全てに、タイプでラベル付けを行う。

  • タイプはプロセスのドメインを定義しており、プロセスはドメイン毎に互いに分離している。

  • SELinuxポリシールールは、タイプに基づきプロセスがファイルと対話する方法とプロセス同士が対話する方法を定義する。

  • プロセスは、アクセスを許可するポリシールールが定義されている場合のみ、当該ファイル又はプロセスへアクセスできる。


セキュリティチェックのフロー


  1. Linuxの既存のアクセス管理(DAC:任意アクセス制御)(chownやchmodで管理しているアレ)がチェックする.

  2. SELinuxのルールをチェックする


SELinuxの動作例

ls -Z /var/www/html

system_u:system_r:httpd_sys_conten_t:s0

httpd_sys_content_tラベルが、httpdプロセスがこのファイルにアクセスできることを表す.

rootユーザーでtouch /var/www/html/testfileとすると

親ディレクトリのラベルを引き継ぐ

ls -Z /var/www/html/testfile

unconfined_u:object_r:httpd_sys_content_t:s0
wget http://localhost/testfile # sucess

testfileのラベルを変更するとリード権限があっても、アクセスできなくなる。

chcon -t samba_share_t /var/www/html/testfile

wget http://localhost/test/file # forbidden

この場合/var/log/audit/autit.logにエラーログが記録される。


関連ファイル


ログファイル

/var/log/audit/autdit.log

拒否されたさいのログなどが記録される。


設定ファイル


SELinuxの有効無効を設定する

/etc/selinux/config

以下の設定でSELinuxの有効、無効を設定できる。

SELINUX=稼働モード


  • enforcing ・・・SELinuxポリシー適用

  • permissive ・・・SELinuxポリシーは適用するがアクセス拒否等はせず、ログは記録する。

  • disable ・・・ 無効。ファイルへのラベル付けが無効になったり、後々色々弊害でるようなので避けたい方が良い。


ツールのインストール

自分の環境(CentOS6.5)には入っていなかったため、yumでインストールしました。

yum -y install policycoreutils-python


SELinuxの状態設定


状態確認

getenforce

enforcing, permissive, disableのいずれかがかえる


状態表示

sestatus

SELinuxのステータスを表示する


一時的にenforingとpermissiveを切り替える

setenforce 1 # enforingにする

setenforce 0 # permissiveにする


設定項目の一覧表示

semanage boolean -l

各設定項目のon/offを確認でき、設定項目の説明も表示される。

getsebool -a

ブール値の一覧表示。(ただし説明は表示されない)


項目の設定

setsebool boolean-name x

指定した項目のブール値を変更する。


ラベルの確認の仕方


プロセスの場合

ps -Z

プロセスは実行されると、シェルのドメインからプロセスのドメインに移行します。(例ではpasswdならpasswd_tドメインへ)


ファイルの場合

ls -Z


ラベル付けのルール

※ 重要

ファイルやディレクトリーは移動よりコピーした方が、正しいラベリング付けが確保される。


ファイルを新規作成した場合


  • ディレクトリを新規作成すると、その親ディレクトリのラベルを引き継ぐ


ファイルをコピーした場合


  • ファイルをcpでオプション指定なしでコピーすると、コピー先のデフォルトのラベリングルールに従って、ラベリングされる。(デフォルトでは、コピー先のラベルが設定される) ただし既存のファイルがある場合は、そのラベリングを引き継ぐ

  • ラベルを保持してコピーする場合は、cp --preserve=contextオプションを利用する


ファイルを移動した場合


  • 移動すると、移動元のファイル・ディレクトリは現在のラベルを維持する。


ラベルの変更の仕方


一時的な変更

chcon -t type file-name # -Rを付与で再帰的に適用可能

ファイルシステムの再ラベル付けやrestoreconにより元に戻る。


永続的な変更

semanage fcontext -a options file-name|dir-name # file_contextのラベルを変更する

restorecon -v file-name | dir-name # 変更を適用する

ファイルのラベルを変更をすると、/etc/selinux/targeted/contexts/files/file_context、またはfile_context.localに記録される。ファイルシステムの再ラベリングに利用するsefilesとSELinuxコンテキストを復元するrestoreconはこれらのファイルを読み込む。


おまけ(注意する点)


  • SELinuxをdisableにしてしまうと、ラベル付けすら行われなくなるので、利用しない場合permissiveにした方がよい。

  • ファイルにアクセスできない場合は、一時的にpermissiveにしてDAC(chownやchmodで管理しているアクセス権)に問題無いことを確認する。

  • ログファイルにて、SELinuxにより問題があるかを確認する。

  • SELinuxで管理されているファイルはmvよりもcpした方が良い(コピー先のルールに自動的に変更されるため)。(とあるが・・・mvしたい場合も多々あるんですが)