IT pass HikiWiki - [Memo2012][ITPASS]Hikiのページ毎の基本設定 Diff

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

{{toc}}

[((<ITPASSサーバ構築・運用ドキュメント>)) へ戻る]

12/10/16 に Hiki のページ毎の基本設定を柏本が行った.



= Hikiのページ毎の基本設定

== 実行ユーザー

このページでは, ユーザは itpass だと仮定しての作業を書いている.

itpass に成り代わって作業するためには, 以下のコマンドを実行すればよい.

  $ sudo -s -u itpass

ただし, サーバ構築作業の手順を変更したことにより itpass アカウントが存在しなかったため, ika から passwd, shadow, group ファイルの itpass の行をコピーして tako に追加した.

= Hiki用ディレクトリの作成


まず, /home/itpass/ の所有者が root となっていたため, 以下のコマンドを実行した.

  # chown -R itpass:itpass itpass

Hiki 用のディレクトリを作成した.

  $ cd /home/itpass
  $ mkdir hiki
  $ chmod 2775 hiki


== hikisetup による初期設定

hikisetup コマンドを用いて, 必要なファイルを /home/itpass/hiki 以下にインストールした. データパスはデフォルト
のものを選んだ.

  $ cd /home/itpass/hiki
  $ hikisetup --lang ja

  INFO: hiki basedir is /home/itpass/hiki
  Please input data_path [/home/itpass/hiki/data]:

すると, 以下のようなファイル群が作成された.

  $ tree -a
  .
  ├── .htaccess
  ├── data
  │     └── text
  │            ├── FrontPage
  │            ├── InterWikiName
  │            ├── SideMenu
  │            └── TextFormattingRules
  ├── hiki.cgi
  ├── hikiconf.rb
  └── theme
         ├── hiki
         │     ├── README
         │     └── hiki.css
         └── hiki_base.css


= ディレクトリ構成の変更とパーミッション設定

大まかには次の三点を行った.

* ディレクトリ構成を以下のようにする.

    /home/itpass/hiki/cgi/      cgi 本体や設定ファイル, テーマを格納
                      data/     hiki のデータ (展開される場所)
                      cvsroot/  hiki のデータのリポジトリ

* パーミッション, 所有者, 所有グループを以下のようにする.

     /home/itpass/hiki/       rwxrwsr-x itpass   itpass
                  cgi/       rwxrwsr-x itpass   itpass
                  data/       rwxrwsr-x www-data www-data
                  cvsroot/    rwxrwsr-x www-data www-data

*  公開に際して, /home/itpass/public_html/hiki から /home/itpass/hiki/cgi にシンボリックリンクをはる.
   * Web からは https://133.30.109.21/~itpass/hiki へアクセスすることで Hiki ページを見ることが出来るようになる.


具体的な作業例を以下に述べる. ただし, cvsroot に関しては別途 cvs コマンド
から作成するため, 下記の ((<#cvsroot の作成|URL:#cvsroot の作成>)) を参照のこと.


== hikisetup で作成されたファイルの移動

  $ cd /home/itpass/hiki
  $ mkdir cgi

  $ mv .htaccess hiki.cgi hikiconf.rb theme cgi/

  $ chmod -R g+w cgi
  $ chmod 2775 `find cgi/ -type d`


== data ディレクトリのパーミッション設定

www-data に書き込み/読み込み権限を渡した.

  $ sudo chown -R www-data:www-data data
  $ sudo chmod -R g+w data
  $ sudo chmod 2775 `find data/ -type d`

ただし, 現時点で itpass の root としてコマンドを実行することができないため, tako に戻り作業を行った. 以下にも, sudo を用いた作業がいくつかあるが, それらは全て tako に戻り作業を行っている.

== public_html 以下からのシンボリックリンクの作成

  $ cd /home/itpass/public_html
  $ ln -s ../hiki/cgi hiki


= CVS 管理の準備

== CVS のインストール

Hiki のデータを CVS で管理する.
そのために, CVS をシステムにインストールした. Debian の場合には cvs パッケージをインストールすればよい.

  # apt-get install cvs

リポジトリの場所を問われた場合は作成しないと答える (後で別途作成するため).
今回は問われなかった.

== cvsroot の作成

CVS データを管理するための CVS レポジトリの作成を行った.

  $ sudo cvs -d /home/itpass/hiki/cvsroot init

作成後, cvsroot ディレクトリに関しても権限を www-data に渡した.

  $ cd /home/itpass/hiki
  $ sudo chown -R www-data:www-data cvsroot
  $ sudo chmod 2775 `find cvsroot/ -type d`

cvsroot の中にあるファイルに関してはグループ書き込み権限は不要である.
(ディレクトリに対しては, 上記のようにグループ書き込み権限が必要である).


= ファイルへのアクセス制御の設定

/usr/local/apache2/conf/httpd.conf の末尾に

<Directory "/home/itpass/public_html/hiki">
      AllowOverride FileInfo AuthConfig Limit Indexes Options=ExecCGI,FollowSymlinks
</Directory>

という記述があるかどうか確認したが, 末尾以外に

<Directory "/home/itpass/public_html/hiki">
AllowOverride ALL
Options -MultiViews
</Directory>

という記述があったため, 上記のように書き直した.


= CGI の基本動作のチェック

Apache を再起動 (((<[ITPASS2011a]apache2のインストールと設定#動作チェック>)) を参照)して

  https://133.30.109.21/~itpass/hiki

へアクセスし, Hiki のトップページが見えることを確認した.

なお, この初回アクセス時に /home/itpass/hiki/data/
以下に, cache, info.db, text 等のファイルが自動的に
作成されるはずである. これらに関するパーミッションも再度設定した.

  $ cd /home/itpass/hiki
  $ sudo chown -R www-data:www-data data
  $ sudo chmod -R g+w data
  $ sudo chmod 2775 `find data/ -type d`


= RD 形式で記述するための作業

/home/itpass/hiki/cgi/hikiconf.rb の末尾に

  # RD 形式で記述するための設定
  #   header_depth では '=' を <h2> にするよう設定
  @style = 'rd+'
  @options['rd.header_depth'] = 2

を追加した. 上記により, header_depth では = を <h2> にするように設定できる.

ファイルの書き換えが終われば作業完了である. 確認のため,

  https://133.30.109.21/~itpass/hiki

へアクセスしてみた. この際, 「Error! Please edit this page again.」
のようなメッセージが表示されたので, 一度 data 領域以下を
((<#hikisetup による初期設定|URL:#hikisetup による初期設定>)) の状態に戻す (data および data/backup
以外のファイルやディレクトリを消す) という作業を行おうとしたが, 誤って cgi や cvsrootも消してしまったため, これまでの cgi と cvsroot に関する作業をやり直した. その後, data 領域以下について正しく作業を行い, ページを閲覧することができた.


= 管理者用パスワードの設定

  https://133.30.109.21/~itpass/hiki

へアクセスし, 右上の「管理」から環境設定ページへ移動し, 左側の「パスワード」から管理者用パスワードを設定した.
なお, 管理者のアカウント名は admin である.

ここでパスワードを設定すると, 以後管理ページに移動するには右上の「ログイン」ボタンからログインする必要がある.
その際にはアカウント名 (admin) と設定したパスワードが必要になる.


= htaccess ファイルによるパスワード制限

これは, ページ全体の閲覧にパスワード制限を設けるための設定である.
この ((<IT pass HikiWiki|URL:/~itpass/hiki>)) には設定していないが, 閲覧自体に制限をする際には以下を参照せよ.

ここでは, /~itpass/hiki へパスワード制限を掛けることにする.

まず, /home/itpass/hiki/cgi/.htaccess を編集した.

  $ cd /home/itpass/hiki/cgi
  $ vi .htaccess

以下を追加した.

  AuthType Basic
  AuthName "IT pass Hikiwiki"
  AuthUserFile /home/itpass/.htpasswd-hiki
  Require user XXXXXXXX

XXXXXXXX にはユーザ名 cassy を与えた. その後, 以下のコマンドで
パスワードファイルを作成した. コマンド入力後にパスワードを
2 回聞かれるのでパスワードを入力した.

$ htpasswd -c /home/itpass/.htpasswd-hiki XXXXXXXX

パスワードの設定が完了したら再度

  https://133.30.109.21/~itpass/hiki

へアクセスし, パスワード制限がかかっているかを確認した.


= シンボリックリンクファイルの公開許可

シンボリックファイルを公開可能にするため, .htaccess の編集を行った.

  $ cd /home/itpass/hiki/cgi
  $ vi .htaccess

以下の一行を .htaccess に追加した.

  Options +FollowSymLinks

なお, 元ファイルとシンボリックリンクとで所有者が異なる場合に
公開を許可しないようにしたければ,

  Options +SymLinksifOwnerMatch

とすればよい.


= 文字コードの設定

ページのキャラクタセットを EUC-JP にセットした.
/home/itpass/hiki/cgi/hikiconf.rb に元から以下のような
記述があるので, @charset のコメントアウトを外して
(前のシャープマークを削除して),
設定を有効にした.

変更前

  # ページのキャラクタセット【オプション】
  #@charset         = 'EUC-JP'

変更後

  # ページのキャラクタセット【オプション】
  @charset         = 'EUC-JP'


= CVS によるページ管理

((<#cvsroot の作成|URL:#cvsroot の作成>)) で作成した cvsroot 以下で, Hiki ページを管理するための手引きを以下に記す.


== hiki/data/text の import

現在 /home/itpass/hiki/data/text 以下に存在するデータを
cvsroot 以下に格納した.

$ cd /home/itpass/hiki/data/text
$ sudo -u www-data cvs -d /home/itpass/hiki/cvsroot import -m 'Initial import' hiki v_tag r_tag

格納後, そのデータをチェックアウトしておいた.
(次回の編集時に競合を起こすため).

$ cd ../
$ sudo -u www-data cvs -d /home/itpass/hiki/cvsroot co -d text hiki

== hikiconf.rb の編集

/home/itpass/hiki/cgi/hikiconf.rb の末尾に

  #
  # CVS によるページの管理
  #
  @repos_type = 'cvs'
  @repos_root = '/home/itpass/hiki/cvsroot'

を追加した.


== history.rb の有効化

編集履歴を表示するために, 管理画面の左側の「プラグイン選択」を選び, "history.rb" にチェックをつけて OK ボタンを押した.


== 動作テスト

CGI からページ 'てすとぺえじ' の作成や編集を行ってみた.

history.rb プラグインを導入したため, ページを選択すると右上に「更新履歴」というボタンが追加されていた.
これを選ぶと, 更新履歴や差分を見ること可能であった.


= ページの基本情報の設定

Hiki の Top から admin でログインし, 「管理」メニューから
基本情報を設定した. 以下は設定例である.

  基本:
    サイト名:
      IT pass Hikiwiki
    著者名:
      IT pass members
    メールアドレス
      xxxx@xxxxxxx.xx.xx (適当に設定)
    更新をメールで通知
      非通知


= CGI からの環境設定

Hiki の Top から admin でログインし, 「管理」メニュー
へ移動後, 「表示設定」へ移動し, 以下の設定を行った.

* サイドバーの設定:
  使用する

* オートリンクの利用:
  使用する

* WikiName によるリンク機能の利用:
  使用する


= スタイルシートの変更

Hiki のテーマとして佐々木氏作成の graph-paper を改変した
epa-itpass を使う. スタイルシート本体と関連する画像は
((<URL:/~itpass/hiki/theme/epa-itpass/>))
から入手できた.

/home/itpass/hiki/cgi/theme/epa-itpass を作成し,
上記から入手できるファイル群をこのディレクトリ以下に置いた.

  $ mkdir ~itpass/hiki/cgi/theme/epa-itpass

これが完了したので, ブラウザから hiki のページを開き,
admin でログインして [管理] メニューの [表示設定] でテーマとして
Epa-itpass を選択し, 「OK」ボタンをクリックした.


= 編集ユーザ制限

プラグインとして edit_user.rb を使用した.

まず, Hiki のトップページから admin でログイン後「管理」を選択した.
その後, 左の「プラグイン選択」から edit_user.rb を選択した.

必要なユーザを「ユーザの追加」から追加し,
「編集の制限」で「登録ユーザのみ編集できるように制限しますか?」で「はい」を選択した
(ここはテストページなので, 適当にわかりやすいユーザ itpasspass を作成し, 適当なパスワードを設定した).


= 編集ユーザのパスワードを各自で設定可能にする

上記の edit_user.rb では, 管理者アカウント admin になって「ユーザ編集」からアカウントとパスワードの設定を行った.
しかしこれでは, 各ユーザが自分のパスワードの変更などを行うために管理者アカウントのパスワードを知っていなければならず,
つまるところ全てのユーザが管理者アカウントのパスワードを知っていなければならない.
これはアカウント管理上よろしくない.

そこで, 各ユーザが自身の編集ユーザ作成やパスワード設定を可能にできるようにした.
そのためには, ユーザと管理者でそれぞれ次のような準備が必要である.

* 各ユーザが行う作業
  * Hiki を所有するグループへ追加してもらう
  * Hiki 編集用のパスワードを設定する
    * 自分のホームディレクトリ以下にパスワードファイル ~/.hiki-passwd を作成する.

#    ファイルの書式は Apache に同梱される htpasswd コマンドで作成されるものと同じとする. (作り方は任意だが, htpasswd で作成するのが最も容易だろう).

* 管理者が行う作業
  * 各 Hiki ページでスクリプト (下記参照) が 定期的実行されるように CRON を設定する.
    * これにより, Hiki ページを所有するグループに含まれるユーザのホームディレクトリ以下にある
      ~/.hiki-passwd を読み込み, パスワードが集積しされる. そしてパスワードの管理ファイルである data/hiki.conf のパスワードエントリを上書きする.
  
    * data/hiki.conf へのパスワードエントリ上書きルールは以下の通り.
      なお, 以下での「編集ユーザ」は data/hiki.conf 内のパスワード
      エントリに含まれる (= CGI を編集できる) ユーザのことを指す.
      また, ここでの「ユーザ」は, Hiki ページの管理グループ (例えば itpass)
      のメンバーと仮定する. (メンバーか否かは, /etc/group の itpass
      のエントリにメンバーとして含まれているか否かで判断する).

      * 個々のユーザの ~/.hiki-passwd の有無に関わらず,
        既存の編集ユーザの削除は行わない.
        (削除は管理者が CGI 上から手動で行う).
      
      * あるユーザがまだ編集ユーザには含まれておらず,
        かつそのユーザのホームディレクトリに ~/.hiki-passwd ファイルが
        作成されている場合, そのユーザを data/hiki.conf の
        パスワードエントリに追加する.
      
      * あるユーザはすでに編集ユーザに含まれており,
        そのユーザの ~/.hiki-passwd の内容と data/hiki.conf の
        パスワードエントリが異なる場合, data/hiki.conf のそのユーザの
        欄を上書きする. 中身が同じ場合は何もしない.

各ユーザが行う作業に関しては ((<[TEBIKI]Hikiの編集ユーザのパスワード設定>)) にまとめてあるのでそちらを参照のこと.
今回は触れていない.
ここでは, 管理者が行う作業を記す.


上記の「スクリプト」には, このために作成した
((<hiki-passwd-collector.rb|URL:../server/2011/hiki_pagesetup/hiki-passwd-collector.txt>))
を用いる. これを data ディレクトリ以下に置いた.
data ディレクトリ以下は www-data ユーザの管理下なので,
所有者及びグループは www-data とした.

  $ wget http://itpass.scitec.kobe-u.ac.jp/~itpass/epa/hiki_pagesetup/hiki-passwd-collector.rb
  $ cp hiki-passwd-collector.rb /home/itpass/hiki/data
  $ chmod 755 /home/itpass/hiki/data/hiki-passwd-collector.rb
  $ sudo chown www-data:www-data /home/itpass/hiki/data/hiki-passwd-collector.rb

ただし,

  $ wget http://itpass.scitec.kobe-u.ac.jp/~itpass/epa/hiki_pagesetup/hiki-passwd-collector.rb

コマンドが正常に起動しなかったため,

  $ wget http://epa.scitec.kobe-u.ac.jp/~itpass/server/2011/hiki_pagesetup/hiki-passwd-collector.txt
  $ mv hiki-passwd-collector.txt hiki-passwd-collector.rb

とし,

  $ cp hiki-passwd-collector.rb /home/itpass/hiki/data
  $ chmod 755 /home/itpass/hiki/data/hiki-passwd-collector.rb

は権限がないため実行できなかったので, root で実行した.

以下のコマンドで, www-data ユーザとして CRON の設定を行った.
なお, 以下のようにコマンドした際には, 環境変数 EDITOR
で設定されるエディタで開かれるため, エディタにこだわりがある場合は
この環境変数を設定してからこのコマンドを実行すること. ここでは, EDITOR として vi を使用する場合を記す.


ユーザ www-data になってから

  $ export EDITOR=vi

を実行した. その後 crontab を編集モードで開いた.

  $ crontab -e

crontab に以下のように書き込み, 保存した.

  25 3 * * *     umask 002; cd /home/itpass/hiki/data && /usr/bin/ruby ./hiki-passwd-collector.rb -b -q -o hiki.conf -g itpass

このとき,
E138: viminfoファイル /var/www/.viminfo を保存できません!
というエラーがでたが, 書き込み自体はできていたため問題ないと判断した.

この設定は,

  * 毎日 3:25 に
  * umask 002 を設定 (作成されるファイルにグループ書き込み権限をつける)
  * /home/itpass/hiki/data へ移動後
  * ruby で hiki-passwd-collector.rb を実行する
    (オプションの詳細は, このコマンドに -h をつけた際に表示される
    ヘルプを参照のこと).
    * -b: バックアップファイルを作る
    * -q: メッセージを表示しない
    * -o hiki.conf: hiki.conf ファイルの変更を行う
    * -g itpass: itpass グループに含まれるユーザのパスワードファイルを探査

を意味する. crontab ファイルの書き方に関しては,
((<crontab (5)|URL:http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html>)), ((<[TEBIKI]cron の設定>)) を参照のこと.


=CGI からの動作チェック

  https://133.30.109.21/~itpass/hiki

へアクセスし, admin でないアカウント itpasspass で CGI からページの作成や削除, 変更を行ってみた. 「更新履歴」ボタンをクリックし, 過去の更新履歴が残っていることを確認した.


= 参考文献

((<[ITPASS2010]Hikiのページ毎の基本設定>))


[((<計算機とネットワークの手引集>))へ戻る]