• 検索結果がありません。

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    

 

 

Ⅱ‑34  Copyright © 2003 IPA, All Rights Reserved.