Main
web. To create a new group, visit WikiGroups. You will find a "Create a new group" link at the top which reveals a form to create a new group. Enter the name of the new group ending in Group
into the "Group Name" form field and the initial members in the "Members" field. This creates a new group topic. (The default User Mapper shipped with Foswiki requires that groups end with the word Group. If your site uses an alternate mapper, it might not have that requirement.)
By default any member of a group has access rights to both adding and removing users from the group through the nice user interface. If you need to limit this access further, change the ALLOWTOPICCHANGE setting through "More Topic Action" -> "Edit topic preference settings".
The ALLOWTOPICCHANGE
setting defines who is allowed to change the group topic; it is a comma delimited list of users and groups. You typically want to restrict that to the members of the group itself, so it should contain the name of the topic. This prevents users not in the group from editing the topic to give themselves or others access. For example, for the KasabianGroup topic write: Set ALLOWTOPICCHANGE = Main.KasabianGroup
ALLOWTOPICVIEW
on the group. For example: Set ALLOWTOPICVIEW = Main.SecretGroup
GroupView
. This alters the way the topic is presented to include a nice user interface for adding and removing users.
{SuperAdminGroup}
setting in configure. The default name of this group is the AdminGroup
. The system administrator may have chosen a different name for this group if your local Foswiki uses an alternate group mapping manager, but for simplicity we will use the default name AdminGroup in the rest of this topic.
You can create new administrators simply by adding them to the AdminGroup topic. using the WikiGroups API For example,
A member of the Super Admin Group has unrestricted access throughout the wiki, so only trusted staff should be added to this group.
ALLOWTOPICCHANGE
setting for the AdminGroup. Those users will then be able to add and remove themselves from the AdminGroup when they need admin rights, rather than running as admin all the time.
{AuthScripts}
setting in configure -> Security and Authentication -> Login;
{FeatureAccess}
settings in configure -> Security and Authentication -> Access Control; and
ALLOW
or DENY
, context is TOPIC
, WEB
, or ROOT
, and mode is VIEW
, CHANGE
, or RENAME
. For example, the preference ALLOWWEBCHANGE
lists who is allowed to change
topics in the current web. (Some extensions add additional modes. Ex. ALLOWTOPICCOMMENT.)
{FeatureAccess}
settings: rev=
URL parameter.
raw=
topic text.
Set DENYWEBVIEW = < comma-delimited list of users and groups >
Set ALLOWWEBVIEW = < comma-delimited list of users and groups >
Set DENYWEBCHANGE = < comma-delimited list of users and groups >
Set ALLOWWEBCHANGE = < comma-delimited list of users and groups >
Set DENYWEBRENAME = < comma-delimited list of users and groups >
Set ALLOWWEBRENAME = < comma-delimited list of users and groups >
{FeatureAccess}{AllowRaw}
is set to acl
in configure, then the following rules are also active: Set ALLOWWEBRAW = < comma-delimited list of users and groups >
Set DENYWEBRAW = < comma-delimited list of users and groups >
{FeatureAccess}{AllowHistory}
is set to acl
in configure, then the following rules are also active: Set ALLOWWEBHISTORY = < comma-delimited list of users and groups >
Set DENYWEBHISTORY = < comma-delimited list of users and groups >
ALLOWWEBVIEW
set, this will also apply to the subweb. Also note that you will need to ensure that the parent web's FINALPREFERENCES
does not include the access control settings listed above. Otherwise you will not be able override the parent web's access control settings in sub-webs.
Creation and renaming of sub-webs is controlled by the WEBCHANGE setting on the parent web (or ROOTCHANGE for root webs). Renaming is additionally restricted by the setting of WEBRENAME in the web itself.
Set DENYTOPICVIEW = < comma-delimited list of users and groups >
Set ALLOWTOPICVIEW = < comma-delimited list of users and groups >
Set DENYTOPICCHANGE = < comma-delimited list of users and groups >
Set ALLOWTOPICCHANGE = < comma-delimited list of users and groups >
Set DENYTOPICRENAME = < comma-delimited list of users and groups >
Set ALLOWTOPICRENAME = < comma-delimited list of users and groups >
{FeatureAccess}{AllowRaw}
is set to acl
in configure, then the following rules are also active: Set ALLOWTOPICRAW = < comma-delimited list of users and groups >
Set DENYTOPICRAW = < comma-delimited list of users and groups >
{FeatureAccess}{AllowHistory}
is set to acl
in configure, then the following rules are also active: Set ALLOWTOPICHISTORY = < comma-delimited list of users and groups >
Set DENYTOPICHISTORY = < comma-delimited list of users and groups >
{AccessControlACL}{EnableDeprecatedEmptyDeny}
in the Foswiki configuration then the old behaviour will still work and an empty DENY setting means do not deny anyone the right to access, in other words allow all access.
Click this link to see more documentation on the prior behaviour. *
wildcards in the ALLOW and DENY rules.
The previous documentation said: Set ALLOWTOPICVIEW =
Set DENYTOPICVIEW =
Before Foswiki 2.0 | Foswiki 2.0 and newer | |
---|---|---|
Allow ALL users | Set DENY to an empty string | Set ALLOW to * |
Allow All logged-in users | Set DENY to WikiGuest Leave ALLOW un-set |
<no change from before> |
Deny all access | Set ALLOW to NobodyGroup | Set ALLOW to NobodyGroup -or- Set DENY to * |
Allow selected users | Set ALLOW to desired users/groups | Set ALLOW to desired users/groups |
Deny selected users | Set DENY to desired users/groups | Set DENY to desired users/groups |
*
is set in a rule, it says that any user identity will match that rule. Setting ALLOW
to *
says "Allow ALL", setting * to DENY says "Deny ALL".
For example if you want completely open access to a topic for logged in users then use the following rules: Set ALLOWTOPICVIEW = *
Set DENYTOPICVIEW = WikiGuest
mod_rewrite
module, and configure your webserver to redirect accesses to attachments to the Foswiki viewfile
script. For example,
ScriptAlias /foswiki/bin/ /filesystem/path/to/bin/ Alias /foswiki/pub/ /filesystem/path/to/pub/ RewriteEngine on RewriteCond %{REQUEST_URI} !^/+foswiki/+pub/+System/+.+ RewriteRule ^/+foswiki/+pub/+([^/]+)((/+([^/]+))+)/+(.+) /foswiki/bin/viewfile/$1/$2?filename=$5 [L,PT]That way all the controls that apply to the topic also apply to attachments to the topic. Other types of web servers have similar support.
viewfile
script. The Foswiki:Support.ApacheConfigGenerator has some more extensive examples of protecting user attachments, but allowing direct access to trivial graphics attached to System topics.Set DENYROOTCHANGE = < comma-delimited list of users and groups >
Set ALLOWROOTCHANGE = < comma-delimited list of users and groups >
ROOTCHANGE
access to rename an existing top-level web. You just need WEBCHANGE
in the web itself.
rdiff
scriptNOSEARCHALL
setting in WebPreferences. It does the following: all webs
search option from accessing the web
* Set NOSEARCHALL = <noautolink><tt> on</verbatim></tt></noautolink> This setup can be useful to hide a new web until content its ready for deployment, or reduce clutter in the !WebLeftBar and default search results when restricted access is not desired. <div class='foswikiHelp'>%T% Setting ==NOSEARCHALL== to __any__ value other than the empty string will hide a web. Setting ==NOSEARCHALL = off== will have the same effect as setting it to ==on== </div> <div class='foswikiHelp'>%X% Obfuscating a web without setting view access control is *very* insecure, as anyone who knows the URL can access the web, and explicit searches naming that web will also work. For security purposes it is better to use the ALLOW or DENY VIEW settings in the WebPreferences topic. =%<nop>SEARCH%= and =%<nop>WEBLIST%= will not show any results for webs that the current user does not have permission to view.</div> ---+++ Restrict Access to a whole Foswiki site For a firewalled Foswiki, e.g. an intranet wiki or extranet wiki, you want to allow only invited people to access your Foswiki. <div class='foswikiHelp'>%H% With this configuration, someone with access to the site needs to register new users. ResetPassword will also have to be done by administrators.</div> ---++++ When using Apache Login [[UserAuthentication#ApacheLogin][User authentication with ApacheLogin]] is enabled on your site. To reqire login for *all* scripts: * lock down access to the whole =bin= and =pub= directories to all but valid users. In the Apache =.htaccess= file or the appropriate =.conf= file, replace the =<FilesMatch "(attach|edit|...= section with this: <verbatim> <FilesMatch ".*"> require valid-user </FilesMatch></verbatim> If needed, you can further restrict access to selected webs with ALLOWWEBVIEW and other access control settings. ---++++ When using Template Login [[UserAuthentication#TemplateLogin][User authentication with TemplateLogin]] is enabled on your site. To require login for *all* scripts: * Add all scripts in the =foswiki/bin= directory (except for =login=, =logon=) to the list of ={AuthScripts}= in [[%SCRIPTURL{"configure"}%][configure]], =Security And Authentication= tab, =Login= sub-tab, For a default Foswiki installation: * Default (open) site: <verbatim> {AuthScripts} = 'attach,compareauth,configure,edit,manage,previewauth,rdiffauth,rename,restauth,save,statistics,upload,viewauth,viewfileauth';</verbatim> * Restricted (closed) site: <verbatim> {AuthScripts} = 'attach,changes,compare,compareauth,configure,edit,jsonrpc,manage,oops,preview,previewauth,rdiff,rdiffauth,register,rename,resetpasswd,rest,restauth,save,search,statistics,upload,view,viewauth,viewfile,viewfileauth</verbatim> <div class='foswikiHelp'>%X% If you install extensions that add scripts, you must also remember to add the new scripts to this list or the new scripts will not be protected.</div> ---+++ Authenticate all webs and restrict selected webs Use the following setup to authenticate users for topic viewing in all webs and to restrict access to selected webs. Requires UserAuthentication to be enabled. 1 The simple way is to add this to =%WEBPREFSTOPIC%= in all webs. * ==Set <nop>DENYWEBVIEW = !WikiGuest== 1 *Restrict* view access to selected users and groups. Set one or both of these settings in its %WEBPREFSTOPIC% topic: * ==Set <nop>ALLOWWEBVIEW = < list of users and groups >== * *Note:* =DENYWEBVIEW= is evaluated before =ALLOWWEBVIEW=. Access is denied if the authenticated person is in the =DENYWEBVIEW= list, or not in the =ALLOWWEBVIEW= list. Access is granted if =DENYWEBVIEW= and =ALLOWWEBVIEW= are not defined. In rare cases it may be required to authenticate the view script. This can in some cases have a dramatic performance hit because the webserver must re-authenticate for every page view. 1 Set =require valid-user= on your =view= script in .htaccess or the appropriate Apache .conf file. This looks like: =FilesMatch "(attach|edit|manage|rename|save|view|upload|mail|logon|.*auth).*"= (normally =view= is not in that list). ---+++ Authenticate and restrict selected webs only Use the following setup to provide unrestricted viewing access to open webs, with authentication only on selected webs. Requires UserAuthentication to be enabled. 1 *Restrict* view access to selected users and groups. Set one or both of these settings in its %WEBPREFSTOPIC% topic: * ==Set <nop>DENYWEBVIEW = < list of users and groups >== * ==Set <nop>ALLOWWEBVIEW = < list of users and groups >== * *Note:* =DENYWEBVIEW= is evaluated before =ALLOWWEBVIEW=. Access is denied if the authenticated person is in the =DENYWEBVIEW= list, or not in the =ALLOWWEBVIEW= list. Access is granted if =DENYWEBVIEW= and =ALLOWWEBVIEW= are not defined. ---+++ Authenticate and restrict most webs, Allow access to selected topics Use the following setup is used to "lock down" the Wiki to logged in users, while still allowing UserRegistration, ResetPassword, etc. to remain operational. Requires UserAuthentication to be enabled. 1 *Restrict* view access by the guest user, and then selectively unlock topics required for normal operation<br /> * <b>Set <nop>DENYWEBVIEW = !WikiGuest </b>Set this in each %WEBPREFSTOPIC% topic: * *Set <nop>ALLOWTOPICVIEW = ** Set this in each topic that needs to be unlocked for unauthenticated users. * *Note:* ALLOWTOPICVIEW is evaluated before DENYWEBVIEW. Access is permitted if the authenticated person (or wildcard) is in the ALLOWTOPICVIEW list. The list of topics that need to be unlocked in the %SYSTEMWEB% web for login, password reset, registration, and guest access when the %SYSTEMWEB% has been locked down is rather extensive. ---+++ Control access to topic History and Raw text. Foswiki 2.0 now restricts the guest user from access to topic history and raw topic text. This is configurable. See: [[%SCRIPTURLPATH{configure}][configure]] =Security and Authentication > Access Control > {FeatureAccess}{AllowRaw}= and ={FeatureAccess}{AllowHistory}= (They are expert level settings, so the "Show expert options" button in the lower left corner must be pressed.) Each of these setting has 3 choices: * =authenticated= - This is the default. Anyone who is logged in has access * =acl= - The feature can be controlled per web or topic using ALLOW or DENY ACLs. * =all= - Open access like on Foswiki 1.x When set to =acl=, then standard DENY and ALLOW processing is performed, RAW and HISTORY are added to the VIEW, CHANGE and RENAME access already described here. If you want to use ACL level controls, but also want WikiGuest blocked by default, you need to edit every WebPreferences topic and set the following: * ==Set <nop>DENYWEBRAW = %USERSWEB%.WikiGuest== * ==Set <nop>DENYWEBHISTORY = %USERSWEB%.WikiGuest== Note that these ACL controls block access to the =raw== and =rev== url parameters. They are not enforced internaly in the "Store". Wiki applications still can access prior revisions, and anyone with CHANGE authority can edit the raw topic text. ---+++ Show control settings You can list the access controls affecting a topic using the [[VarSHOWPREFERENCE][%%NOP%SHOWPREFERENCE{}%]] macro in the topic, thus: <verbatim class='tml'> %SHOWPREFERENCE{"DENYWEBVIEW,ALLOWWEBVIEW,DENYWEBCHANGE,ALLOWWEBCHANGE,DENYWEBRENAME,ALLOWWEBRENAME"}%</verbatim> For this topic, this displays: %SHOWPREFERENCE{"DENYWEBVIEW,ALLOWWEBVIEW,DENYWEBCHANGE,ALLOWWEBCHANGE,DENYWEBRENAME,ALLOWWEBRENAME"}% ---+++ Hide control settings To hide access control settings from normal browser viewing, you can put them into the _topic [[%SYSTEMWEB%.PreferenceSettings][preference settings]]_ by clicking the link =Edit topic preference settings= under =More topic actions= menu. Preferences set in this manner are not visible in the topic text, but take effect nevertheless. Access control settings added as topic preference settings are stored in the topic meta data and they override settings defined in the topic text. Alternatively, place them in HTML comment markers, but this exposes the access setting during ordinary editing. <pre class='tml'><!-- <br /> * Set DENYTOPICCHANGE = %USERSWEB%.SomeGroup <br /> --> </pre> ---+++ Controlling access to the %SYSTEMWEB% web. Some search engines penalize sites for publishing "duplicate information". The Wiki documentation in the %SYSTEMWEB% web falls into that category. Foswiki now has "ALLOWTOPICVIEW = *" settings on critical %SYSTEMWEB% topics that require guest access, such as ResetPassword, UserRegistration, and other template topics. You should be able to restrict guest access to the %SYSTEMWEB% and retain good operation for guests. %STOPINCLUDE% --- *Related Topics:* AdminDocumentationCategory, UserAuthentication