Manual:アクセス制限

This page is a translated version of the page Manual:Preventing access and the translation is 80% complete.

利用者権限の詳細情報は、Manual:利用者権限 を参照してください。 このページではアクセス権の制限に役立つ事例を提供します。

LocalSettings.php の編集方法については、Manual:LocalSettings.php を参照してください。

シンプルなプライベートWiki

一般的な使用例である"自分だけのWiki"については、必要な機能です。

  警告: 以下のセクションの警告を参照してください。これは単純な「一般的な使用」のコードであり、あなたの要件に一致する場合と一致しない場合があります。
# Disable reading by anonymous users
$wgGroupPermissions['*']['read'] = false;

# Disable anonymous editing
$wgGroupPermissions['*']['edit'] = false;

# Prevent new user registrations except by sysops
$wgGroupPermissions['*']['createaccount'] = false;

インストールされている拡張機能によっては、さらに多くのページをホワイトリストに登録することができます。 例えば、Extension:ConfirmAccount の拡張機能を使用している場合、おそらく Special:RequestAccount をホワイトリストに登録したいでしょう。 あなたのWikiのコンテンツ言語が英語でない場合、問題の特別ページの翻訳名を使用しなければならないかもしれません。

アカウント作成の制限

アカウント作成を制限するためには、MediaWikiのインストールのルートパスでLocalSettings.phpを編集する必要があります。

# Prevent new user registrations except by sysops
$wgGroupPermissions['*']['createaccount'] = false;
アカウント確認キューを設定する場合は、ConfirmAccount の拡張機能を使用することができます。 (そうでない場合も、以下の手順で進めてください。)
なお、管理者による新規利用者の作成は、これまで通り以下の方法で行うことができます:
  1. sysopとしてログインするとSpecial:Userloginへ移動します。
  2. "アカウント作成" リンクをクリックすると、アカウント作成フォームが表示されます。
  3. 利用者名とメールアドレスを入力し、「メールで送信」ボタンをクリックします。 Note you need $wgEnableEmail=true or else the sysop must pick a password and send it to the user.
  4. アカウントはランダムなパスワードで作成され、指定されたアドレスにメールが送信されます (パスワードを忘れたときと同じように)。 初回ログイン時にパスワードの変更を求められますが、その際、メールアドレスも確認済みと表示されます。
    代わりに「アカウント作成」ボタンをクリックすると、利用者にパスワードを手動で送信する必要があります。 $wgMinimalPasswordLength=0 (バージョン 1.15 までの既定の構成) を設定し、パスワード欄を空白にした場合、利用者にはメールアドレス確認要求のメールが送信されますが、Special:Confirmemail にアクセスして確認を実行することはできません。 代わりに、利用者にはエラーが表示されます ($wgWhitelistRead に追加していない限り)。利用者は空のパスワードでログインでき、その後メール アドレスを確認されますが、パスワードは再設定されません (手動で再設定する必要があります)。

利用者以外がログインしようとしたときに表示されるテキストを編集することが適切な場合があります。 これは、sysopとしてログインしているときに、MediaWiki:Nosuchuserで行うことができます。 フォーマットは無視され、テキストは文字通りレンダリングされるため、特別なフォーマットのないプレーンテキストを使用してください。 (変更されている可能性があります、bug 12952を参照してください)。

また、ページ MediaWiki:Createaccount-text を編集することで、新規利用者に送信されるメールの内容を変更できます。

システム管理者でもアカウントを作成できないようにするには:

# Prevent new user registrations by anyone
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = false;

ログインフォームの上にメッセージを追加するには、MediaWiki:Loginpromptを修正します。

編集を制限する

全ページの編集を制限する

このような修正を加えたページでも利用者は閲覧でき、Special:Export/記事名やその他の方法でソースを閲覧できます。 bug 1859 も参照してください。

Help:User rights および Manual:$wgGroupPermissions を参照してください。 また、Extension:AbuseFilter を使えば、Wikiの管理者であれば誰でも様々な制限をかけることができます。

すべてのページを特定のクラスの利用者による編集から保護する (閲覧からの保護ではない) 方法の例をいくつか紹介します:

匿名での編集を制限する

編集する前に利用者登録が必要です。

$wgGroupPermissions['*']['edit'] = false;

管理者以外の利用者に対する編集の制限

利用者が管理者 (sysop) 利用者グループのメンバーである必要があります。

$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = true;

あらゆる利用者に対する編集の制限

$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['user']['edit'] = false;
$wgGroupPermissions['sysop']['edit'] = false;

名前空間全体の編集を制限する

MediaWiki バージョン:
1.10

MediaWikiバージョン1.10以降、$wgNamespaceProtection 変数を使用して名前空間全体を保護することが可能です。 例:

# Only allow autoconfirmed users to edit Project namespace
$wgNamespaceProtection[NS_PROJECT] = array( 'autoconfirmed' );

# Don't allow anyone to edit non-talk pages until they've confirmed their
# email address (assuming we have no custom namespaces and allow edits
# from non-emailconfirmed users to start with)
# Note for 1.13: emailconfirmed group and right were removed from default
# setup, if you want to use it, you'll have to re-enable it manually
$wgNamespaceProtection[NS_MAIN]     = $wgNamespaceProtection[NS_USER]  =
$wgNamespaceProtection[NS_PROJECT]  = $wgNamespaceProtection[NS_IMAGE] =
$wgNamespaceProtection[NS_TEMPLATE] = $wgNamespaceProtection[NS_HELP]  =
$wgNamespaceProtection[NS_CATEGORY] = array( 'emailconfirmed' );

# Only allow sysops to edit "Policy" namespace
$wgGroupPermissions['sysop']['editpolicy'] = true;
$wgNamespaceProtection[NS_POLICY] = array( 'editpolicy' );

最後のケースでは、カスタム名前空間が存在し、NS_POLICY が名前空間番号と等しい定数として定義されていることを仮定していることに注意してください。 MediaWikiのコアな名前空間のリストに関しては Manual:カスタム名前空間の使用方法 Manual:名前空間の定数 を参照して下さい。

特定のページの編集を制限する

Use the Protect feature. デフォルトでは、どの管理者もページを保護し、他の管理者だけが編集できるようにすることができます。 1.9 以降では、既定で「自動承認された」利用者 (設定された期間より古いアカウントを持つ) だけが編集できるように、ページを保護することもできます。 この場合、設定ファイルの編集は必要ありません。

特定の権限を持つグループに編集を制限したい場合は、$wgRestrictionLevels を編集してください。 編集、移動以外の動作をさせないためには、$wgRestrictionTypes を使用します。

一部のページを除き、編集を制限する

すべてのページに対して一律に編集を制限し、いくつかのページ(サンドボックス、参加リクエストページなど)はより寛大に編集できるようにするには、EditSubpages 拡張機能を使用します。 これはあまり合わないかもしれませんが、上記の特定のページの編集を制限するという方法で、すべての名前空間を保護し、編集したいすべてのページがある特別なものだけを誰でも編集可能にすることも可能です。

特定のIPアドレス範囲に対する編集の制限

学校やその他の機関は、いくつかの指定されたIPアドレスの範囲からではないすべての編集をブロックしたいと思うかもしれません。 そのためには、Manual:ブロックとブロック解除 を参照してください。 The only way to do this at present without modifying the code is to go to Special:Blockip and systematically rangeblock every one of the address ranges that you don't want to be able to edit. これは、将来のすべてのバージョンのMediaWikiで機能します。 名前空間単位では動作しません。

特定の利用者による編集を制限する

Use the user blocking functionality to deprive a user of all edit access. MediaWiki does not include a possibility to give rights to separate users directly; instead rights are always given to a user group. 特定のページの編集を制限したり許可したりするために、特定の利用者の権限を変更する方法は、利用者グループを変更する以外にはコア ソフトウェアには存在しません。

全ページの作成制限

編集の権限を失効された利用者は、既に新しいページやトーク ページを作成できなくなっています。
# Anonymous users can't create pages
$wgGroupPermissions['*']['createpage'] = false;

# Only users with accounts four days old or older can create pages
# Requires MW 1.6 or higher.
$wgGroupPermissions['*'            ]['createpage'] = false;
$wgGroupPermissions['user'         ]['createpage'] = false;
$wgGroupPermissions['autoconfirmed']['createpage'] = true;

特定の名前空間でのページ作成を制限する

There are separate rights for creating talk pages (createtalk) and creating non-talk pages (createpage). それよりも細かい名前空間ごとの制御が必要な場合は、コアのMediaWikiでは不可能で、Extension:Lockdown のような拡張機能が必要です。

アップロードされたファイルへのアクセス制限

Manual:画像認証 , img_auth.php , Manual:User rights (閲覧)

ファイルをアップロードする機能を有効にした場合、これらのファイルは基礎となるウェブサーバーによって直接提供されます。 As a result, account-based access to the file is unrestricted by default.

  警告: 利用者権限 「読み取り」 (ページの閲覧を許可) を false に設定すると ウィキ (記事、トーク、...) ページのみが保護されますが、アップロードされた ファイル ($wgUploadPath 下位ディレクトリ内の画像、ファイル、文書...) は常に、既定では直接アクセス経由で読み取り可能なままです
画像の閲覧やファイルのダウンロードのアクセスをログイン利用者のみに制限したい場合は、Manual:画像認証 および img_auth.php の各ページの情報を使用してください。

サーバー構成でアップロードされたファイルへのアクセス制限を行う例

機密性の高いファイルがインターネットからアクセス可能なWikiにアップロードされている場合、これらのファイルがどこからアクセスできるかについて制限を加えることができます。 Apache では、ローカルネットワークが 10.1.2.* であった場合、ローカルアドレスにファイルを提供することを制限することができます。

  <Location /mediawiki/images>
    Order deny,allow
    Allow from 10.1.2.3
    Deny from all
  </Location>

閲覧制限

全ページの閲覧を制限する

  警告: 匿名利用者がウィキのマークアップ/コードを閲覧できないようにしたい場合、どのページも編集できないようにする必要があります (上記の#全ページの編集を制限するを参照してください)。 どのページでも編集できるのであれば、編集できないページでもテンプレートインクルード を使って閲覧することができます。 これを回避するために、$wgNonincludableNamespaces
  警告: この方法では、アカウントを作成すれば、誰でもWikiを閲覧することができます。 上記の#Restrict account creationと組み合わせるとよいでしょう。
  警告: アップロードされた画像は、画像ディレクトリの名前を知っている人であれば、これまで通り閲覧可能です。 $wgUploadPath をimg_auth.phpのスクリプトに向け、Manual:画像認証 の指示に従うか、.htaccessのような外部の方法で画像を保護する必要があります。
  警告: Wiki pages like MediaWiki:Common.css and MediaWiki:Gadget-foo.css may be part of a public ResourceLoader module, and thus can have their source code exposed through load.php. Turn off $wgUseSiteJs and $wgUseSiteCss to disable this functionality.
匿名利用者があなたのページを閲覧できなければ、検索エンジンも閲覧できません。 あなたのサイトはGoogleにインデックスされません。

この行をLocalSettings.phpファイルに追加してください。

# Disable reading by anonymous users
$wgGroupPermissions['*']['read'] = false;

# But allow them to read e.g., these pages:
$wgWhitelistRead = [ "Main Page", "Help:Contents" ];

$wgWhitelistRead の設定では、利用者はメイン ページを閲覧できます。 ページ名が複数の単語からなる場合は、アンダースコア"_ "ではなく、スペース" "で区切ってください。

In addition to the main page of such a private site, you could give access to the Recentchanges page (if you think that its content isn't private) for feed readers by adding Special:Recentchanges to $wgWhitelistRead .

何らかの理由でサイドバーやメインページ、ログイン画面まで保護する必要がある場合は、.htpasswdまたはそれに相当するような上位の認証を使用することをお勧めします。

  警告: MediaWiki 1.32 ~ 1.35.4、1.36.2、1.37.0 には、特権昇格と任意のページの編集や任意の JavaScript の実行を可能にする、セキュリティ上の問題が含まれています。 これらのバージョンのいずれかを使用していて、新しいバージョンにアップグレードできない場合は、2021-12 セキュリティについて/FAQ を参照して回避策を講じてください。
Although Special:Listusers won't be available, it can be determined if a username is correct from Userlogin errors. You may want to give a common text for MediaWiki:wrongpassword and MediaWiki:nosuchusershort.

いくつかの特定のページの閲覧制限

管理者以外に閲覧をさせないためには、単にページを削除 します。 管理者にも閲覧させない場合は、さらに永久的に削除するためManual:版指定削除 を使います。 特定ページの記述内容を完全に破壊するには、データベースから手動で削除できます。 いずれの場合も、この状態のページは編集ができず、ほとんどの目的に使おうにも、ページが存在していません。

例えば、ほとんどのフォーラム ソフトで可能なように、あるページがある利用者には正常に動作するが、他の利用者には閲覧できないようにすることは、非常に異なる問題です。 MediaWikiは、2つの基本的なアクセスモードを想定して設計されています。

  1. Everyone can view every single page on the wiki (with the possible exception of a few special pages).

Wikipediaとその姉妹プロジェクトで使われているモードです。

  1. 匿名利用者は, メイン ページとログイン ページのみを閲覧でき, どのページも編集できません。 これは、技術的な実装としては、基本的に上記と同じであり(ページビューごとに追加でチェックするだけ)、そのために存在するものです。 これは、ウィキメディアのさまざまな委員会で使われているような、ある種の私的なウィキで使われている運営方法です。

もし、それとは異なる閲覧権限を持つつもりであれば、MediaWikiはあなたの使い方のために設計されたものではありません。 (T3924 を参照してください。) データは必ずしも名前空間やページ名などで明確に区分されているわけではなく、そうしようと思えば塞がなければならない漏れがたくさんあります(サンプルはsecurity issues with authorization extensions 参照)。 他のWikiソフトの方が目的に合っているかもしれません。 警告が出ます。 どうしてもMediaWikiを使いたい場合、基本的に3つの可能性があります。

  1. wikiをプライベートに設定し、公開される特定のページをLocalSetting.phpファイルの$wgWhitelistRead でホワイトリストに登録します。 上記の項をご参照ください。
  1. Set up separate wikis with a shared user database , configure one as viewable and one as unviewable (see above), and make interwiki links between them.
  1. サードパーティのハックや拡張機能をインストールする。 ソフトウェアをアップグレードするたびに再適用する必要があり、新しいセキュリティ修正プログラムやMediaWikiのアップグレードがリリースされても、すぐに更新されない可能性があります。 Third-party hacks are, of course, not supported by MediaWiki developers, and if you're having problems you shouldn't ask on MediaWiki-l, #mediawiki, or other official support channels. カテゴリ:ページ固有の利用者権限の拡張機能 には、数々のハックが掲載されています。 そのいずれかを使用する予定がある場合は、security issues with authorization extensions についてお読みください。

書き出しの制限

関連項目: Manual:Special:Export のパラメーター

r19935以降、読めないページの内容を書き出すことはできません。

ログインのリンクをすべてのページから除去

利用者が Special:SpecialPages > Special:UserLogin にアクセスしてログインできるように、すべてのページの右上にあるログイン/アカウント作成リンクを削除できます。 LocalSettings.php で以下を使用します (MediaWiki 1.16でテスト済み)。

function NoLoginLinkOnMainPage( &$personal_urls ){
    unset( $personal_urls['login'] );
    unset( $personal_urls['anonlogin'] );
    return true;
}
$wgHooks['PersonalUrls'][]='NoLoginLinkOnMainPage';

アカウントの削除

If you want to completely remove access to a user, e.g. on a simple private wiki, it's not possible to simply delete the account (unless no edits have been made ); you can block it, but the user will still be able to read pages. However, using User Merge and Delete extension you can merge the account in another one and delete the former; the original account will then "disappear". If you want to preserve history readability (i.e., to have edits from the user to be still shown under their name), you can create a new account e.g. with username "OriginalUserName (deactivated)" and then merge "OriginalUserName" into the former, or even use Renameuser extension to rename "OriginalUserName" into "AnotherUserName", then create an account under "OriginalUserName" and merge "AnotherUserName" into it: in this manner, "OriginalUserName" will be completely "usurped" (if you've set a non-null password).

MediaWiki 1.16.0 以降は $wgBlockDisablesLogin を true に設定してブロック済み利用者のアクセスと表示を予防できるようになりました。

その他の制限事項

ページ編集をそのページの作者にのみ認める場合、あるいは編集履歴の秘匿ほか、その他の制限をかけたい場合があるとします。 MediaWiki の標準版では、これらを実現する機能はありません。 さらにきめ細かい権限設定が必要な場合は、#関連項目節にあるリンク先から、他のウィキパッケージでこの機能を備えたもの、あるいは MediaWiki を本来の設計趣旨とは外れるけれども、使える形に変えるハッキングを参照できます。

関連項目

興味があれば、ほかにいくつか関連のマニュアルあるいはヘルプページがあります。

他のウィキソフトウェアのほうがMediaWikiよりもきめの細かいアクセス制限を支援する場合があります。

  • MoinMoin
  • TWiki
  • TikiWiki - 機能や権限レベルでアクセス制限の設定が完全にできます。

もっとアクセス制限を向上させたいけれど MediaWiki で実現したい場合、この拡張機能一覧とハッキングでソフトウェアの標準ではできない制限が可能です。 ただしハッキングが古すぎる可能性もあります(バージョン情報を要確認。) 第三者のハッキングでなにか障害が出ても、MediaWiki の公式サポートで質問はできません。