• Japanese

CNS個人ホームページ用Webサーバ 試験運用環境の情報

2014年9月9日に試験運用Webサーバは本運用Webサーバに置き換えを行いました。

サーバ仕様

主な変更点

項目 現サーバ 新サーバ
OS Debian Squeeze Ubuntu 14.04 LTS
HTTPサーバ Apache httpd 2.2.26 Apache httpd 2.4.7
PHP 5.2.17 5.5.9 + suPHP
Perl 5.10.1 5.18.2
Ruby 1.8.7 1.9.3p484
Python 2.6.6 2.7.6
gcc 4.4.5 4.8.2
libc6 2.11.3 2.19
PostgreSQL client 8.3.17 9.3.4
MySQL client 5.0.95 5.5.37

PHPの動作仕様の変更点

  • セキュリティの向上を目的としてPHPの動作方法を変更します。
    項目 現サーバ 新サーバ
    PHPバージョン 5.2系 5.5系
    PHP動作モード Apacheモジュール CGI + suPHP
    PHPの実行ユーザ Webサーバの実行ユーザ(www) PHPスクリプトのファイルオーナー
    PHPスクリプトのファイルオーナー確認 なし 自分自身がオーナーである必要あり
    PHPスクリプトの保護モード確認 なし group および other に書き込み権限がないこと
    PHPスクリプトがあるディレクトリの保護モード確認 なし group および other に書き込み権限がないこと
    セーフモード On ---
  • 特記事項
    • セーフモード は PHP 5.4 以降で機能が削除されており、新サーバでは設定していません。 ご自身のホームディレクトリ以外へのアクセスについては PHP の open_basedir で制限しています。アクセスを許可しているディレクトリは下記の通りです。
      /usr/bin, /usr/local/bin, /tmp
      

試験運用Webサーバでの動作確認について

  • PukiWiki, WordPress、PHPスクリプト の場合、新サーバで新規投稿、編集、または画像等をアップロードするとご自身の権限によりファイルが作成されてしまうため、現行サーバでその投稿や画像等を更新したり削除できなくなりますのでご注意ください。
  • 今お使いのWebコンテンツが本運用開始後にもそのまま表示できることを試験運用Webサーバにアクセスしてご確認ください。
  • 試験運用Webサーバ用に設定を変更して動作確認が終わりましたら本運用切替に備えて元の状態に戻してください。

試験運用サーバ (本運用サーバ) の動作確認状況

  • 下記に該当する場合、試験運用サーバ (本運用サーバ) で正しく動作しないことが分かっています。
    • PukiWiki を使っている
    • WordPress を使っていて WordPress を設置しているディレクトリの保護モードがグループで書き込める (group writable)、またはその他で書き込める (other writable) 状態になっている
    • PHP スクリプトファイルやその設置ディレクトリの保護モードがグループで書き込める (group writable)、またはその他で書き込める (other writable) 状態になっている
  • これらの対処方法は後述の 本運用開始後に行う作業 をご覧ください。

WordPress の動作確認時の注意点(現行サーバへのリダイレクトについて)

  • 新サーバで新規投稿、または画像等をアップロードするとご自身の権限によりファイルが作成されてしまうため、現行サーバでその投稿や画像等を更新したり削除できなくなりますのでご注意ください。
  • 新サーバで WordPress のコンテンツにアクセスすると現行サーバにリダイレクトされます。
    このため、新サーバで WordPress の動作を確認できないことがあります。
  • WordPress では設定情報に公開する URL が設定されています。
  • 新サーバで WordPress の動作確認を行いたいときは後述の手順を行うことで参照できるようになります。
  1. WordPress 管理画面に設定を変更できる権限を持ったユーザでログインします。
  2. [設定] - [一般設定] を開きます。
  3. "WordPress アドレス (URL)" と "サイトアドレス (URL)" の内容を試験運用サーバの情報に書き換えます。
    例)
    http://web.sfc.keio.ac.jp/~z00001tz/wp/  => http://web.sfc.keio.ac.jp:10080/~z00001tz/wp/
    
  4. 変更を保存します。
  5. WordPress コンテンツページに Web アクセスして新サーバにリダイレクトされていることを確認してください。
  6. 元に戻すには同じ手順により元の状態に戻してください。
  7. 以上

本運用開始後に行う作業

Pukiwiki 不具合対処方法

  • 新サーバは PHP 5.5 系です。
  • PukiWiki ( http://pukiwiki.sourceforge.jp/ ) や PukiWiki Plus! ( http://pukiwiki.cafelounge.net/plus/ ) の Wiki は開発が停止しているため PHP 5.5 系に対応していません。
  • このため、新サーバでは「真っ白な画面になる」、または「正しく表示されない」という事象を確認しています。
  • PukiWiki のバージョン別に対処方法を後述にまとめていますので参考にしてください。

PukiWiki のバージョンの調べ方

  1. webedit.sfc.keio.ac.jp にリモートログインします。
  2. ~/public_html/wiki_dir/lib/init.php にある S_VERSION の行を調べます。
    (例では PukiWiki 設置ディレクトリを wiki_dir とします。)
    % cd
    % grep S_VERSION ~/public_html/wiki_dir/lib/init.php
    define('S_VERSION', '1.4.6')
    %
    
  3. 表示されている数字がバージョンを示しています。この例ではバージョン 1.4.6 ということが分かります。

PukiWiki 1.4.7 利用者向け対処方法

対処方法1) ソースコード修正
  • 試験運用期間中にソースコードを修正すると現行サーバで正常に動作しなくなりますので注意してください。
  • この方法は 1.4.7 限定です。
  • 1.4.7 未満の場合はソースコードの内容が異なるため、この対処方法は行えません。後述の PukiWiki 1.4.7 未満 利用者向け対処方法 をご覧ください。
  • 作業前に PukiWiki 1.4.7 ディレクトリをそのまま別の名前でコピーしてバックアップすることをお勧めします。
    または別の名前にコピーしたディレクトリに対して下記の対処を行うことで現行サーバと新サーバそれぞれで動作させることができます。
  1. webedit.sfc.keio.ac.jp にリモートログインします。
  2. PukiWiki 1.4.7 ディレクトリ内に移動します。
    (例では pukiwiki147 とします。)
    % cd public_html/pukiwiki147
    
  3. htmlspecialchars 関数を htmlsc 関数にすべて変換します。
    % grep -lr --include="*.php" htmlspecialchars ./ |xargs sed -e "s/htmlspecialchars/htmlsc/g" -i
    %
    
  4. lib/func.php を編集します。
    % cp -ip lib/func.php{,.ORG}
    % vi lib/func.php
    % diff -u lib/func.php.ORG lib/func.php
    --- lib/func.php.ORG    2014-06-19 10:15:48.677020000 +0900
    +++ lib/func.php 2014-06-19 10:18:49.946957000 +0900
    @@ -308,6 +308,7 @@
    }
    // Inversion of bin2hex()
    +if (! function_exists('hex2bin')) {
    function hex2bin($hex_string)
    {
    // preg_match : Avoid warning : pack(): Type H: illegal hex digit ...
    @@ -315,6 +316,12 @@
    return preg_match('/^[0-9a-f]+$/i', $hex_string) ?
    pack('H*', (string)$hex_string) : $hex_string;
    }
    +}
    +
    +function htmlsc($string = '', $flags = ENT_COMPAT, $charset = CONTENT_CHARSET)
    +{
    +    return htmlspecialchars($string, $flags, $charset); // htmlsc()
    +}
    // Remove [[ ]] (brackets)
    function strip_bracket($str)
    
  5. 以上
対処方法2) パッチ適用
  • 試験運用期間中にパッチを適用すると現行サーバで正常に動作しなくなりますので注意してください。
  • 作業前に PukiWiki 1.4.7 ディレクトリを別の名前でコピーしてバックアップすることをお勧めします。
    または別の名前にコピーしたディレクトリに対して下記の対処を行うことで現行サーバと新サーバそれぞれで動作させることができます。
  1. webedit.sfc.keio.ac.jp にリモートログインします。
  2. まず PukiWiki 1.4.7 ディレクトリ内に移動します。
    (例では pukiwiki147 とします。)
    % cd ~/public_html/pukiwiki147
    
  3. http://sourceforge.jp/users/umorigu/pf/pukiwiki15/files/ に添付されているパッチファイル 4個をダウンロードして PukiWiki 1.4.7 ディレクトリ内に保存します。
    pw15.1.hex2bin.patch
    pw15.2.htmlsc.patch
    pw15.3.passbyrefcall.patch
    pw15.4.r15.patch
    
  4. パッチを適用します。
    % patch -b -p1 < ./pw15.1.hex2bin.patch
    patching file lib/auth.php
    patching file lib/func.php
    
    % patch -b -p1 < ./pw15.2.htmlsc.patch
    patching file lib/auth.php
    patching file lib/backup.php
    patching file lib/convert_html.php
    ...
    (省略)
    ...
    patching file plugin/vote.inc.php
    patching file plugin/yetlist.inc.php
    patching file skin/tdiary.skin.php
    
    % patch -b -p1 < ./pw15.3.passbyrefcall.patch
    patching file lib/func.php
    patching file plugin/ls2.inc.php
    patching file plugin/online.inc.php
    patching file plugin/pcomment.inc.php
    
    % patch -b -p1 < ./pw15.4.r15.patch
    patching file INSTALL.txt
    can't find file to patch at input line 18
    Perhaps you used the wrong -p or --strip option?
    The text leading up to this was:
    --------------------------
    |diff --git a/README.en.txt b/README.en.txt
    |index 2781935..d99e705 100644
    |--- a/README.en.txt
    |+++ b/README.en.txt
    --------------------------
    File to patch:                <= README.en.txt が存在しないので Enter を押します
    Skip this patch? [y] y        <= y を入力して Enter を押します
    Skipping patch.
    1 out of 1 hunk ignored
    patching file README.txt
    patching file lib/init.php
    
  5. 以上
対処方法3) PukiWiki 1.5.0 (PHP 5.4対応版ソースコード) へのデータ移行
  • PukiWiki 1.5.0 (PHP 5.4対応版ソースコード) を新規設置して、今まで使っていた PukiWiki のデータをコピーすることで新サーバで動作可能です。
  • 移行元の PukiWiki は現行サーバで引き続き動作可能です。移行先は新サーバで動作可能です。
  1. PukiWiki 1.5.0 (PHP 5.4対応版ソースコード) を参考に設置します。
  2. 以下の例では今まで使っていた PukiWiki のディレクトリを wiki_current とし、新しく設置した PukiWiki 1.5.0 (PHP 5.4対応版ソースコード) を pukiwiki15 とします。
  3. wiki_current ディレクトリの中にある下記のディレクトリを pukiwiki15 ディレクトリの中にそのままコピーします。
    attach backup cache counter diff trackback wiki
    
  4. webedit.sfc.keio.ac.jp にリモートログインします。
  5. 下記コマンドを実行することで前述のディレクトリを一括してコピーできます。
    % foreach i (attach backup cache counter diff trackback wiki)
    foreach? cp -p wiki_current/$i/* pukiwiki15/$i/
    foreach? end
    
  6. 以上

PukiWiki 1.4.7 未満 利用者向け対処方法

  • 1.4.7 未満をご利用の方は PukiWiki 1.5.0 (PHP 5.4対応版ソースコード) を新規設置して、今まで使っていた PukiWiki のデータをコピーすることで新サーバで動作可能です。
  • 移行元の PukiWiki は現行サーバで引き続き動作可能です。移行先は新サーバで動作可能です。
  1. PukiWiki 1.5.0 (PHP 5.4対応版ソースコード) を参考に設置します。
  2. 以下の例では今まで使っていた PukiWiki のディレクトリを wiki_current とし、新しく設置した PukiWiki 1.5.0 (PHP 5.4対応版ソースコード) を pukiwiki15 とします。
  3. wiki_current ディレクトリの中にある下記のディレクトリを pukiwiki15 ディレクトリの中にそのままコピーします。
    attach backup cache counter diff trackback wiki
    
  4. 下記コマンドを実行することで一括してコピーできます。
    % foreach i (attach backup cache counter diff trackback wiki)
    foreach? cp -p wiki_current/$i/* pukiwiki15/$i/
    foreach? end
    
  5. 以上

WordPress Internal Server Error 対処方法

  • 試験運用期間中に下記通りに保護モードの変更を行っても現行サーバでの動作には影響ありません。ただし、保護モードを 755 以外にした場合は動作しない恐れがありますのでご注意ください。
  • WordPress を設置しているディレクトリの保護モードがグループで書き込める (group writable)、またはその他で書き込める (other writable) 場合は suPHP の制限により動作しません。
  • WordPress を設置しているディレクトリの保護モードを後述の手順に従って変更してください。
  1. webedit.sfc.keio.ac.jp にリモートログインします。
  2. 以下の例では /home/z00001tk/public_html/wordpress ディレクトリに WordPress を設置しています。
    このディレクトリの保護モードを 755 に変更します。
    % cd ~/public_html
    % chmod 755 wordpress
    % ls -ld wordpress
    drwxr-xr-x  12 z00001tk student        4096 Jul 1 00:01 wordpress
    
  3. 以上

PHP Internal Server Error 対処方法

  • 試験運用期間中に保護モードを変更すると現行サーバで正常に動作しないことがありますので注意してください。
  • PHPスクリプトファイルの保護モードがグループで書き込める (group writable)、またはその他で書き込める (other writable) 場合は suPHP の制限により動作しません。
  • さらにPHPスクリプトファイルが設置してあるディレクトリの保護モードがグループで書き込める (group writable)、またはその他で書き込める (other writable) 場合も suPHP の制限により動作しません。

Webサーバ実行ユーザ(www)が所有者となっているファイル/ディレクトリの扱い

  • 現行サーバのPHPスクリプトファイルで生成されたファイルやディレクトリの所有者はWebサーバ実行ユーザ(www)です。
  • このファイルの保護モードがその他で書き込める (other writable) 場合は本運用切替後もPHP実行ユーザの権限でファイルに書き込めます。
    その他で書き込めない保護モードの場合は本運用切替後に正しく動作しなくなります。
  • WordPress は本運用切替後もこれらのファイルに対して書き込みが行えるため動作します。
  • PukiWiki は本運用切替後にこれらのファイルに対して書き込み権限がないため正しく動作しません。
  • 本運用開始後にこのファイルやディレクトリの所有者を本来の所有者に変更する作業をITCで行います。
  • ITCから対象者の方にご連絡しますのでその案内をご覧ください。

試験運用Webサーバ更新履歴

日時 内容
2014年07月11日 chasen,mecab,cabocha,emacs,JDK7,a2ps,bison,cvs,expect,gdb,jless,lynx,quota,zsh を導入しました。
2014年07月09日 新Webサーバと同等のWebページ編集/動作確認用サーバ(webedit2)の試験運用を開始
2014年07月01日 試験運用を開始

最終更新日: 2014年9月30日

内容はここまでです。