«Докувики», как и большинство других вики, по умолчанию очень открыто. Каждому позволено создавать, редактировать и удалять статьи. Однако, иногда имеет смысл ограничить доступ к определённым или всем статьям. Именно в этом случае «выходят на сцену» списки доступа (ACL). Данная статья делает обзор как ACL функционируют в «ДокуВики» и как их конфигурировать.
Предупреждение: Функционал ACL включён в «ДокуВики» достаточно давно и должен быть довольно стабилен. Однако, если вас особенно беспокоит риск того, что неавторизованные пользователи получат доступ к информации вашей вики, вы никогда не должны оставлять её на компьютерах, доступ к которым разрешён из открытого интернета…
ACL могут быть включены во время работы установщика и тогда будет установлена стандартная начальная политика ACL.
Для ручного включения ACL установите опцию useacl и скопируйте файлы conf/acl.auth.php.dist
и conf/users.auth.php.dist
в conf/acl.auth.php
и conf/users.auth.php
соответственно.
Пример минимального файла conf/users.auth.php
для пользователя admin
с паролем admin
. Если вы используете его, обязательно измените пароль после этого.
# Логин:Хэш пароля:Настоящее имя:email:Группы, через зяпятую admin:$2y$10$P5YH8uIM2uAE9snRq32yAuHMb4/XAzksFd5Cakqqtsw9BWeSsyLZq:admin:admin@admin.com:admin,user
Есть ещё несколько опций конфигурации и функциональных свойств, относящихся к ограничениям прав пользователей и настройкам ACL. Пожалуйста, обратитесь к следующим статьям за более детальной информацией:
Ограничения доступа могут быть привязаны к статьям и пространствам имён.
Есть семь уровней доступа: никаких (none), на чтение (read), изменение (edit), создание (create), загрузку (upload), удаление (delete) и администрирование (admin).
У «чтения» самый низкий уровень доступа, у «удаления» — самый высокий. Если разрешён один уровень доступа (например, создание), то и все более низкие (чтение и изменение) так же разрешены. Следует отметить, что «создание», «загрузка» и «удаление» относятся только к пространствам имён.
Правила, установленные для пространств имён, применяются и к пространствам имён медиафайлов точно также, как и к пространствам имён статей.
Когда система «ДокуВики» определяет права конкретного пользователя для доступа к конкретной статье, она выбирает из всего списка правил одно, согласно следующей процедуре:
<пользователь или группа>
, т. е., либо имя пользователя совпадает с указанным, либо, если указана группа, то пользователь принадлежит этой группе. Остальные правила «выбрасываются» из рассмотрения.<namespace:page>
, это мы называем specific matching (более специфичное совпадение).<namespace:page>
в одинаковой мере, то выбирается правило с наибольшим <уровнем доступа>
.Пользователи входят в группы, к которым они были приписаны менеджером пользователей (или бекэндом аутентификации). Однако есть две специальные группы:
Представление групп внутри системы и в менеджере ACL отличается тем, что перед именем группы ставится символ «@».
Наиболее простой способ добавить новое или отредактировать существующие правила, это использовать менеджер ACL, доступный из панели администратора. Доступно детальное описание этого интерфейса.
Обычно необходимо совершить три шага для добавления нового правила ACL:
Существующие правила могут быть изменены или удалены в таблице, приведенной внизу окна менеджера ACL.
В этом разделе мы объясним как работают правила доступа, используя фиктивный пример настроек, которые в менеджере ACL выглядят следующим образом:
Рассмотрим каждую из строк:
devel
ограничен. Всем запрещено делать что-либо.devel
не хотят, чтобы их босс видел статью funstuff
— помните, что правило, точно соответствующее статье, «перебивает» правило, относящееся к пространству имён.devel:marketing
.marketing
. Всем членам группы marketing
позволено загружать сюда файлы Давайте взглянем на второй пример, чтобы лучше понять specific matching (более специфичное совпадение):
На этот раз мы разберём, какие правила выберутся для разных пользователей при их попытке получить права к статье private:bobspage
.
<пользователь или группа>
выполняется в трёх правилах: №1, №2 и №4.<namespace:page>
лучше всего (другими словами: более конкретно) выполняется в правиле №4.<private:bobspage>
определяется 0, т. е. у abby нет никакого доступа к этой статье.<пользователь или группа>
выполняется в четырех правилах: №1, №2, №4 и №6.<namespace:page>
лучше всего выполняется в правиле №6. (Скажу больше, тут <namespace:page>
точно совпадет со статьей)<пользователь или группа>
выполняется в двух правилах: № 1 и № 4.<namespace:page>
лучше всего выполняется в правиле № 4.<пользователь или группа>
выполняется в пяти правилах: с №1 по №5.<namespace:page>
лучше всего выполняется в двух правилах №4 и №5, но в правиле №5 <уровнем доступа>
выше.Заметим следующее: могло бы показаться, что правило №5 дублирует правило №3, но без пятого правила члены группы staff не получили бы доступ к пространству имён private, т. к. этому препятствовало бы правило №4.
Ограничения доступа хранятся в файле conf/acl.auth.php
, который должен быть доступен для записи веб-серверу, если вы хотите использовать интерфейс администрирования ACL.
Не рекомендуется вручную править этот файл, вместо этого используйте интерфейс администратора.
Пустые строки и комментарии, начинающиеся с символа «#», игнорируются.
Каждая строка содержит три поля разделенных пробелами:
Существует 7 уровней доступа. Они представляются целыми числами. Более высокий уровень включает в себя все более низкие. Если вы можете редактировать, то вы также автоматически можете читать. Есть уровень доступа admin (соответствует числу 255), который никогда не должен использоваться в файле conf/acl.auth.php
. Он используется только внутри системы при сравнении с опцией superuser.
Имя | Уровень | Применимо к… | Права доступа | Константа в исходниках «Докувики» |
---|---|---|---|---|
none | 0 | статьи, простр. имён | нет доступа — полный запрет | AUTH_NONE |
read | 1 | статьи, простр. имён | право на чтение | AUTH_READ |
edit | 2 | статьи, простр. имён | можно изменять существующие статьи | AUTH_EDIT |
create | 4 | простространства имён | можно создавать новые статьи | AUTH_CREATE |
upload | 8 | простространства имён | можно загружать медиафайлы | AUTH_UPLOAD |
delete | 16 | простространства имён | можно заменять или удалять медиафайлы | AUTH_DELETE |
admin | 255 | плагин admin | суперпользователь1) может изменять настройки | AUTH_ADMIN |
Вот пример представления, которое совпадает с первым примером, приведённому выше:
* @ALL 4 * bigboss 16 devel:* @ALL 0 devel:* @devel 8 devel:* bigboss 16 devel:* @marketing 1 devel:funstuff bigboss 0 devel:marketing @marketing 2 marketing:* @marketing 8 start @ALL 1
Пожалуйста запомните, что порядок не имеет значения. Файл обрабатывается целиком, когда ищется наиболее подходящие правило для текущей связки «статья—пользователь». Если такое правило найдено, дальнейшие поиски прекращаются. Если не найдено, проводится проверка на совпадение связки «статья—группа» для всех групп, членом которых является текущий пользователь. Если и тут совпадений нет, то поиск проводится для следующего уровня пространства имён данной статьи. И т. д., пока не достигнем правила со связкой «*/@ALL».
Замечание: право на удаление (delete) относится только к медиафайлам. Статьи могут быть удалены (и восстановлены) любым пользователем, имеющим право на редактирование (edit). Пользователь, у которого есть права на загрузку (upload), но нет права на удаление (delete), также не может переписать существующие медиафайлы.
Если в имени пользователя или группы должны быть спецсимволы (такие, как пробел, например), то они (символы) должны быть преобразованы точно также, как они преобразуются в соглашениях об URL. Это относится только к спецсимволам с ASCII-кодами ниже 128. Файл ACL использует кодировку UTF-8, поэтому могут использоваться любые многобайтовые символы в том виде как они есть.
Пример: Herbert.Müller
становится Herbert%2eMüller
(Это относится только к случаям, когда используется бэк-энд, отличный от «plain»; «plain backend» в любом случае не допускает спецсимволы нигде.)
Есть возможность использовать подстановки имён пользователей (user wildcards) в списках доступа. Это может быть полезным в вики c большим количеством зарегистрированных пользователей, если вы хотите дать каждому пользователю персональное пространство имён, в котором только он имел бы доступ на редактирование, и если вы не хотите при этом редактировать ACL для каждого пользователя. А достичь это позволяет то, что подстановка %USER%
заменяется на имя пользователя, который в данный момент «залогинен» в системе и %GROUP% все группы этого пользователя.
В этом случае зарегистрированный пользователь имеет доступ только к собственному пространству имен и не имеет доступа к пространствам имен других пользователей (даже к просмотру названий пространств имен других пользователей).
# # Предоставить полный доступ к пространству имен пользователя, вошедшего всистему user:%USER%:* %USER% 16
# # Разрешить просматривать собственное пространство имен через “все страницы”: user: %USER% 1
# # Разрешить доступ только для чтения к странице “start”, расположенной в пространстве имен “user” user: start %USER% 1
# # Отключить весь доступ к домашним пространствам имен пользователя, не принадлежащим зарегистрированному пользователю # (включая просмотр пространств имен через “все страницы”) user:* @user 0
# # Разрешить членам “group” редактировать страницы в пространстве имен “group”. # БУДЬТЕ ОСТОРОЖНЫ, если у вас есть пространство имен “user”, все члены группы по умолчанию # получит к нему доступ, поскольку %GROUP% будет заменен буквально %GROUP%:* %GROUP% 2
Замечание: Не так давно для обозначения подстановок использовался символ «@» («собака»). В более новых версиях он заменен на «%» (процент). Если вы обновляетесь со старой версии, то вы должны привести установки ACL в соответствие с этим.