PukiWiki/初期設定のメモ

PukiWikiの基本設定のメモ(2022-10-01)


公式のインストール手順 の後、自分でいろいろやる時のメモです。


Wikiやホームページの本文は、PukiWiki自体を使って更新するのですが、
まずはその PukiWikiを起動できる状態にするお話です。

pukiwiki.ini.php の変更

そもそも何が設定・変更できるのか、pukiwiki.ini.php は一通り見てみるのが早いと思います*1

113行目あたり
$page_title = 'PukiWiki';

名前の通り、ページのタイトルです。私の所だと「ぬるいねっと」ですね。

122行目あたり
$modifier = 'anonymous';

編集者の名前ですが、もちろん自分の名前とか書いたらダメです。
(プライバシー上の問題で。初期値のanonymousは「匿名」という意味です)。
ひとまず自分のサイト名でも入れておきましょう(私の場合は「null-i.net」)

125行目あたり
$modifierlink = 'http://pukiwiki.example.com/';

編集者へのリンクです。自分のサイトへのURLに更新しましょう。

本来は編集する人への連絡先とかをmodifierlinkに設定したいところですけれど、
うっかりメールアドレスや電話番号を書いたりすれば、すぐにインターネット上を巡回しているbotの餌食になって、迷惑メールとかが山ほど飛んできた飛んできたり、メール認証を破ろうとする人達が殺到してきてしまいます。

それでも連絡先を伝えたい場合はひと工夫入れましょう。
たとえば文字と画像を混ぜて表記するとか*2、あるいは迷惑メールが来ることが前提のメールアドレスを作るとか。

128行目あたり
$defaultpage  = 'FrontPage';     // Top / Default page

右にあるコメントの通り「トップ、デフォルト(=規定値)のページ」です。
インストール直後の時点では何もない状態ですから、自分で何かを書いた後に、最終的にトップにしたい場所をここで指定しましょう。

166行目あたり
// AutoLink minimum length of page name
//$autolink = 0; // Bytes, 0 = OFF (try 8)

その前にある行の nowikiname=0とセットで使う、自動リンク設定です。

私は使ってない(autolink = 0のまま)ですが、
他のブログや wiki、特に辞書や用語集のようなサイトの場合はこういう自動リンク機能が使われていると思います。

自動でやってくれないと、一つ用語・単語を加える度に全部のページを見直してリンクを張り直さなければなりませんからね。

ただし、意図しないリンクまで増える場合もあります。
たとえば「ラグ」というタイトルのWikiページを作った時に「プラグイン」「タイムラグ」とかの別の「ラグ」にも反応して自動でリンクが貼られてしまう、とか。
autolinkを使う場合はページのタイトル(WikiName)の命名に少し気をつけておきましょう。
(たとえば「ラグ(敷物)」と命名しておけば、変なリンクが増えることは無い・・・けど、自動でリンクも貼ってもらえなくなって、悩ましい・・・)

190行目あたり
$adminpass = '{x-php-md5}!';

管理者パスワードです。
初期値(空欄)のままだと、常に認証失敗なのかな?
md5 のパスワードを取得する例は以下

$ echo -n 'password' | md5sum

# 改行を削って(-n)、パスワードにしたい文字列をmd5化しています。
# md5以外も使えます。
# ここで得た文字列を、'{x-php-md5}文字列' みたいに仕込みます。

※詳しくは公式を参照

ちなみに md5で暗号化していても、他の人には見せないようにしておきしょう*3
pukiwiki.ini.phpファイルは管理者だけが読めるように、取り扱い注意です。

同じように、認証関連で

258行目あたり
// User definition
$auth_users = array(
        // Username => password

のところにも、自分でユーザーを追加して、既存のfoo、bar、hogeはコメントアウト(//でよける)してしまいましょう。
類推できるユーザー名やデフォルトの設定は狙われやすく、悪意の攻撃者がfooやbarを使って編集しようとしてきます。*4

291行目あたり
$edit_auth = 0;

みんなで編集(edit)するページなら認証(auth)を使わないかもしれないでしょうけれど・・・・・・社内ネットワークとかならまだしも、インターネット上に公開するサイトで認証無しはありえません。すぐに botとかに荒らされてしまいます。
認証あり(1)に変えましょう。

※上にある「$read_auth = 0;」と間違えないように。こっちは「読む」権限の付与です。

このすぐあとに続く行にページを編集できるユーザIDが書かれています。

'#BarDiary#'            => 'bar',
'#HogeHoge#'            => 'hoge',
'#(NETABARE|NetaBare)#' => 'foo,bar,hoge',

これをコメントアウトしつつ、
さっき $auth_users に足したユーザ名(例として「your_edit_id」)をここに加えます。

//'#BarDiary#'            => 'bar',
//'#HogeHoge#'            => 'hoge',
//'#(NETABARE|NetaBare)#' => 'foo,bar,hoge',
'/^.*$/'                  => 'your_edit_id',  // your new user

左側の「/^.*$/」は正規表現で、「全部のページ」を指定しましたが、適切な範囲を指定しましょう。

複数人で編集する場合に、それぞれユーザーごとに分けて編集権限を付与できます。
デフォルト設定を例にすると、
ユーザ名 bar は「BarDiary」という文字列をWikiNameに含むページを編集できることになります。
foo,bar,hogeの三人が編集できる「(NETABARE|NetaBare)」は、「NETABAREまたはNetaBareを含む」ページです。

さらに正規表現の補足をしますが、
「^」が文の先頭、「.」が任意の一文字、「*」が0回以上の繰り返し、「$」が文末。それらの最初と最後に「/」で囲みます。
つまり「/^.*$/」は「全部のページ」の正規表現の例です。


少し戻って

234行目あたり
/////////////////////////////////////////////////
// Authentication type
// AUTH_TYPE_NONE, AUTH_TYPE_FORM, AUTH_TYPE_BASIC, AUTH_TYPE_EXTERNAL, ...
// $auth_type = AUTH_TYPE_FORM;
// $auth_external_login_url_base = './exlogin.php';

私の環境だとデフォルトの AUTH_TYPE_FORM だと上手く認証できませんでした*5
なので「$auth_type = AUTH_TYPE_BASIC;」を追加・有効化しています*6


そして、ここからは追々の話かもしれませんが、

506行目あたり
$non_list = '^\:';

表示「しない」ページのリストを正規表現で列挙できます。

例えば「 $non_list = '^AutoTicketLinkName|^FormattingRules$|^InterWiki$'; 」
(PukiWikiでデフォルトで入っているページをいくつか外す例です)

PukiWikiの検索機能やらサイト一覧やらを使うと、PukiWikiで最初から入っているページも含んだ全てがそこに表示されるわけですが、こうやって non_list で非表示にすることもできます。
もちろん、自分で書いたページも非表示リストに加えられます。

ただし削除では無く非表示なので、URLを直接指定すれば参照できますし、GoogleとかのWeb検索とかからも直接アクセスできてしまいます。
本当に不要なページは削除してしまいましょう。

・・・ぜんぶ外す場合は以下でしょうか。

$non_list = '^AutoTicketLinkName|^FormattingRules$|^InterWiki$|' .
            '^InterWikiName$|^InterWikiSandBox$|^MenuBar$|^RecentDeleted$|' .
            '^Help$|^BracketName$|^FrontPage$|^SandBox$|^WikiEngines$|' .
            '^WikiName$|^WikiWikiWeb$|^YukiWiki$|^PHP$|^PukiWiki$|^PukiWiki\/1.4|:';~

該当する単語が含まれるページはすべて消えるので、ご利用時は入念にチェックしてみて下さい。

また、ここを削ってもまだ「RecentChanges(最終更新)」*7 には残っているのでご注意を。
(RecentChanges は名前のとおり、最終更新のタイミングで更新されます)


552行目あたり
/////////////////////////////////////////////////
// User-Agent settings
//
// If you want to ignore embedded browsers for rich-content-wikisite,
// remove (or comment-out) all 'keitai' settings.
//
// If you want to to ignore desktop-PC browsers for simple wikisite,
// copy keitai.ini.php to default.ini.php and customize it.

$agents = array(

ここが、PCやスマホでサイトを訪れたときに、PC用とスマホ用のどちらのページに振り分けるかを決定する場所になります。

コメント欄には使い方のヒントが書いてありますね。

凝ったWikiにしたいなら'keitai'に関する記述を除外して、
逆にシンプルなWikiにしたいなら(このpukiwiki.ini.phpでは無くて)keitai.ini.php をコピーして使うと良いですよ。


この後に続く「'profile'=>'keitai'」という記述が、スマホや携帯端末に振り分ける用のルールです。
User-Agentが携帯端末のそれだった場合は、
画面表示を skin/pukiwiki.skin.php から skin/keitai.skin.php に切り替えます。

で、User-Agent というのは、HTTPの知識がないと初耳になるかもしれませんが、
どの端末(PCかスマホか)でPukiWikiにアクセスしてきたかの情報が入っている場所、になります。

具体的にはWebブラウザがWebサーバに対してUser-Agentを申告する仕組みです。
(WindowsのEdgeやIEとか、ChromeとかSafariとかFirefoxとかが、User-Agentを設定して、Webサーバに自分が何者なのかを申告する仕組みです*8

Webサーバ側(Apache httpd とか Nginxとか)のアクセスログを見ると、ユーザーがどのUser-Agentでアクセスしてきたかが分かります。
Google Analytics等のアクセス分析ツールでは、訪問者達がどのUser-Agentでアクセスしてきたかを見ることができます。
そういうログから、
このサイトはPCで見ている人が多いなー、スマホが少ないなー、まじめにスマホ対応してないからなのかなー・・・みたいなのを分析できるわけです。


話を戻して、
そんな User-Agentを元に、画面表示方法を決定します。

pukiwiki.ini.php の中に

array('pattern'=>'#\b(Android.+Mobile|iPhone)\b#',      'profile'=>'keitai'),

みたいなルールを追加した場合、Android端末とiPhoneからのアクセスを keitaiの方に割り振ることができます。*9

つまり、keitai は「skin/keitai.skin.php」で*10
それ以外は「skin/pukiwiki.skin.php」です。

あと、日記やブログに便利な skin/tdiary.skin.php というのもあります。

必ずしもPCとスマホで画面を分けなければいけない訳でもないですが、そのへんは実際に画面で確認してみた方が早いです。
自分がどんなページを書くかによって、見栄えが変わってくると思います。

ChromeでもFireFoxでも、Webブラウザの「開発者モード」を使えば、各スマホ画面やタブレットでどう見えるのかが確認できます。

用途や好みによって、skinや cssを使い分けましょう。

index.php は使い分けましょう

この index.phpが「入り口」になります。*11

12行目あたり
// Special
//define('PKWK_READONLY',  1);

インターネット上に公開する場合はPKWK_READONLYを有効(=1)にしましょう。
Wikiの先頭や末尾にある編集・解凍・新規作成など「編集者向けののリンク」が消えていればOKです。

そしてこの index.php をコピーした index2.php とかを作って、
index2.php では PKWK_READONLY をコメントアウトして、
自分が PukiWikiを編集するときだけは index2.php を使います。
もちろんこの index2.php は存在を秘密にします。

Web検索エンジンや悪意のbotとかがインターネット上で常に徘徊し続けているので、不特定多数で編集するような事情とかがないかぎりは編集用URLは非公開にしておきましょう*12

リンクからではなくURL直接指定で編集を試みることはできるのですが、
(だからパスワード等の管理は必須になりますが)
それでも公開の有無で攻撃量が大幅に変わるので、編集や管理に関する画面は極力見せないようにリンクやURLは隠すようにしてみて下さい。


あとは、PKWK_READONLY や他の変数を defineしておいて、通常画面とメンテナンス画面で表示を分けるみたいなこともできます。
そのあたりの工夫は公式の skin/pukiwiki.skin.php で、PKWK_READONLY を使った if文を見てみると参考になります。


以上、初期設定のメモでした。

無事に設定出来たら、
index.php にアクセスしてみて、デフォルトのPukiWiki画面が出てくるか確認してみましょう。


*1 英語ですが、読めなくても理解できた気分になる心意気が大事です。 ・・・まじめな話だと、ここで使われている英単語はそれ系によく出てくる単語中心に書かれているので、がんばって読んでみて慣れておくのも損はないとおもいます。
*2 すくなくともコピペできちゃうような表記だと、インターネットを自動徘徊するbotが自動で拾って自動で攻撃してきてしまします。じゃぁ、安全な表記が何かと言われると・・・私も知りたいです。こういうのってイタチごっこになってしまう話なので。
*3 暗号って聞くと安全な印象を持ってしまいますが、ツールを使えば&(しろうと){素人};でも解読できますし、md5もsha1も数年前にもう破られている暗号方式です……暗号とは…
*4 実際、アクセスログに「foo」とか「hoge」とかもちょくちょく入ってきます。最初はhogeって何の冗談かと思いましたが、「攻撃」でした…
*5 できる、できないの条件は分からないです・・・ちなみにうちはsquidでプロキシを使った構成ですが、それが関係あるかどうかもよく分かりません
*6 あと、https(暗号化通信)とセットで使って、ユーザ名とパスワードが平文で飛ばないように気をつけましょう。https未対応ならLet's Encryptを使えば無料で対応できます。
*7 このファイルを wiki/*.txt で探す方法は Wikiファイル名の調べ方 で。
*8 そして悪意の攻撃者やbotが自分を偽装してくる設定でもあります。
*9 私が作っておいたサンプルスキンはPC・スマホ兼用なので、この記述の追加は不要です。
*10 歴史的な背景(?)で、いわゆる昔のガラケーでも表示できる画面になっています。だから他のCMSに比べて PukiWikiの keitai設定はずっとシンプルなテキストベースの表示です。 ・・・私はこっちの方が、画像やjavascriptを盛りまくりのページよりもずっと快適に感じます。
*11 参考まで、WebブラウザでURLを省略した時にindex.phpを返すようにする設定はWebサーバ側でやります。Apache httpd だと DirectoryIndexとかが該当します。
*12 正規の検索エンジンが、不正なURLにアクセスしてくることもあります。たぶん他のサイトが編集用URLへのリンクを貼って、それをたどったGoogleやBingが巡回アクセスしてきて、結果として攻撃になってしまう場合・・・とかだと思います。