Red Hat Linux 8.0 に SELinux をインストールする場合、標準で添付されているセキュリ ティポリシーやセキュリティコンテキストの設定内容だけでは問題が発生する。
本節では、問題となる事象を説明し、追加すべきセキュリティポリシーやセキュリティ コンテキストをまとめる。
3.2.3.1. rc スクリプトのセキュリティコンテキスト
SELinux 付属の rc スクリプトに関連したセキュリティコンテキスト設定は、ファイル file̲contexts/program/initrc.fc においてリスト 3‑27 のように定義されている。
リスト 3‑27 rc スクリプトのセキュリティコンテキスト
/etc/rc.d/rc system̲u:object̲r:initrc̲exec̲t /etc/rc.d/rc.sysinit system̲u:object̲r:initrc̲exec̲t /etc/rc.d/rc.local system̲u:object̲r:initrc̲exec̲t /etc/init.d/rc.* system̲u:object̲r:initrc̲exec̲t
しかし、Red Hat Linux では/etc/rc.d/init.d ディレクトリ下に rc スクリプトファイル の実体が配置され、/etc/rc.d/rc?.d ディレクトリ下にはそれら実体へのシンボリックリン クが配置されている。このため、リスト 3‑27 のファイルパス指定では、rc スクリプトに 設定されるべきセキュリティコンテキストである initrc̲exec̲t が設定されずに代りに etc̲t が設定されてしまう12。rc スクリプトは、この etc̲t が設定された状態であってもシ ステム起動時には正しく起動されるのだが、SELinux 独自コマンドの run̲init では enforcing モード時に etc̲t タイプの実行権限がないため、スクリプトを起動できない。
対策として、ファイル file̲contexts/program/initrc.fc にリスト 3‑28 に示すような設 定が必要である。
12 ファイル file̲contexts/types.fc において、ディレクトリ/etc 下のサブディレクトリとファイルには
Ⅱ‑30 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑28 rc スクリプト用の追加セキュリティコンテキスト
/etc/rc.d/(.*).d/.* system̲u:object̲r:initrc̲exec̲t
3.2.3.2. xinetd の rc スクリプト
xinetd の rc スクリプトにはリスト 3‑29 に示すようなコードが含まれている。ここでは、
コメントからも分かるように/etc/passwd ファイルに対して書き込み権限のチェックを行 い、root ユーザか否かのチェックを行っている。
リスト 3‑29 xinetd の rc スクリプトの一部
# Check that we can write to it... so non‑root users stop here [ ‑w /etc/passwd ] ││ exit 1
SELinux 環境下でこの部分が実行されるとリスト 3‑30 に示すようなエラーが発生する。
当然であるが enforcing モードで実行した場合 xinetd が起動されない。
リスト 3‑30 rc スクリプト実行時のエラー
avc: denied { write } for pid=15254 exe=/bin/bash path=/etc/passwd dev=09:00 ino=37046 scontext=system̲u:system̲r:initrc̲t tcontext=system̲u:object̲r:etc̲t tclass=file
この問題を解決するには/etc/passwd への書き込み権限を initrc̲t ドメインに許可す る必要があるが、その対象となるファイルの type は etc̲t である。 etc̲t は/etc ディ レクトリ下のほとんどのファイルに付与される type のため、この1行の処理のためだけに initrc̲t に権限を与えるのは危険であると判断する。解決策としては、/etc/passwd 以外 で initrc̲t ドメインに書き込み権限があり一般ユーザからは書き込み権限のないファイル に変更することである。リスト 3‑31 にその変更例を示す。
リスト 3‑31 rc スクリプトの変更例
# Check that we can write to it... so non‑root users stop here [ ‑w /var/log/messages ] ││ exit 1
3.2.3.3. crontab のセキュリティコンテキスト
Red Hat Linux でのユーザの crontab ファイルは/var/spool/cron ディレクトリ直下に作 成 さ れ る 。 し か し 、 SELinux 付 属 の セ キ ュ リ テ ィ コ ン テ キ ス ト 設 定 で は 、 フ ァ イ ル file̲contexts/program/crond.fc に お い て リ ス ト 3‑34 に 示 す よ う な フ ァ イ ル パ ス (crontabs ディレクトリ下に作成)になっているため、セキュリティコンテキストが正しく 設定されない。
リスト 3‑32 ユーザ crontab ファイルのセキュリティコンテキスト設定内容
/var/spool/cron system̲u:object̲r:cron̲spool̲t /var/spool/cron/crontabs system̲u:object̲r:cron̲spool̲t /var/spool/cron/crontabs/.* system̲u:object̲r:user̲cron̲spool̲t /var/spool/cron/crontabs/root system̲u:object̲r:sysadm̲cron̲spool̲t
解決方法は、ファイル file̲contexts/program/crond.fc に対してリスト 3‑33 に示すセ キュリティコンテキストの設定を追加することである。
リスト 3‑33 追加のセキュリティコンテキスト設定
/var/spool/cron/.* system̲u:object̲r:user̲cron̲spool̲t /var/spool/cron/root system̲u:object̲r:sysadm̲cron̲spool̲t
また、crontab 関連で問題になるのはシステムの crontab である /etc/crontab を編集 する場合である。エディタ(vi)で直接編集を行うとファイルのセキュリティコンテキスト が変更されてしまい、cron ジョブが起動されなくなる。ファイル編集後、リスト 3‑34 の ように chcon コマンドでセキュリティコンテストを元に戻さなければならない。
Ⅱ‑32 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑34 /etc/crontab のセキュリティコンテキスト
chcon system̲u:object̲r:system̲crond̲script̲t /etc/crontab
/etc/crontab だけに限らず、アプリケーションに固有な type が設定されているファイル の場合は、そのセキュリティコンテキストが変更されたことで不適切な type が設定された 状態になるとシステムに支障をきたす恐れがある。
この問題を回避するために、リスト 3‑35 に示すようなシェルスクリプトを用意しておく と便利である。①、②で対象ファイルのセキュリティコンテキストをセーブする。③で vi コマンドを起動してファイルを編集する。vi が終了すると、④で chcon コマンドを使用し、
セーブしておいたセキュリティコンテキストを設定する。同時に1つのファイルしか編集 できないが有用である。
リスト 3‑35 コンテキストを元に戻すシェルスクリプト
#!/bin/sh if [ $# != 1 ] then
echo Usage : $0 file exit 1
fi FILE=$1
if [ ! ‑w ${FILE} ] then
echo No write permission exit 1
fi
① set ‑‑ ̀/usr/local/selinux/bin/ls ‑‑context $1̀
② SID=$4
③ vi $FILE
④ chcon $SID $FILE
3.2.3.4. コンソールでの make relabel の注意点
コンソールからセキュリティコンテキストの再設定 make relabel を実行すると、tty デバイス(/dev/tty?)のセキュリティコンテキストがリセットされ、種々のコマンドでメッ セージの出力が表示されなくなる。このような状態になった場合は、ログアウトし再度ロ グインすればよい。
3.2.3.5. ntp.conf
NTP の時間誤差値を格納するファイル(/etc/ntp.conf の driftfile パラメタ)のデフォル トは/etc/ntp/drift となっている。また、このファイルには書き込み権限も必要である。
SELinux に 標 準 で 提 供 さ れ て い る NTP 関 連 の セ キ ュ リ テ ィ コ ン テ キ ス ト フ ァ イ ル (file̲contexts/program/ntp.fc)は、リスト 3‑36 のようになっており、var̲lib̲ntp̲t に 対して書き込み権限を許可している。
リスト 3‑36 ntp のセキュリティコンテキスト設定の一部
/var/lib/ntp(/.*)? system̲u:object̲r:var̲lib̲ntp̲t
リスト 3‑36 のファイルパスを /etc/ntp(/.*)? に変更する方法もあるが、一般的に/etc 下のファイルに書き込み権限を与えるような設定は望ましくない。対策としては、
/etc/ntp.conf の設定をリスト 3‑37 のように変えるべきであろう。
リスト 3‑37 /etc/ntp.conf の設定例
# ntp.conf
server www.xxx.yyy.zzz
driftfile /var/lib/ntp/drift