SELinuxでは、アクセスが拒否された場合カーネルのメッセージとしてログが出力されます。デフォ ルトでは/var/log/messagesにログが出力されます。ログの例を示します。
avc: denied
{
read } for pid=8903 exe=/bin/cat path=/var/www/html/index.html dev= tcontext=system_u:object_r:var_www_t tclass=file |
図 5.1 ログの例
様々 な情報がありますが、全てのログに共通する情報は赤く示してあります。赤く示したフィールドについて説明します。
- { 操作名 }:拒否された操作を表します。この場合は、「read」という操作が拒否されています。
- scontext:リソースにアクセスしようとしたドメインを示します。
- tcontext:リソースについたラベルを示します。
- tclass:リソースの種別を表します。
図 5.1の 場合、ドメイン「sysadm_t」を持ったプロセスが、「var_www_t」というラベルのついた「file」への「read」アクセスが失敗したと いう意味になります。設定をする場合は、ドメインsysadm_tにvar_www_tへの「read」アクセス権を与えなくてはならないということが分 かります。このようにしてSELinuxではドメインに必要なアクセス権を判別し設定していきます。もちろん、拒否された操作が本当に必要な操作なのかきちんと見極める必要が あります。
ただ し、SELinuxに相当精通した人でなければこのログを見ただけでは設定をすること は難しいかもしれません。そこで、以降はどのようなログがでたらどんな設定をすればよいかをSELinux Policy Editorの設定項目に沿って説明していきます。
ファイルに関する設定が不足している場合はファイルへのアクセスが拒否されたと いうログが出力されます。図 5.2に ログの例を示します。
avc: denied
{ read } for pid=8903
exe=/bin/cat path=/var/www/html/index.html dev= tcontext=system_u:object_r:var_www_t tclass=file |
図 5.2 ファイル関連のログの例
赤い 部分がファイルに関連するログの特徴です。sysadm_tドメインの /var/www/html/index.htmlへの読み込みアクセスが拒否されていることが分かります。
ここ で注意すべきは、「path」 が示すのはマウントポイントからのパスになっていることです。例えば/usr/localにファイルシステムがマウントされている場合、「path」を見 ただけでは「/var/www/html」なのか「/usr/local/var/www/html」なのか分かりません。どのファイルシステムなのかは 「dev」のフィールドを見れば分かります。「dev=08:01」というのはマウントされているパーティションのメジャー番号とマイナー番号です。メ ジャー番号・マイナー番号とマウントポイントの対応は/proc/partitions、/etc/mtabを見れば分かります。
表 5.1にSELinux Policy Editorで許可すべきパーミッションとログの特徴を示します。この表を参考にして与えるべきパーミッションを決めてください。
表 5.1SELinux Policy Editorで許可すべきパーミッションとログの特徴(ファイル)
許可すべきパーミッション |
ログの特徴 |
r |
{}に、read lock unlock ioctlが表示 |
w |
{}に、write append create setattr addname unlink link renameが表示 |
x |
{}にexecute execute_no_transが表示 |
s |
{}にsearch getattrが表示 |
上の ログの場合、sysadm_tというドメインに /var/www/html/index.htmlへの読み込み権を与えればよいということになります。SELinux Policy Editorではsysadm_tはsysadm_rロールがログインした時のユーザシェルのドメインなので、sysadm_rというロールに対して /var/www/html/index.htmlの読み込み権を与えます。
ネットワーク関係の操作が拒否された場合、様々なログが出力されます。SELinux Policy Editorでどんなパーミッションを許可すればよいか、表 5.2に 示します。
表 5.2許可すべきパーミッションとログの特徴(ネットワーク)
許可すべきパーミッション |
ログの特徴 |
ネットワークソケットの使用許可 |
netif=eth0、 tclass=tcp_socket(udp_socket) |
Rawソケットの使用許可 |
{net_raw} |
Wellknownポートの予 約/予約されていないWell-knownポート全ての利用を許可/他ドメインで予約されたポートの予約をする |
{ name_bind }、port=xxx、tclass=tcp_socket(udp_socket)というエントリがあった場合、xxx番のtcp/udpポートの使用 が拒否されています |
プロセス間通信関連の許可すべきパーミッションとログの特徴を表 5.3に 示します。
表 5.3許可すべきパーミッションとログの特徴(プロセス間通信)
許可すべきパーミッション |
ログの特徴 |
tcp/udp/unixソ ケット |
tclass=tcp_socket/udp_socket/unix_stream_socket scontext=ドメインA tcontext=ドメインB というエントリがあった場合、ドメインA にドメインBとの通信を許可する必要があります |
セマフォ/メッセージ/メッセージキュー/共有メモリ/パイプ |
tclass=sem/msg/msgq/shm/pipe scontext=ドメインA tcontext=ドメインB |
sigchld/sigkill/sigstop/ その他 |
{ sigchld }/{ sigkill }/{ sigstop }/{ signal } scontext=ドメインA tcontext=ドメインB |
始めに、端末名について述べます。
ドメイン/ロール特有の端末には、
普通の端末:(ドメイン・ロール名)_tty_device_t
擬似端末:(ドメイン・ロール名)_pts_device_t
という名前がつき、
ラベル付け前の端末:tty_device_t
ラベル付け前の擬似端末:devpts_t,ptmx_t
という名前がつきます。
端 末関連の許可すべきパーミッションとログの特徴を表 5.4に 示します。
表 5.4許可すべきパーミッションとログの特徴(端末)
許可すべきパーミッション |
ログの特徴 |
端末作成 |
この場合はログを見ただけではよく分かりません。 端末作成はロールと、sshd_login_t, rlogind_tでしか使いません。実際に設定をする場合は、新規ロール作成ぐらいです。 この設定が正しく行われているかどうかのチェックは、ログインした後 に、 ローカルログインの場合は ls –context /dev/tty(端末番号) とし、 リモートログインの場合は、 ls--context/dev/pts/ として、ロール・ドメイン特有の端末名がついていることを確認しま す。 |
読み込み/書き込み許可 |
{ read } {write} tcontext =端末名 が出た場合、tcontext に対応する端末のアクセス権を与える必要があります。 |
端末のラベル付け許可 |
これも滅多に設定することはありません。 tcontext =端末名 {relabelfrom relabelto}という ログが出たらこの設定が足りない可 能性があります。 |
表 5.5許可すべきパーミッションとログの特徴(管理権限)
許可すべきパーミッション |
ログの特徴 |
全ファイルのラベル付け 書き込み権限のあるファイルのラベル付け |
{ relabelfrom relabelto } 必要に応じて、左のどちらかのパーミッションを与えます。 |
chsidシステムコールの使 用 |
{ chsid } |
avc_toggleコマンド の使用 |
{ avc_toggle } |
load_policyコマン ドの使用 |
{ load_policy } |
arp,routeテーブルの 書き換え |
{ net_admin } |
ブート権限 |
{ sys_boot } |
モジュールをカーネルに読み込ませる権限 |
{ sys_module } |
ディスククォータをONにする 権限 |
{ quotaon } |
swapを有効にする権限 |
{ swapon } |
マウントに必要な権限 |
{ mounton } |
raw I/Oに必要な権限 |
{ sys_rawio } |
ptraceシステムコールの 使用 |
{ sys_ptrace } |
chrootシステムコールの 使用 |
{ sys_chroot } |
全ディレクトリのサーチ権限 |
- |
全ファイルの読み込み権限 |
- |
全ファイルの書き込み権限 |
- |
ラベル付け前ファイルの読み書き |
- |
ログ にpath=/xxx,dev=00:02と出力されるので、それを見ることで procファイルシステム関連のログであることが分かります。あとは、ファイル名に応じて、アクセス許可を与えてください。
ログにpath =/xxx,dev=00:07と出力されるので、それによりtmpfsファイルシステム関連のログであることが分かります。
tmpfsに は、以下のようなラベルがついたファイルが生成される。
ラベル付け前:tmpfs_t
ドメイン・ロールが生成した場合:<ドメイン・ロール名>_tmpfs_t:
tcontext にはこれらのラベル名が表示される。以下に許可すべきパーミッションとログの特徴を示します。
表 5.6許可すべきパーミッションとログの特徴(tmpfsファイルシステム)
許可すべきパーミッション |
ログの特徴 |
tmpfsに自分専用ファイル を作成可 |
{ write } tcontext=tmpfs_t |
読み込み/書き込み |
{ read }/{ write }が表示され、 tcontext に5.8.1で示したラベルが表示さ |