Нейросети и Интернет :: Продукты :: Сервер приложений Zope :: Вопросы, часто задаваемые пользователями пакета

Главная

   Новости

   Публикации

   Продукты

   О нас

   Задайте ваш вопрос

Продукты

   Python Policy

   rPAS

   Zope

   Zope

   IIGFS

Ссылки

   Личные сервисы

   Поисковые сервисы

   Скачать!

   Баги

   Демо IIGFS

   Разработка rPAS

 

<< Zope & python2.2.* ? | ^FAQ^ | Zope & debug ?>>

Как восстановить разрушенную систему авторизации ?

  печать |  2002-11-10 22:38:12  | mcray

Даже перед законными пользователями Zope иной раз встает проблема : забыл пароль, стер свою учетную запись, а при переносе сайта или обновлении программного обеспечения доступ может быть утерян из-за нарушений в работе внешней системы авторизации, такой как mysqlUserFolder или аналогичных решения. Проблема не слишком сложно решается, если знать как это делать.

Простейший случай разрушения системы авторизации - - стирание учетной записи или забывание пароля - легко решается при помощи утилиты zpasswd (/usr/sbin/zpasswd). Введите команду :

  zpasswd -u admin -p <ПАРОЛЬ> /var/lib/zope/<СЕРВЕР>/inituser

В рабочем каталоге экземпляра сервера будет создан файл inituser с учетной записью. При следующем старте, сервер прочитает учетную запись и сохранит ее в корневой папке учетных записей, а файл inituser будет стерт. Авторизовавшись, следует создать новую учетную запись и стереть учетную запись пользователя admin.

Сложнее обстоят дела, если была стерта папка учетных записями в корне сайта (/acl_users) . В этом случае следует использовать следующий подход :

  # Настраиваем среду
  % export PYTHONPATH=/usr/lib/zope/lib/python
  % export INSTANCE_HOME=/var/lib/zope/<СЕРВЕР>
  % cd $INSTANCE_HOME

  # Стартуем python
  % python

  >>>  import ZODB

  >>>  from App.Extensions import getObject
  >>>  import Globals, ZODB.FileStorage

  # Открываем ZODB
  >>>  Storage=ZODB.FileStorage.FileStorage('var/Data.fs')
  >>>  database = ZODB.DB( Storage )
  >>>  connection = database.open()
  >>>  dbroot = connection.root()

  # Создаем папку учетных записей
  >>>  from AccessControl.User import UserFolder
  >>>  dbroot['Application']._setObject('acl_users', UserFolder())

  # Подтверждаем транзакцию
  >>>  get_transaction().commit()
  [EOF]

Эта последовательность команд создает в корневом объекте Zope папку пользователей, после чего можно создать пользователя командой zpasswd.

При неисправности внешней системы авторизации ситуация усугубляется тем, что некоторые UserFolder'ы (например mysqlUserFolder) блокируют заимствование авторизации и целые разделы сервера могут стать полностью недоступны. Наилучший способ решить проблему - это настроить внешнюю систему авторизации или отключить ее стандартным способом (если она предусматривает таковой, в случае с mysqlUserFolder можно установить переменную VALIDATE_ALWAYS_SUPER в файле mysqlUserFolder/cfg.py в значение "1").

К сожалению, это не всегда возможно : система авторизации может не поддерживаться в новой среде, вам могут быть неизвестны пароли и тому подобные вещи. Удалить папку пользователя можно также как и создать ее : только нужно использовать функцию удаления. Например, что бы удалить папку пользователей из объекта /QuickStart :

  >>> dbroot['Application'].QuickStart.acl_users._delOb()
  >>> get_transaction().commit()

При этом может потребоваться импортировать различные продукты, объекты которых используются на пути к acl_users, поэтому, когда есть или может быть получена XML-реплика, смелые парни, которым нечего терять кроме времени, открывают ее VI и вычеркивают из ObjectManager ссылку на идентификатор acl_users. Те, для кого это пустой звук, могут попробовать сделать так :

   sed -s "s/acl_users/goddamn/g" <входная_реплика.xml >выходная_реплика.xml

После этого объекты acl_users перестанут быть таковыми, вы можете попробовать импортировать реплику обратно и стереть объекты goddamn.

Еще раз - этот способ для тех, кому нечего терять: остальным лучше так не делать.

Вход для пользователей

логин:

пароль:

ZOPE Powered by IIG FS Info Industries Group mosgird