ユーザー認証

ユーザー認証機能を利用することで、ページの閲覧制限、編集制限、検索制限をすることができます。

デフォルトではPHP Sessionを利用し、PHP5.1以降で動作させる必要があります。PHP5.0以前の環境で動作させる必要がある場合はBasic認証を利用してください。

ユーザーアカウント(ユーザー名とパスワードの組み合わせ)管理の方法は、3種類あります。

  • PukiWiki内定義(pukiwiki.ini.phpでユーザーを定義)
  • LDAPサーバーで管理
  • 外部システムで管理

認証情報の入力方法(auth_type)として3種類の方法があります

  • Form認証: PukiWiki内のHTML formを利用
  • Basic認証: Webブラウザの機能を利用したHTTP認証
  • 外部認証: PukiWiki外で認証した結果をPukiWikiで利用する

利用可能な組み合わせは限定されており、以下のようになります。

auth_type入力方法アカウント管理Session利用
AUTH_TYPE_FORMForm認証PukiWiki内定義利用する
AUTH_TYPE_FORM(LDAP)Form認証LDAP利用する
AUTH_TYPE_BASICBasic認証PukiWiki内定義利用しない
AUTH_TYPE_EXTERNAL外部認証外部システム利用する
AUTH_TYPE_EXTERNAL_REMOTE_USER外部認証外部システム利用しない
AUTH_TYPE_EXTERNAL_X_FORWARDED_USER外部認証外部システム利用しない

AUTH_TYPE_FORM (PukiWiki内ユーザー定義)

pukiwiki.ini.php 設定

$auth_type = AUTH_TYPE_FORM;

ユーザー定義

アクセス制御で使用するユーザ名とパスワードを pukiwiki.ini.php 内で設定します。

/////////////////////////////////////////////////
// User definition
$auth_users = array(
        // Username => password
        'foo'   => 'foo_passwd', // Cleartext
        'bar'   => '{x-php-md5}f53ae779077e987718cc285b14dfbe86', // PHP md5()  'bar_passwd'
        'hoge'  => '{SMD5}OzJo/boHwM4q5R+g7LCOx2xGMkFKRVEx',      // LDAP SMD5  'hoge_passwd'
);
  • パスワードの暗号化形式を複数の中から選択できます。(利用可能な暗号化形式など、詳細はdev:BugTrack/709 へ)

パスワードを暗号化せずに書く事も可能ですが、 何らかの理由(アクセス権限設定のミスなど)で設定ファイル(pukiwiki.ini.php)が他者に覗かれるような事態の可能性を考えると、暗号化したパスワードをタイプしておくほうが安心です。

AUTH_TYPE_FORM(LDAP)

pukiwiki.ini.php 設定

$auth_type = AUTH_TYPE_FORM;
$ldap_use_account = 1;
$ldap_server = 'ldap://ldapserver:389';
$ldap_base_dn = 'ou=Users,dc=ldap,dc=example,dc=com';
$ldap_bind_dn = 'uid=$login,dc=example,dc=com';
$ldap_bind_password = '';

AUTH_TYPE_BASIC

pukiwiki.ini.php 設定

$auth_type = AUTH_TYPE_BASIC;

PHP経由で基本認証(Basic認証)を使用するため、サーバー環境やPHPの動作環境によってはこの機能を利用できません。
CGI版PHPでPukiWikiを動作させた場合?は、利用できません。PukiWiki を mod_php で動作させる必要があります。
IIS?でPHPを稼動している場合、サーバーおよびPHPの設定が適切でないと機能しません。また、古いPHPでは一部の環境での制約により利用できない場合があります。
制限事項やサーバー側の設定方法などの詳しい情報は、PHP による HTTP 認証(PHP Manual)>http://jp2.php.net/manual/ja/features.http-auth.php を参照してください。

ユーザー定義

AUTH_TYPE_EXTERNAL

同じサーバー内の別のPHPスクリプトにリダイレクトします。リダイレクト先のPHPで認証を行い、ユーザー名を設定します。

pukiwiki.ini.php 設定

$auth_type = AUTH_TYPE_EXTERNAL;
$auth_external_login_url_base = './exlogin.php';
$ldap_user_account = 1;

とLDAPサーバーの設定を行うことで、LDAPサーバーからユーザーのFull nameを取得することができます。

AUTH_TYPE_EXTERNAL_REMOTE_USER

$auth_type = AUTH_TYPE_EXTERNAL_REMOTE_USER;

REMOTE_USER環境変数から、認証済みユーザー名を取得します。Webサーバー側で認証処理を行うなど、PukiWikiサイトすべてが認証管理下にある場合に利用できます。

AUTH_TYPE_EXTERNAL_X_FORWARDED_USER

pukiwiki.ini.php

$auth_type = AUTH_TYPE_EXTERNAL_X_FORWARDED_USER;

HTTPリクエストヘッダ X-Forwarded-User から、認証済みユーザー名を取得します。リバースプロキシ環境で、PukiWikiサイトすべてが認証管理下にある場合に利用できます。


設定方法

pukiwiki.ini.php にて設定します。

認証方式

以降で設定する正規表現?マッチを、ページ名に対して行うのか、ページの内容に対して行うのかを設定します。

/////////////////////////////////////////////////
// Authentication method

$auth_method_type       = 'pagename';   // By Page name
//$auth_method_type     = 'contents';   // By Page contents
  • ※1.4.7 現在、両方を同時使用することはできません。
  • ※ページ内容を対象に認証を行うのは、負荷を考えるとお勧めできません。
    • 登録した正規表現の数やその設定、そしてページ内容の長さによっては、認証動作が極端に重くなります。
    • 閲覧認証と検索認証を有効にした場合の単語検索では、links プラグイン を実行するのとほとんど変わらないぐらいの時間が必要となる場合があります。(最悪、完走せずにエラーとなります)
    • 以上の理由から1.4.7 以降は、ページ名を対象に認証する設定が、デフォルトになっています。

閲覧認証

/////////////////////////////////////////////////
// Read auth (0:Disable, 1:Enable)
$read_auth = 0;

$read_auth_pages = array(
        // Regex                   Username
        '#HogeHoge#'            => 'hoge',
        '#(NETABARE|NetaBare)#' => 'foo,bar,hoge',
);

$read_auth フラグで、閲覧認証機能を使用するかどうかを設定します。

$read_auth_pages で閲覧認証を要求するページ(閲覧制限するページ)を決定するための正規表現?パターンを設定します。 カンマ区切りで複数ユーザを書いても良い。

編集認証

/////////////////////////////////////////////////
// Edit auth (0:Disable, 1:Enable)
$edit_auth = 0;

$edit_auth_pages = array(
        // Regex                   Username
        '#BarDiary#'            => 'bar',
        '#HogeHoge#'            => 'hoge',
        '#(NETABARE|NetaBare)#' => 'foo,bar,hoge',
);

$edit_auth フラグで、編集認証機能を使用するかどうかを設定します。

$edit_auth_pages で編集認証を要求するページ(編集制限するページ)を決定するための正規表現?パターンを設定します。 カンマ区切りで複数ユーザを書いても良い。

検索認証

/////////////////////////////////////////////////
// Search auth
// 0: Disabled (Search read-prohibited page contents)
// 1: Enabled  (Search only permitted pages for the user)
$search_auth = 0;

$search_auth フラグで、検索認証機能を使用するかどうかを設定します。 有効にすると、本文の検索対象を閲覧許可がでているページのみとします。

検索認証は、閲覧認証の設定に依存します。 例えば、閲覧認証が無効で検索認証が有効の場合、閲覧認証はすべてのページを許可するので、検索認証が無効の場合と同じ結果になります。(ただし、認証チェックをしようとする分、検索時間が多少増加します)


設定例

正規表現?

  • 全ページに制限をかける。
    $edit_auth_pages = array(
        '##' => 'hoge',
    );
  • ページ Apple に制限をかける。
    $edit_auth_pages = array(
        '#^Apple$#' => 'hoge',
    );
  • ページ Apple と Orange に制限をかける。
    $edit_auth_pages = array(
        '#(^Apple$|^Orange$)#' => 'hoge',
    );
    または
    $edit_auth_pages = array(
        '#^Apple$#' => 'hoge',
        '#^Orange$#' => 'hoge',
    );
  • Comments/ で始まるページに制限をかける。
    $edit_auth_pages = array(
        '#^Comments/#' => 'hoge',
    );
  • /template で終わるページに制限をかける。
    $edit_auth_pages = array(
        '#/template$#' => 'hoge',
    );
  • Comments/ で始まるページ以外に制限をかける。
    $edit_auth_pages = array(
        '#^(?!^Comments/)#' => 'hoge',
    );
  • /template で終わるページ以外に制限をかける。
    $edit_auth_pages = array(
        '#^(?!^.*/template$)#' => 'hoge',
    );

注意事項

  1. PukiWiki 1.4.7 現在の仕様では、ユーザ A のみがあるページの閲覧を許可されている、かつユーザ B のみがそのページの編集を許可されている場合、ユーザ B は編集時にその内容を見ることができるので、ある意味ページ内容の閲覧を許可されているとも言える状態になります。

関連

コメント

最新の10件を表示しています。 コメントページを参照

  • PukiWiki 1.5.1 で強化される認証機能についてのドキュメントです。 official:PukiWiki/Install/ユーザ認証 の更新版になります -- umorigu 2016-02-13 (土) 21:34:58
  • -- - 2016-02-16 (火) 10:15:49
  • Basic認証だけではなくDigest認証にも対応してください -- 名無し? 2016-02-26 (金) 16:35:30
  • はい。今回追加した「外部認証」がまさにdigest認証など、Webサーバーの提供する認証を利用するための仕組みです。例があるといいですね… -- umorigu 2016-02-26 (金) 19:26:01
  • そうでは無く、PHP内部で完結するdigest認証が欲しいです。レンタルサーバーなど1ユーザでも管理したいです -- 名無し? 2016-03-03 (木) 15:53:53
  • なるほどそういう需要があるんですね。確かにレンタルサーバーでdigest認証使えるところは多くないのかもしれません。外部認証での認証移譲先で、PHP実装のdigest認証を使うことができます -- umorigu 2016-03-04 (金) 09:07:49
お名前:

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-02-13 (土) 21:33:25
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.227 sec.

OSDN