IT pass HikiWiki - [Memo2008][EPA]tako作業メモ(中本)(080321) Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

((<[Memo2008][EPA]tako作業メモ(納多, 中本)(080314)>)) からの続き.

= apache2 のインストール (2008/03/21(金))

== パスの設定

インストールされた Apache のバイナリファイル群と man へのパスを通す.

(システム用コマンドも一般ユーザ用コマンドと同じ場所にインストールさ
れているので, 一般ユーザ用コマンドだけ設定を行う.)

=== sh, bash のパスの設定

/etc/bash.bashrc の冒頭にある

# add PATH for local installed softwares
PATH="${PATH}:<一般ユーザ用コマンドのパス>"

の <一般ユーザ用コマンドパス> に /usr/local/apache2/bin を追加する.

=== csh, tcsh のパスの設定

/etc/csh.cshrc の冒頭にある

# add PATH for local installed softwares
set path = ($path /usr/local/bin /usr/bin /bin <一般ユーザ用コマンドのパス>)

の <一般ユーザ用コマンドのパス> に /usr/local/apache2/bin を追加する.

=== zsh のパスの設定

/etc/zsh/zshenv の末尾にある

# add PATH for local installed softwares
export PATH=<一般ユーザ用コマンドのパス>:$PATH

の <一般ユーザ用コマンドのパス> に /usr/local/apache2/bin を追加する.

=== man 関連のパスの設定

/etc/manpath.config の適切な場所に

MANDATORY_MANPATH                          /usr/local/apache2/man
MANPATH_MAP        /usr/local/apache2/bin  /usr/local/apache2/man
MANDB_MAP          /usr/local/apache2/man  /usr/local/apache2/man

の 3 行を追加する.

== 設定ファイルの編集

以下の 3 つの設定ファイルを編集する.

* httpd 用: /usr/local/apache2/conf/httpd.conf
* 各ユーザの public_html 以下の設定用: /usr/local/apache2/conf/extra/httpd-userdir.conf
* httpd-ssl 用: /usr/local/apache2/conf/extra/httpd-ssl.conf

=== /usr/local/apache2/conf/httpd.conf の編集

* HTTP デーモンを起動するユーザを www-data にする.

  65, 66 行目を
  
   User www-data
   Group www-data
  
  に変更する.

* サーバ管理者 (ServerAdmin) のメールアドレスを設定する.

  88 行目を
  
   ServerAdmin epaadmin_at_epa.scitec.kobe-u.ac.jp
  
  に変更する.

* サーバ名 (ServerName) を設定

  97 行目を
  
   ServerName epa.scitec.kobe-u.ac.jp:80
  
  に変更する.

* サーバのデフォルトルート (DefaultRoot) を /~epalab に設定

  104, 105 行目を
  
   #DocumentRoot "/usr/local/apache2/htdocs"
   DocumentRoot "/home/epalab/public_html"
  
  に変更する.

* ディレクトリのインデックスファイルに index.html 以外に index.htm, index.htm.en, index.html.en, index.htm.ja, index.html.ja も追加.

  119 行目を
  
   #    Deny from all
  
  に変更し, 132, 133 行目を
  
   #<Directory "/usr/local/apache2/htdocs">
   <Directory "/home/epalab/public_html">
  
  に変更し, 168 行目を
  
   DirectoryIndex index.html index.htm index.htm.en index.html.en index.htm.ja index.html.ja
  
  に変更する.

* エラーログファイルを /var/log/httpd-error.log に設定

  188 行目を
  
   ErrorLog "/var/log/httpd-error.log"
  
  に変更する.

* アクセスログファイルを /var/log/httpd-access.log に設定

  217 行目を
  
   #CustomLog "logs/access_log" common
  
  に変更し, 223 行目を
  
   CustomLog /var/log/httpd-access.log combined
  
  に変更する.

* CGI に関する設定を変更

  270 〜 273 行目を
  
   AllowOverride AuthConfig Limit
   Options ExcCGI FollowSymLinks IncludesNoExec
   # order allow,deny
   # Allow from all
  
  に変更する.

* extra/httpd-userdir.conf をロード

  384 行目を
  
   Include conf/extra/httpd-userdir.conf
  
  に変更する.

* extra/httpd-ssl.conf をロード

  402 行目を
  
   Include conf/extra/httpd-ssl.conf
  
  に変更する.

* /~gate, および /cgi-bin に対してのアクセスは HTTPS へ移動させる (参考資料 9, 10 参照).

  413 〜 432 行目に
  
   #
   # Settings for gate-toroku-system
   #
   <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteLog "/var/log/httpd-rewrite.log"
       RewriteLogLevel 0
  
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule ^/~gate/(.*)?$ https://%{HTTP_HOST}/~gate/$1 [L,R]
   </IfModule>
  
   <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteLog "/var/log/httpd-rewrite.log"
       RewriteLogLevel 0
  
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule ^/cgi-bin/(.*)?$ https://%{HTTP_HOST}/cgi-bin/$1 [L,R]
   </IfModule>
  
  を追加する.

* ~epalab/hiki と ~itpass/hiki に関しての設定を各ディレクトリごとの .htaccess で可能とする (AllowOverride)

  434 〜 443 行目に
  
   #
   # Settings for Hiki Area
   #
   <Directory /home/epalab/public_html/hiki >
       AllowOverride ALL
   </Directory>
  
   <Directory /home/itpass/public_html/hiki >
       AllowOverride ALL
   </Directory>
  
  を追加する.

* /hiki, /~epalab/hiki, /~itpass/hiki に対してのアクセスは HTTPS へ移動させる. その際, URI のエンコードは行わない. (参考資料 9, 10, 11 参照).

  445 〜 470 行目に
  
   <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteLog "/var/log/httpd-rewrite.log"
       RewriteLogLevel 0
  
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule ^/hiki/(.*)?$ https://%{HTTP_HOST}/hiki/$1 [L,R]
   </IfModule>
  
   <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteLog "/var/log/httpd-rewrite.log"
       RewriteLogLevel 0
  
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule ^/~epalab/hiki/(.*)?$ https://%{HTTP_HOST}/~epalab/hiki/$1 [L,R,NE]
   </IfModule>
  
   <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteLog "/var/log/httpd-rewrite.log"
       RewriteLogLevel 0
  
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule ^/~itpass/hiki/(.*)?$ https://%{HTTP_HOST}/~itpass/hiki/$1 [L,R,NE]
   </IfModule>
  
  を追加する.

=== /usr/local/apache2/conf/extra/httpd-userdir.conf の編集

* 所有者がマッチしなくてもシンボリックリンクの公開を許可する. (SymLinksIfOwnerMatch -> FollowSymLinks).

  18 行目を
  
   Options MultiViews Indexes FollowSymLinks IncludesNoExec
  
  に変更する.

=== /usr/local/apache2/conf/extra/httpd-ssl.conf の編集

* ドキュメントルート (DocumentRoot), サーバ名 (ServerName), サーバ管理者アドレス (ServerAdmin), エラーログ (ErrorLog), アクセスログ (TransferLog) を設定する.

  77 〜 81 行目を
  
   DocumentRoot "/home/epalab/public_html"
   ServerName epa.scitec.kobe-u.ac.jp:443
   ServerAdmin epaadmin_at_epa.scitec.kobe-u.ac.jp
   ErrorLog /var/log/httpd-ssl-error.log
   TransferLog /var/log/httpd-ssl-access.log
  
  に変更する.

== ログローテートの設定

=== /etc/logrotate.conf の編集

12 行目の

#compress



compress

に変更する.

=== /etc/logrotate.d/apache2 の作成

/etc/logrotate.d/ に apache2 というファイルを置き, 以下の内容を書き込む.

/var/log/httpd-access.log {
     missingok
     rotate 12
     postrotate
         /usr/bin/killall -HUP httpd 2> /dev/null || true
     endscript
}

/var/log/httpd-error.log {
     missingok
     rotate 12
     postrotate
         /usr/bin/killall -HUP httpd 2> /dev/null || true
     endscript
}

/var/log/httpd-ssl-access.log {
     missingok
     rotate 12
     postrotate
         /usr/bin/killall -HUP httpd 2> /dev/null || true
     endscript
}

/var/log/httpd-ssl-error.log {
     missingok
     rotate 12
     postrotate
         /usr/bin/killall -HUP httpd 2> /dev/null || true
     endscript
}

== SSL 用の証明書の作成

=== openssl の設定の変更

/etc/ssl/openssl.cnf の 172 行目を

nsCertType = server

に変更し, 241 行目を

nsCertType = sslCA, emailCA

に変更する.

=== 証明書の作成

まず, /usr/local/apache2/conf に移動する.

# cd /usr/local/apache2/conf

次に, 以下のコマンドで CA 用秘密鍵 (cakey.pem) と CA 用証明書 (cacert.pem) を作成する.

# /usr/lib/ssl/misc/CA.sh -newca

ここで, 次々に問われるので以下のように入力する.

CA certificate filename (or enter to create): 何も入力せずに enter
Enter PEM pass phrase: rere

Country Name (2 letter code) [AU]: JP
State or Province Name [Some-State]: Hyogo
Locality Name (eg, city) []: Kobe
Organization Name (eg, company) []: Kobe University
Organizational Unit Name (eg, section) []: EPA lab.
Common Name: epa.scitec.kobe-u.ac.jp
Email Address: epaadmin_at_epa.scitec.kobe-u.ac.jp
A challenge password: 何も入力せずに enter
A optional company name: 何も入力せずに enter

Enter pass phrase for ./demoCA/private/./cakey.pem: rere

この作業によって, 以下のようなディレクトリとファイルが作成される.

/usr/local/apache2/conf/
                     |
                     └ demoCA [ 各種証明書等のルートディレクトリ ]
                         |
                         ├ cacert.pem [ CA 用証明書 ]
                         ├ careq.pem
                         |
                         ├ certs [ 証明書等のディレクトリ (バックアップに利用) ]
                         |
                         ├ crl [ 破棄証明書一覧用のディレクトリ ]
                         |
                         ├ index.txt     [ クライアント証明書用 DB ]
                         ├ index.txt.attr
                         ├ index.txt.old
                         |
                         ├ newcerts [ クライアント証明書 (sireal 追番) のディレクトリ ]
                         |    |
                         |    ├ xxxxx..pem [ クライアント証明書 ]
                         |    |     :
                         |    └ xxxxx..pem [ クライアント証明書 ]
                         |
                         ├ private [ CA 用の秘密鍵用ディレクトリ ]
                         |   |
                         |   └ cakey.pem [ CA 用の秘密鍵 ]
                         |
                         ├ serial [ クライアント証明書用シリアル ]
                         └ serial.old

秘密鍵を他人に見られてはいけないので, パーミションを以下のように変更しておく.

# chmod 600 ./demoCA/private/cakey.pem
# chmod 700 ./demoCA/private

このようにして作成した鍵を Apache で使用すると, Apacheの起動時に毎回パスフレーズを聞かれる. 自動起動させるために, 以下のコマンドで鍵からパスフレーズを削除する. (もちろんセキュリティ上は毎回パスフレーズを入力する方が望ましい)

# openssl rsa -in ./demoCA/private/cakey.pem -out ./demoCA/private/cakey.pem
Enter pass phrase for ./demoCA/private/./cakey.pem: rere

次に, 以下のコマンドでサーバ証明書 (server.crt) を作成する.

# openssl x509 -in ./demoCA/cacert.pem -out ./demoCA/server.crt

次に, CA 証明書 (cacert.pem) をブラウザに登録するために, 以下のコマンドで DER フォーマットで記述された証明書 (ca.der) を作成する.

# openssl x509 -inform pem -in ./demoCA/cacert.pem -outform der -out ./demoCA/ca.der

これらの作業により, demoCA/ 以下に server.crt と ca.der が生成される. これらのファイルをカレントディレクトリである /usr/local/apache2/conf にコピーする.

# cp ./demoCA/server.crt .
# cp ./demoCA/ca.der .

次に, CA 用秘密鍵 (cakey.pem) をコピーしてサーバ用秘密鍵 (server.key) を作成する.

# cp ./demoCA/private/cakey.pem ./server.key

これにて完了.

== 動作チェック

apache は /usr/local/apache2/bin/apachectl で起動/停止する. 以下のコマンドで apache を起動する.

# /usr/local/apache2/bin/apachectl -k start

停止するには以下のようにすると良い.

# /usr/local/apache2/bin/apachectl -k graceful-stop

ちなみに, 現時点 (2008/03/27) では, /usr/local/apache2/conf/httpd.conf の DocumentRoot が /home/epalab/public_html となっているが, そんなディレクトリはまだ存在しないので, Apache の起動はできない.

そこで, /home/chikuwa2/public_html/index.html なるファイルを作り, /usr/local/apache2/conf/httpd.conf の中身を書き換えてやると, Apache が起動でき, ブラウザで

http://133.30.109.21 (tako の IP アドレス)

を開くとちゃんと見れた.

= apache2 のインストール (2008/03/28(金))

== 起動スクリプトを用意する

サーバの起動時に自動的に Apache を起動させるため, apache2 の起動スクリプト
を用意する.

まず, Debian の apache パッケージに含まれる /etc/init.d/apache を元に起動スクリプトを apache2 用に書き換えたファイル (apache2) を入手する.

# wget http://epa.scitec.kobe-u.ac.jp/~itpass/epa/apache/apache2

このファイルを /etc/init.d/apache2 にコピーし, 以下のようにパーミションを変更する.

# cp apache2 /etc/init.d/
# chown root:root /etc/init.d/apache2
# chmod 755 /etc/init.d/apache2

次に, ランレベルごとに apache2 の動作を設定する.

# update-rc.d apache2 defaults

そしてサーバを再起動し, 起動時に apache が起動することを確認する.

# shutdown -r now

ブラウザで

http://tako.epa.scitec.kobe-u.ac.jp

を開くとちゃんと見れた.