3. 構築
3.5. セキュリティポリシーの定義
3.5.1. Web サーバー
Apache については、2002 年 12 月において、http://www.apache.org から入手が可能な 1.3 系と 2.0 系の Apache 1.3.27 と Apache 2.0.43 があり、ここでは、Apache 1.3.27 につ いての実装と検証を行った。
(1) インストール
ここでは、通常の Solaris におけるインストレーションと同様の手順によるインス トールを行う。
最初に必要なパッケージの追加やソースの展開を行う(リスト 3‑38)。この作業は admin 役割に移行し役割のワークスペースにて行うことが可能である。このときデフォ ルトのラベルは[ADMIN̲LOW]となる。
リスト 3‑38 パッケージの追加(admin 役割)
$ cd /usr/local
$ gzcat apache̲1.3.27.tar.gz │ tar xvf ‑
次の作業は primaryadmin 役割に移行し、特権シェル環境において実行する。
ここでは、httpd の実行ユーザ www およびグループ www を作成する(リスト 3‑39)。
なお、簡易に構築するため作業を特権シェル環境により行うが、ユーザとグループの 追加は admin 役割にて SMC を利用することでも可能である。
Ⅰ‑114 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑39 ユーザとグループの追加(primaryadmin 役割)
# groupadd ‑g 80 www
# useradd ‑u 80 ‑g www ‑d / ‑s /bin/false www 次の作業も引き続き特権シェル環境にて行う。
ここでは、Apache 1.3.27 のコンパイルとインストールを行う(リスト 3‑40)。
なお、suEXEC を利用するため suexec 関連のオプションを有効にする。
リスト 3‑40 コンパイルおよびインストール(primaryadmin 役割)
# PATH=/usr/sbin:/usr/bin:/usr/ccs/bin:/usr/local/bin
# export PATH
# cd /usr/local/apache̲1.3.27
# ./configure ‑‑enable‑suexec ‑‑suexec‑caller=www ‑‑suexec‑uidmin=80
‑‑suexec‑gidmin=80 ‑‑suexec‑docroot=/export
# make
# make install
次に Apache の基本設定を行う。この作業は admin 役割により行う。
ここでは、コンテンツと CGI スクリプトを置くディレクトリを作成する。また、
webadmin 役割による編集が可能となるように、ディレクトリの所有者を webadmin に 変更する(リスト 3‑41)。
リスト 3‑41 コンテンツディレクトリの作成(admin 役割)
$ mkdir /export/contents /export/cgi‑bin
$ chown webadmin /export/contents /export/cgi‑bin
ここでは、httpd.conf の編集を行う。admin 役割による編集が可能となるように、
所有者を admin に変更する(リスト 3‑42)。
なお、Apache の標準機能であるバーチャルホストを有効にする。理由は、suEXEC は httpd.conf における<Virtual>で設定されたディレクトリ以下とユーザのディレク トリ以下で有効になるため、利用するドメインは一つだがバーチャルホストとして動 作させるためである。
Ⅰ‑115 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑42 httpd.conf の編集(admin 役割)
$ cd /usr/local/apache/conf
$ cp ‑p httpd.conf httpd.conf.org
$ chown admin httpd.conf
リスト 3‑43 httpd.conf:基本部分 PidFile /var/run/httpd.pid
User www
Group www
ServerAdmin [email protected] ServerName gpan.tscorp.com DocumentRoot "/export/contents"
... (省略) ...
<Directory "/export/contents">
... (省略) ...
<Directory "/export/cgi‑bin">
... (省略) ...
ScriptAlias /cgi‑bin/ "/export/cgi‑bin/"
リスト 3‑44 httpd.conf:追加部分 NameVirtualHost 192.168.0.103
<VirtualHost gpan>
ServerName gpan.tscprp.com
User webadmin
Group sysadmin
DocumentROot /export/contents
ScriptAlias /cgi‑bin/ "/export/cgi‑bin/"
</VirtualHost>
最後に Apache の起動スクリプトの編集を行う。この作業も引き続き admin 役割によ り行う。
標準でインストールされている Apache 1.3.12 の起動スクリプトを用いることとし、
これを編集する。admin 役割による編集が可能となるように、所有者を admin に変更 する(リスト 3‑45)。
インタープリターをシステムシェル(sysh)に変更し、以降のセキュリティ属性定 義において設定する webservice プロファイルがサービス起動時に有効となるように、
setprof コマンドによる定義を追加する。また、Apache の起動用の環境変数を編集す る。
Ⅰ‑116 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑45 apache スクリプトの編集(admin 役割)
$ cd /etc/init.d
$ cp ‑p apache apache.org
$ chown admin apache
リスト 3‑46 apache スクリプト:インタープリター
#!/sbin/sysh setprof webservice
リスト 3‑47 apache スクリプト:環境変数 APACHE̲HOME=/usr/local/apache
CONF̲FILE=/usr/local/apache/conf/httpd.conf
(2) ファイル
通常の Solaris 8 において適用されるセキュリティ属性、つまりファイルパーミッ ション、所有者、所属グループについては、特別な理由がない限り変更する必要はな い。
Ⅰ‑117 Copyright © 2003 IPA, All Rights Reserved.
表 3‑53 ファイル
# ファイル名 パーミッション owner group
1 /usr/local/apache/conf/*
2 /usr/local/apache/logs/*
3 /usr/local/apache/htdocs/*
4 /usr/local/apache/icons/*
5 /usr/local/apache/cgi‑bin/*
6 /usr/local/apache/include/*
7 /usr/local/apache/libexec/*
8 /usr/local/apache/man/*
9 /usr/local/apache/proxy/*
10 /usr/local/apache/bin/ab ‑rwxr‑xr‑x root root 11 /usr/local/apache/bin/apachectl ‑rwxr‑xr‑x root root 12 /usr/local/apache/bin/apxs ‑rwxr‑xr‑x root root 13 /usr/local/apache/bin/checkgid ‑rwxr‑xr‑x root root 14 /usr/local/apache/bin/dbmmanage ‑rwxr‑xr‑x root root 15 /usr/local/apache/bin/htdigest ‑rwxr‑xr‑x root root 16 /usr/local/apache/bin/htpasswd ‑rwxr‑xr‑x root root 17 /usr/local/apache/bin/httpd ‑rwxr‑xr‑x root root 18 /usr/local/apache/bin/logresolve ‑rwxr‑xr‑x root root 19 /usr/local/apache/bin/rotatelogs ‑rwxr‑xr‑x root root 20 /usr/local/apache/bin/suexec ‑rws‑‑x‑‑x root root
(3) セキュリティポリシーの定義と設定(基本的ラベル構成のネットワーク)
最初に、基本的ラベル構成のネットワークを想定した、基本的なセキュリティポリ シーの定義と設定を行う。
この構成では、外部および内部のネットワークともに単一のラベルでのサービスに 対するアクセスが許可される。この場合、サービスに与える特権を少なくする最良の 方法は、サービスを形成する全てのプロセスが同一のラベルで動作するようにするこ とである。
この作業は secadmin 役割に移行し役割のワークスペースにて行うことが可能であ る。このときデフォルトのラベルは[ADMIN̲LOW]となる。
Ⅰ‑118 Copyright © 2003 IPA, All Rights Reserved.
ADMIN_LOW PUBLIC ADMIN_HIGH
services
Log,conf contents
suexec httpd
全ての ネットワークアクセス
に対する許可範囲
図 3‑27 シンプルな場合のイメージ図
httpd プロセスの SL は[PUBLIC SERVICES]とし、CGI プロセスの SL も[PUBLIC SERVICES]とする。CGI の実行環境として Apache の suEXEC を利用する。
ネットワークからのアクセスは全てが[PUBLIC SERVICE]とラベル付けされる。
コンテンツファイルおよびスクリプトファイルの SL は[ADMIN̲LOW]とし、ネッ トワークアクセスに関連するプロセス(httpd および派生するプロセス)から 読み込みのみが許可される。
(A) ファイル属性定義
次のサービス提供に関わるファイル属性をそれぞれのファイルに適用する。なお、
設定の手順については 3.4.4.1(1)(A)に記載している。
表 3‑54 ファイル属性
# ファイル名 ラベル 強制特権 許容特権
1 /usr/local/apache/bin/httpd ADMIN̲LOW file̲dac̲write file̲mac̲write
all
Ⅰ‑119 Copyright © 2003 IPA, All Rights Reserved.
Note:
標準のインストレーションでは、httpd に対して file̲dac̲write 特権および file̲mac̲write 特権ともに必要となるが、これは httpd がログの出力に必要としている特権である。よって、
ログディレクトリの所有者を変更することにより、file̲dac̲write 特権は不要となる。また、
ログディレクトリのラベルを変更することにより、file̲mac̲write 特権は不要となる。
secadmin 役割にて以下の設定を行うことで特権を扶養とすることが可能である。
$ chown www /usr/local/apache/logs
$ setlabel “public services” /usr/local/apache/logs
(B) プロセス属性定義
次のサービス提供に関わる実行属性をサービス用の webservice プロファイルに 追加する。なお、設定の手順については 3.4.3.4(2)(A)に記載している。
表 3‑55 プロセス属性
# コマンド User Group Label Clearance 特権
1 /usr/local/apache/
bin/apachectl
www www PUBLIC services
PUBLIC services
net̲privaddr
(C) ネットワーク属性定義
次のネットワークに関わるセキュリティ属性を適用する。なお、設定手順につい てはそれぞれに、3.4.7.1(2)(A)、3.4.7.2(2)(A)、3.4.7.3(2)(A)に記載している。
表 3‑56 インターフェース属性
# Interface Mini Label Max Label Label Clearance 1 hme0 PUBLIC PRIVATE
services
PUBLIC services
PUBLIC services 表 3‑57 テンプレート属性
# Template Mini Label Max Label Label Clearance 1 public̲services PUBLIC
services
PUBLIC services
PUBLIC services
PUBLIC services 表 3‑58 ネットワーク属性
# Host/Wildcard Hostname IP Address Prefix Length Template 1 Wildcard N/A 0.0.0.0 N/A public̲services
Ⅰ‑120 Copyright © 2003 IPA, All Rights Reserved.