PukiWikiには「:config」という設定用のページが存在します。
このページは各種プラグインなどの設定を行うページで、ほとんどの利用者にとっては見る必要のないページです。
特に設定ファイルなのでbotなどに変更されると修正が面倒です。
ほとんどの場合、configページを編集するのは管理者のみではないでしょうか。
であるならば、自分だけ閲覧・編集できれば良いわけです。
そこでconfigページに閲覧制限をかけようという趣旨です。
configページに閲覧制限をかける方法
まずは閲覧制限を有効にします。
PukiWikiのルートディレクトリにある「pukiwiki.ini.php」を編集します。
///////////////////////////////////////////////// // Read auth (0:Disable, 1:Enable) $read_auth = 0;
以下のように1に変更。
///////////////////////////////////////////////// // Read auth (0:Disable, 1:Enable) $read_auth = 1;
続いて閲覧制限をかけたいページ名を指定します。
$read_auth_pages = array( // Regex Username // '#HogeHoge#' => 'hoge', // '#(NETABARE|NetaBare)#' => 'foo,bar,hoge', );
いくつかサンプルがありますが、今回は正規表現で行います。
$read_auth_pages = array( '/config/' => 'hoge', );
これでページ名に「config」という名前の付くページの閲覧は「hoge」というユーザーにだけ許可されます。
続いて編集者制限も追加します。
これをしておかないと「URLさえわかればページは見られないのに編集はできるという状態になります。」と、公式の解説ページにはありましたが、現在では閲覧宣言がかかったページは自動で編集制限のかかるようです。(editプラグインだけ?)
見えないページを編集できる仕様はどう考えてもおかしいので、一応設定しておきましょう。
上記と同じ用に$edit_authを有効にしてconfigページの編集権限をhogeユーザーへ与えます。
///////////////////////////////////////////////// // Edit auth (0:Disable, 1:Enable) $edit_auth = 1; $edit_auth_pages = array( '/config/' => 'hoge', );
最後に「hogeというユーザーを追加」して、ログイン用のパスワードを設定します。
ユーザー名とパスワードはご自身の環境に合わせて適宜読み替えてください。(この解説のまま入力しないでください。)
///////////////////////////////////////////////// // User definition $auth_users = array( // Username => password );
この配列にユーザーネームとパスワードを追加することができます。
セキュリティの関係上、パスワードは平文で保存するのは推奨されません。PukiWikiでは以下のフォーマットで暗号化することが可能です。
パスワードにある{MD5}や{x-php-sha1}が暗号形式の指定方法です。
// SELECT ONE //$adminpass = 'pass'; // Cleartext //$adminpass = '{CLEARTEXT}pass'; // Cleartext //$adminpass = '{SSHA}B78f8i/RpNC+CyFdKLH2odaK8hlPNjlOOUUyMA=='; // SSHA 'pass' //$adminpass = '{SHA}nU4eI71bcnBGqeO0t9tXvY1u5oQ='; // SHA 'pass' //$adminpass = '{SMD5}o7lTdtHFJDqxFOVX09C8QnlmYmZnd2Qx'; // SMD5 'pass' //$adminpass = '{MD5}Gh3JHJBzJcaScd3wyUS8cg=='; // MD5 'pass' //$adminpass = '{CRYPT}$1$nxrVut5a$c9LdXN1rKQC1HQOwBY4O//'; // CRYPT 'pass' //$adminpass = '{x-php-sha1}9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684'; // sha1('pass') //$adminpass = '{x-php-md5}1a1dc91c907325c69271ddf0c944bc72'; // md5('pass') //$adminpass = '{x-php-crypt}$1$nxrVut5a$c9LdXN1rKQC1HQOwBY4O//'; // crypt('pass')
この中では「sha1」が一番セキュリティが高いので利用します。本来はsaltなんかも設定するといいのですが、そのへんはPukiWikiが内部で頑張ってるみたいなのでおまかせします。
パスワードの生成は以下のように打てば出力されます。
var_dump( sha1('pass') ); // 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684
何やらPukiWikiで専用の関数も用意されているようです。第1引数にパスワードの文字列、第2がアルゴリズムを指定します。
pkwk_hash_compute('pass', '{x-php-sha1}')
このコードに{x-php-sha1}を付けて以下のようにします。
サンプルで用意されているユーザー名とパスワードはセキュリティの驚異に繋がるので削除してください。
$auth_users = array( hoge => '{x-php-sha1}9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684' );
以上で準備は完了です。
これで「config」という名前のつくページにアクセスすると認証が画面が出るようになります。
一応上記の設定で閲覧制限はかけられたのですが、私の環境では対応する言語ファイルの設定がないため、本来表示されるはずの「ユーザー名」や「パスワード」という文字列がありません。
そこで言語ファイルも編集します。
ルートディレクトリにある「ja.lng.php」に追記します。
$_loginform_messages['username'] = 'ユーザーネーム'; $_loginform_messages['password'] = 'パスワード'; $_loginform_messages['login'] = 'ログイン';
以上で設定は完了です。
この設定を行い「config」ページにアクセスすると、以下のようなログインが画面が表示されます。
設定したユーザー名をパスワードを入力して初めて閲覧・編集できるようになります。