Администрирование паролей

Пожалуйста, экспериментируйте в песочнице!

администраторам (основы)

У PmWiki имеется встроенная поддержка защиты паролем различных областей вики сайта. Пароли могут быть назначены на отдельные страницы, на Вики Группы или весь вики сайт. Обратите внимание, что описанный здесь механизм защиты паролем всего лишь малая часть всей системы безопасности(и в целом вики), более подробное обсуждение смотри на странице Безопасность.

Как описано в разделе Пароли, авторы могут с помощью PmWiki устанавливать пароли как на отдельные страницы, так и на ВикиГруппы. Однако, как описано далее, администраторы вики ко всему прочему могут устанавливать пароли в файлах местной настройки.

Основы

PmWiki поддерживает несколько уровней доступа к страницам вики:

read пароли позволяют просматривать содержимое страниц вики
edit пароли управляют редактированием и изменением страниц вики
attr пароли указывают кто имеет право устанавливать пароли на страницы (и, потенциально, другие атрибуты)
если закачка разрешена, upload пароли управляют закачкой файлов

И наконец, есть ещё пароль admin позволяющий администратору перекрыть установленные пароли для отдельных страниц или групп.

По умолчанию, PmWiki имеет следующие настройки паролей:

  • Пароли admin и upload по умолчанию закрыты;
  • Группы Main и PmWiki закрыты паролем attr (на их собственных страницах GroupAttributes);
  • Страницы в группе Site, за исключением Site.SideBar, закрыты для редактирования.

Пароль admin используется для обхода "закрытых" паролей, т.е. не тех, у которых нет пароля на доступ.

Смотри страницу Пароли подробно описывающую установку паролей на страницы и группы. Продолжение этой страницы описывает установку паролей для всего сайта с помощью файла local/config.php.

Установка паролей для всего сайта

Первое, что должен настроить админ -- это пароль всего сайта admin. Это делается одной строкой в файле local/config.php:

    $DefaultPasswords['admin'] = crypt('secret_password');

Заметьте, что вызов crypt() здесь необходим -- PmWiki внутри хранит и обрабатывает все пароли в виде зашифрованных строк. О подробностях об устранении читаемых паролей из файлов настроек смотри ниже раздел о шифровании.

Для настройки редактирования всего сайта только теми, что знает "edit" пароль добавьте строку подобную следующей в local/config.php:

    $DefaultPasswords['edit'] = crypt('edit_password');

Аналогично вы можете установить пароли $DefaultPasswords['read'], $DefaultPasswords['edit'] и $DefaultPasswords['upload'] для управления чтением, редактированием и закачкой файлов для всего сайта. Пароли по умолчанию используются только для страниц или групп не имеющих настроенных паролей. Ко всему прочему, каждое значение $DefaultPasswords может быть массивом зашифрованных паролей:

    $DefaultPasswords['read'] = array(crypt('alpha'), crypt('beta'));
    $DefaultPasswords['edit'] = crypt('beta');

что говорит, что оба пароля "alpha" и "beta" позволяют чтение страниц, но только пароль "beta" позволяет кому-либо редактировать страницу. Впоследствии PmWiki запоминает все пароли введённые во время текущей сессии. Личность не введшая какой-либо пароль не сможет просмотреть страницы.

Индивидуальная авторизация (имя/пароль регистрация, AuthUser)

В отличии от множества систем использующих для доступа к страницам индивидуальную авторизацию (т.е. у каждого пользователя отдельное имя и пароль), PmWiki изначально пользуется системой паролей. В основном защита только паролем часто проще в поддержании, потому что она не требует административной нагрузки для создания учётных записей пользователей, восстановления забытых паролей, управления правами пользователей.

Однако, сценарий PmWiki authuser.php добавляет к системе паролей возможность доступа к страницам по комбинации имени пользователя и пароля. О подробностях по управлению доступа к страницам по идентификации пользователя смотри AuthUser.

Дыры безопасности ...

Администратору стоит очень внимательно планировать применение паролей во избежание открытия дыр в системе безопасности по невнимательности. Если ваша вики открыта (кто угодно может читать и править), это казалось бы не беспокоит, за исключением случая злобного или запутавшегося пользователя могущего установить пароль чтения на группу и тем самым сделать её недоступной для остальных пользователей. По наикрайнейшей мере, даже открытая вики должна иметь для всего сайта пароли "admin" и "attr" установленые в файле config.php. Распространяемый с PmWiki файл sample-config.php указывает, что группы PmWiki и Main имеют изначально запертый "attr", но если кто-либо создаст новую группу, то "attr" отопрётся. В таком случае администраторам надо помнить об установке пароля "attr" для каждой новой группе (по необходимости). Простейшее решение -- это вставить следующие строки в config.php:

$DefaultPasswords['admin'] = crypt('ваш-admin-пароль');
$DefaultPasswords['attr'] = crypt('ваш-admin-пароль');

Шифрование паролей в config.php

У использования функции crypt() для установки паролей в файле config.php есть один недостаток -- кто-нибудь может просмотреть файл и увидеть незашифрованный пароль. Например, если config.php содержит

    $DefaultPasswords['admin'] = crypt('mysecret');

то пароль "mysecret" явен для других смотрящих. Однако, администратор вики может получить и использовать зашифрованную форму пароля напрямую воспользовавшись ?action=crypt на любой странице PmWiki (или просто перейти на PasswordsAdmin?action=crypt). Это действие выдаёт форму для генерации зашифрованных версий паролей в пригодном виде для файла config.php. Например, когда ?action=crypt получит пароль "mysecret", PmWiki вернёт строку вроде

    $DefaultPasswords['type']='$1$vR4.Ma1.$llNADCnbvJRxIE/hqnucA.';

Строка полученая из ?action=crypt может быть помещена прямо в config.php, как в:

    $DefaultPasswords['admin']='$1$vR4.Ma1.$llNADCnbvJRxIE/hqnucA.';

Обратите внимание, что в зашифрованной форме ключевое слово crypt и скобки удалены, так как пароль уже зашифрован. Кроме того, зашифрованный пароль дожен быть заключён в одиночные апострофы. В данном примере пароль всё ещё "mysecret", но кто-либо заглянувший в config.php не сможет его подсмотреть даже увидев его зашифрованную форму. Crypt может дать вам другие шифры для одного и того же пароля -- это нормально (и затрудняет определение исходного пароля).

Снятие пароля

Чтобы полностью удалить с сайта, такой как по умолчанию закрытый пароль для закачек, просто установите в значение пустой строки:

    $DefaultPasswords['upload'] = '';

Также вы можете использовать специальный пароль "nopass"(определяемый переменной $AllowPassword) через действие ?action=attr, чтобы получить страницу без защиты паролем в закрытой паролем группе или группу без пароля на закрытом паролем сайте.

Отмена или аннулирование паролей

Если пароль скомпрометирован и администратор вики хочет быстро аннулировать всех пользователей с таким паролем на сайте, то проще в файле local/config.php добавить следующие строки:

    $ForbiddenPasswords = array('secret', 'tanstaafl');
    if (in_array(@$_POST['authpw'], $ForbiddenPasswords)) 
      unset($_POST['authpw']);

Это не допускает принятие от кого-либо "secret" и "tanstaafl" как действующего пароля авторизации, независимо от того пользуются им страницы или нет.

Также смотри

  • Массив $HandleAuth устанавливающий требуемый уровень авторизации необходимый для выполнения действия(action).

Защита действий (пример)

Каждое действие может быть защищено паролем. Авторы Рецептурника снабжающие сценарии собственными действиями также могут использовать такой приём, но я упростил пример до (по умолчанию) не защищённого ?action=source. Это действие показывает исходную разметку страницы. Иногда вы не желаете её показывать, особенно при использовании условной разметки, которая не должна открываться легко и быть доступной только тем, у кого есть права на правку.

Для этого есть несколько решений:

  1. Чтобы разрешить "source" только редакторам добавьте следующее в ваш local/config.php:
    $HandleAuth['source'] ='edit';
  2. Для использования "source" с собственный паролем добавьте:
    $HandleAuth['source'] ='source';
    $DefaultPasswords['source'] = crypt(secret); # смотри выше
    Если вы дополнительно хотите установить пароль в атрибутах страницы, то добавьте:
    $PageAttributes['passwdsource'] = "$['Set new source password']";

<< Настройка отдельных групп | Документация | AuthUser >>

Перевод страницы PmWiki.PasswordsAdmin - Оригинал перевода PmWikiRu.PasswordsAdmin - Backlinks
PmWikiRu.PasswordsAdmin: редакция от September 10, 2011, at 12:48 PM
PmWiki.PasswordsAdmin: редакция от December 22, 2021, at 11:48 PM