手册:阻止访问
有关自定义用户权限的帮助,请参阅手册:用户权限 。 此页面包含用于限制访问的示例。
有关如何编辑 LocalSettings.php
的信息,请查看 Manual:LocalSettings.php 。
简单的私人维基
对于“自己和批准他人的私人维基”的常见用例,您需要:
# 阻止匿名用户阅读页面
$wgGroupPermissions['*']['read'] = false;
# 禁用匿名编辑
$wgGroupPermissions['*']['edit'] = false;
# 阻止管理员外其他人注册新用户
$wgGroupPermissions['*']['createaccount'] = false;
根据您安装的扩展程序,您可能希望将更多页面列入白名单。 例如,如果您使用Extension:ConfirmAccount 扩展,则可能需要将Special:RequestAccount列入白名单。 如果您的维基的内容语言不是英语,则可能必须使用相关特殊页面的翻译名称。
限制账户创建
要限制帐户创建,您需要在MediaWiki安装的根路径中编辑LocalSettings.php。
# 阻止管理员外其他人注册新用户
$wgGroupPermissions['*']['createaccount'] = false;
- 当以管理员身份登录时,前往Special:Userlogin。
- 点击“创建帐户”链接以转到帐户创建表单。
- 输入用户名和电子邮件地址,然后单击“通过电子邮件”按钮。 请注意,您需要$wgEnableEmail=true ,否则系统管理员必须输入一个密码并将其发送给用户。
- 该帐户将使用随机密码创建,然后通过电子邮件发送到指定地址(与“忘记密码”功能一样)。 首次登录时,将要求用户更改密码;当他这样做时,他的电子邮件地址也将被标记为已确认。
- 当您单击“创建帐户”按钮时,您必须手动向用户发送其密码。 如果您设置了$wgMinimalPasswordLength=0 (默认配置最高版本为1.15)并且您将密码字段留空,则会通过电子邮件向用户发送电子邮件地址确认请求,但无法访问Special:Confirmemail 来执行确认。 相反,用户将收到错误(除非您已将其添加到$wgWhitelistRead ,用户将能够使用空白密码登录然后确认电子邮件,但他们的密码将不会被重置(必须手动重置))。
编辑非用户尝试登录时显示的文本可能是适当的。 以管理员身份登录时,可以在MediaWiki:Nosuchuser完成此操作。 使用纯文本而不使用任何特殊格式,因为忽略格式并且文本是字面呈现的。 (可能已经改变,见bug 12952)。
您还可以通过编辑页面MediaWiki:Createaccount-text来修改发送给新用户的电子邮件的内容。
防止管理员创建帐户:
# 阻止任何人注册新用户
$wgGroupPermissions['*']['createaccount'] = false;
$wgGroupPermissions['sysop']['createaccount'] = false;
要在登录表单上添加消息,请修改MediaWiki:Loginprompt。
限制编辑
限制所有页面的编辑
用户仍然可以阅读具有这些修改的页面,并且可以使用Special:Export/Article name或其他方法查看源代码。 参见bug 1859。
参见Help:User rights 和手册:$wgGroupPermissions 。 如果您使用Extension:AbuseFilter ,任何维基管理员也可以实施各种限制。
有关如何保护所有页面免受特定类别用户编辑(而非查看)的一些示例:
限制匿名用户编辑
要求用户在编辑之前进行注册。
$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 变量保护整个名字空间。 示例:
# 仅允许自动确认用户编辑Project命名空间
$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' );
# 仅允许管理员编辑“Policy”命名空间
$wgGroupPermissions['sysop']['editpolicy'] = true;
$wgNamespaceProtection[NS_POLICY] = array( 'editpolicy' );
请注意,在最后一种情况下,假设存在自定义命名空间,NS_POLICY
是一个等于命名空间编号的已定义常量。
有关MediaWiki核心命名空间的列表,请参见手册:使用自定义命名空间 和Manual:命名空间常量 。
限制某些特定页面的编辑
使用保护 功能。 默认情况下,任何管理员都可以保护页面,因此只有其他管理员可以编辑它们。 在1.9及更高版本中,默认情况下它们也可以保护页面,因此只有“自动确认”的用户(帐户时间超过配置的时间段)才能对其进行编辑。 这不需要编辑配置文件。
如果要将编辑限制为具有特定权限的组,请编辑$wgRestrictionLevels 。 要防止编辑和移动以外的操作,请使用$wgRestrictionTypes 。
限制所有页面的编辑
要对所有页面的编辑施加全面限制,但允许一些(例如沙箱,加入请求页面等)可编辑,您可以使用EditSubpages 扩展。 这可能不太常见,但您也可以使用上面提到的限制编辑某些特定页面方法,所有名称空间都受到保护,并且每个人都可以编辑一个特殊的文件,其中包含您想要的所有页面编辑。
限制某些IP地址范围的编辑
学校和其他机构可能希望阻止指定的IP地址范围以外的编辑。 为此,请参阅手册:封禁与解除封禁 。 目前执行此操作的唯一方法而不修改代码是为了Special:Blockip并系统地rangeblock 每个你不想要的地址范围能够编辑。 这适用于所有未来版本的MediaWiki。 它不会在每个名字空间的基础上工作。
限制特定用户的编辑
使用用户封禁 功能剥夺用户的所有编辑权限。 MediaWiki并不能直接向单独用户授予权利;相反,权限始终给予用户组。 除了更改用户组之外,核心软件无法更改特定用户的权限以限制或允许编辑特定页面。
限制所有页面的创建
# 匿名用户不能创建页面
$wgGroupPermissions['*']['createpage'] = false;
# 持有四天或四天以上账户的用户才能创建页面
# 需要MW 1.6或更高。
$wgGroupPermissions['*' ]['createpage'] = false;
$wgGroupPermissions['user' ]['createpage'] = false;
$wgGroupPermissions['autoconfirmed']['createpage'] = true;
限制在某些名字空间中创建页面
创建讨论页面(createtalk)和创建非讨论页面(createpage)有单独的权利。 如果您需要更精细的每命名空间控件,则无法在核心MediaWiki中使用,并且需要扩展名,例如扩展:Lockdown 。
限制对上传文件的访问权限
如果您已启用上传文件的功能,则这些文件将由底层Web服务器直接提供。 因此,基于帐户的文件访问权限默认情况下不受限制。
服务器配置中上传文件的访问限制示例
如果将敏感文件上传到可通过互联网访问的维基,您可能希望添加对访问这些文件的限制。 在Apache上,如果您的本地网络是10.1.2.*,则可以使用以下命令将服务文件限制为本地地址:
<Location /mediawiki/images> Order deny,allow Allow from 10.1.2.3 Deny from all </Location>
限制查看
限制所有页面的查看
将这一行添加到你的LocalSettings.php中:
# 阻止匿名用户阅读页面
$wgGroupPermissions['*']['read'] = false;
# 但允许他们阅读下列页面:
$wgWhitelistRead = [ "Main Page", "Help:Contents" ];
$wgWhitelistRead
设置允许用户查看主页面。
如果页面名称包含多个单词,则在它们之间使用空格“ ”,而不是下划线“_”。
除了这样一个私有站点的主页之外,您还可以通过将Special:Recentchanges添加到$wgWhitelistRead
来为Feed阅读器提供对最近更改页面的访问权限(如果您认为其内容不是私有的)。
如果您因任何原因需要保护侧栏,主页或登录屏幕,建议您使用更高级别的身份验证,例如.htpasswd或同等身份。
限制特定页面的查看
如果您需要按页面或部分页面的访问控制,建议您安装适当的内容管理包。 MediaWiki的最初目的并不是提供按页面的访问限制,并且几乎所有添加这一功能的措施或补丁都或多或少存在缺陷,这可能导致暴露机密数据。 对于任何数据泄露,我们不承担任何责任。
更多详情请参见授权扩展的安全问题 |
为了防止除管理员之外的任何人查看页面,它可以被删除 。 为了防止管理员查看它,可以使用手册:修订版本删除 永久删除它。 要完全销毁页面文本,可以手动从数据库中删除它。 在任何情况下,在此状态下都无法编辑页面,并且大多数情况下不再存在。
让一个页面对一些用户正常行为但对其他用户不可见,例如在大多数论坛软件中,这是一个非常不同的事情。 MediaWiki专为两种基本访问模式而设计:
- 每个人都可以查看wiki上的每个页面(可能除了一些特殊页面)。 这是维基百科及其姊妹项目使用的模式。
- 匿名用户只能查看主页和登录页面,不能编辑任何页面。 这在技术实现方面基本上与上述相同(只是对每个页面视图进行额外检查),这就是它存在的原因。 这是某些私人维基使用的操作模式,例如各种维基媒体委员会使用的维基。
如果您打算拥有不同的视图权限,则MediaWiki不适合您的使用。 (参见T3924。) 数据库不一定通过命名空间,页面名称或其他标准明确描述,如果您想要这样做,则必须插入大量泄漏(请参阅样本的security issues with authorization extensions )。 其他wiki软件可能更符合您的目的。 以上是对您的忠告。 如果必须使用MediaWiki,则有三种基本可能性:
- 将您的wiki设置为私有和白名单特定页面,这些页面将在LocalSetting.php文件中以
$wgWhitelistRead
公开。 请参阅上面的章节。 - 使用共享用户数据库 设置单独的wiki,将一个配置为可查看,一个配置为unviewable(见上),并在它们之间配置制造跨维基链接 。
- 安装第三方文件或扩展程序。 每次升级软件时都必须重新应用它,并且在发布MediaWiki的新安全修复程序或升级时可能不会立即更新。 当然,MediaWiki开发人员不支持第三方黑客攻击,如果您遇到问题,则不应该询问MediaWiki-l、#mediawiki或其他官方支持渠道。 一些黑客以Category:Page specific user rights extensions 列出。 如果您打算使用其中一个,请参阅security issues with authorization extensions 。
限制导出
参见: Manual:Parameters to 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';
移除账户
如果您想完全删除对用户的访问权限,例如 在简单的私人维基上,不可能简单地删除该帐户(除非没有编辑 ,你可以封禁 ,但用户仍然可以能够 来阅读页面。 但是,使用User Merge and Delete 扩展名,您可以将该帐户合并到另一个帐户中并删除前者,然后原始帐户将“消失”。 如果您想保留历史记录可读性(即,要让用户的编辑仍以他的名字显示),您可以创建一个新帐户,例如使用用户名Original User Name (deactivated)然后将Original User Name合并到前者中,或者甚至使用Renameuser 扩展名将Original User Name重命名为Another User Name,然后在Original User Name下创建一个帐户并将Another User Name合并到其中,这样,Original User Name将被完全“篡改”(如果您设置了非空密码)。
从MediaWiki 1.16.0开始,可以将$wgBlockDisablesLogin 设置为true以防止访问和读取被阻止的用户。
其他限制
您可能希望页面仅由其创建者编辑,或禁止查看历史记录或任何其他任何内容。 MediaWiki的未经修改版本中这些功能不可用。 如果您需要更细粒度的权限,请参阅参见部分以获取为此设计的其他wiki包的链接,以及试图将MediaWiki转换为其未设计的内容的黑客攻击,无论如何可能会工作。
参见
有一些您可能感兴趣的相关手册/帮助页面:
- Manual:LocalSettings.php
- 手册:$wgGroupPermissions
- 手册:$wgRestrictionTypes
- 手册:$wgRestrictionLevels
- 手册:$wgNamespaceProtection
- 手册:$wgEmailConfirmToEdit
- Manual:$wgNonincludableNamespaces
- 手册:用户权限
- Help:用户权限和用户组
其他维基软件可能比MediaWiki更好地支持细粒度的访问控制:
如果您想要更好的访问控制但想要使用MediaWiki,这是一个扩展列表,并且允许在软件中实现不可能的限制。 其中的修改可能已经过时(请查看他们的版本)。 如果经过第三方修改的文件出现问题,请不要在官方MediaWiki支持渠道中询问。