• English
  • Japanese

機器置き換えに伴うOS・ソフトウェア更新情報

  • 2014年7月9日より試験運用を開始しました。 2014年9月9日から本運用を開始しました。
  • データベースとの連携が可能です。
  • 今回の入れ換えによりOSは Ubuntu Server 14.04 LTS に更新しました。

サーバ仕様

主な変更点

項目 旧サーバ(2014年9月8日まで) 新サーバ(2014年9月9日から)
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.5
MySQL client 5.0.95 5.5.38

PHPの動作仕様の変更点

  • セキュリティの向上を目的としてPHPの動作方法を変更します。
    項目 旧サーバ(2014/09/08まで) 新サーバ(2014/09/09から)
    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
      

旧サーバで動作していたコンテンツが、新サーバで動作しない場合

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

本運用開始後に行う作業

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 のデータをコピーすることで新サーバで動作可能です。
  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 のデータをコピーすることで新サーバで動作可能です。
  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 対処方法

  • 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スクリプトファイルの保護モードがグループで書き込める (group writable)、またはその他で書き込める (other writable) 場合は suPHP の制限により動作しません。
  • さらにPHPスクリプトファイルが設置してあるディレクトリの保護モードがグループで書き込める (group writable)、またはその他で書き込める (other writable) 場合も suPHP の制限により動作しません。

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

  • 旧サーバのPHPスクリプトファイルで生成されたファイルやディレクトリの所有者はWebサーバ実行ユーザ(www)です。
  • このファイルの保護モードがその他で書き込める (other writable) 場合は、新サーバ上でもPHP実行ユーザの権限でファイルに書き込めます。
    その他で書き込めない保護モードの場合は新サーバ上で正しく動作しなくなります。
  • WordPress は新サーバ上でもこれらのファイルに対して書き込みが行えるため動作します。
  • PukiWiki は新サーバ上でにこれらのファイルに対して書き込み権限がないため正しく動作しません。
  • 新サーバ上でのこれらのファイルやディレクトリの所有者を本来の所有者への変更を希望する場合には、ITCにお問い合わせください。

最終更新日: 2014年10月15日

内容はここまでです。