Функции безопасности Domino/Notes 6
11.10.2 Получение доступа к серверу и схема процесса
Как мы уже видели, клиент Notes многое знает о пользователе, прежде чем он выполнит вход на сервер. Параметры в идентификаторе пользователя Notes применяются для вызова событий на клиенте и вывода предупреждений в зависимости от текущего этапа проверки пароля.
Проверка даты окончания срока действия
Файл NOTES.INI содержит переменную CertificateExpChecked. Эта переменная определяет имя текущего ID-файла Notes, используемого клиентом, и дату последнего применения идентификатора пользователя Notes. При загрузке программного обеспечения Lotus Notes клиент Notes выполняет проверку этого параметра.
Если дата, указанная в параметре CertificateExpChecked, меньше сегодняшней даты, выполняется проверка идентификатора пользователя Notes, чтобы убедиться в том, что он имеет действительный актуальный сертификат и, при необходимости, предупредить пользователя, о том, что срок действия его пароля может заканчиваться; для этого используется формула, представленная в примере 11.1.
Where дата окончания срока действия = (дата последнего изменения + интервал изменения) {If (дата окончания срока действия - текущая дата) < (25% интервала изменения) {вывод предупреждения } }Пример 11.1. Формула срока действия пароля
При проверке даты, указанной в параметре CertificateExpChecked, пользователю выдается предупреждение только раз в сутки.
Однако при выдаче предупреждения выводится диалоговое окно Password Expiry (Окончание срока действия пароля), как показано на рис. 11.13. Это диалоговое окно содержит сведения о дате окончания срока действия пароля. Пользователь нажимает OK и решает, что ему следует делать.
Подключение к серверу
При подключении пользователя к серверу клиент проверяет документ Server, чтобы определить, настроена ли проверка пароля на сервере. Если она настроена, то выполняется проверка в документе Person пользователя с установленным параметром Check Password (Проверять пароль).
До тех пор пока пользователь не сменит свой пароль, каждый день будет выводиться диалоговое окно окончания срока действия пароля, показанное на рис. 11.13. Пользователь может и дальше осуществлять доступ к серверам, на которых настроена проверка паролей, до тех пор пока их пароли будут действительны. По окончании срока действия пароля пользователю будет выводиться новое диалоговое окно сообщения об ошибке, представленное на рис. 11.14. Это диалоговое окно будет выводиться при попытке пользователя получить доступа к серверу.
Дата 22/04/2001 определяется по следующей формуле:
(Дата последнего изменения пароля) + (интервал изменения, заданный в ID)
В R4 на данном этапе пользователь мог получить доступ к серверу, нажав OK. Такому пользователю давалась отсрочка еще на несколько дней, чтобы он мог изменить пароль, прежде чем будет заблокирован доступ к серверу. Однако по советам клиентов было внесено значительное изменение.
В клиентах после версии R4.6.7, клиентах R5 и клиентах Version 6 пользователь не может получить доступ к серверу, пока он не изменит свой пароль. В данном случае при нажатии OK ошибка исчезает, однако, когда пользователь пытается получить доступ к серверу, он получает еще одно предупреждение, показанное на рис. 11.15.
Пользователь не может получить доступ к серверу, пока не будет изменен пароль. Если пользователь решит выйти и попытаться получить доступ к другому серверу, не настроенному на проверку пароля, он может это сделать, однако все равно ему будут выводиться предупреждения об окончании срока действия пароля. С этого времени для клиента и файла идентификатора пользователя начинает действовать период отсрочки.
В R5 и Version 6 период отсрочки определяется как время после окончания срока действия пароля, но когда пользователь еще может изменить свой пароль, прежде чем будет заблокирована учетная запись (в период отсрочки пользователь не сможет выполнить вход на сервер, на котором включена проверка паролей). В клиентах до версии R4.6.7 период отсрочки представлял собой продление даты окончания срока действия пароля; пользователь все еще мог получить доступ к серверам, но с течением времени получал все более строгие предупреждения до тех пор, пока его учетная запись полностью не блокировалась в конце периода отсрочки.
Блокировка идентификатора пользователя
В нашем примере в качестве периода отсрочки для пользователя задано значение 30 дней. Если пользователь применит клиент R5 или Version 6, это дает пользователю 30-дневный временной интервал, в который он должен изменить пароль в применяемом ID-файле Notes, если он хочет снова получить доступ к какому-либо серверу с включенной проверкой паролей. После завершения этого 30-дневного периода отсрочки потребуется вмешательство администратора сервера, который бы вручную переустановил учетную запись пользователя, изменив документ Person для этого пользователя; 30-дневный период является достаточным, так как в случае, если срок действия пароля завершится в день ухода пользователя в отпуск, при возвращении он сможет изменить пароль и продолжить работать без вмешательства администратора.
Однако пользователь есть пользователь, и если он решит проигнорировать предупреждения о необходимости изменения пароля, то при очередной попытке получить доступ к серверу он может увидеть новое предупреждение в виде диалогового окна, изображенного на рис. 11.16.
На данном этапе клиентское программное обеспечение Notes не позволит пользователю получить доступ к серверу.
Затем выполняется скремблирование дайджеста, сохраненного в документе Person, вследствие чего он становится отличным от копии, сохраненной в идентификаторе пользователя. Такой механизм также является подстраховкой для администраторов, так как в том случае, если пользователь уйдет из организации и администратор забудет добавить его в список отказа в доступе, то, пока проверка паролей будет включена, никто не сможет получить доступ к серверу с применением идентификатора пользователя Notes, так как дайджесты не будут совпадать.
Однако это нельзя считать заменой применению списков отказа в доступе.
Даже если пользователь изменит свой пароль по истечении этого периода, он не сможет получить доступ к серверу, чтобы передать запрос на изменение пароля в adminP. Если система начала выдавать сообщение об ошибке, единственное, что может сделать пользователь, – это обратиться за помощью к администратору.
Разблокировка учетной записи
Разблокировка учетной записи пользователя требует помощи администратора, имеющего доступ к изменению документа Person пользователя.
Этот процесс достаточно прост, однако возможны ошибки, если администратор не выполнит весь процесс Adminp или по ошибке изменит не те поля.
Например, при удалении дайджеста пароля в документе Person, при следующем входе пользователя на сервер, ему все еще будет отказано в доступе (такое поведение является корректным, так как ID-файл пользователя Notes все еще содержит прошедшую дату окончания срока действия пароля). Однако когда пользователь изменяет пароль в своем ID-файле, дайджест пароля в файле user.id также обновляется, однако так как в документе Person дайджест отсутствует, не выполняется проверка дайджеста пароля и пользователь получает доступ. Так как дата последнего изменения является более поздней, чем дата, записанная в документе Person, клиент генерирует запрос к Adminp.
На рис. 11.17 показан запрос к Adminp, сгенерированный клиентом для информирования сервера о новом изменении пароля.
После завершения обработки запроса процессом Administration Process документ Person пользователя содержит те же значения параметров Password Digest (Дайджест пароля) и Last Change Date (Дата последнего изменения), что и ID-файл пользователя. После передачи запроса с клиента на сервер в ID-файле не выполняется никаких изменений. Пользователь теперь может получить доступ к серверу.
С другой стороны, если пользователь позднее попробует изменить пароль на один из 49 паролей, сохраненных в идентификаторе пользователя Notes (с чувствительностью к регистру), ему будет выдано диалоговое окно сообщения об ошибке, показанное на рис. 11.18.
Таким образом, пользователю придется применить свое воображение и выбрать уникальный, легкий для запоминания пароль, отличный ото всех предыдущих паролей.
11.10.3 События проверки паролей
В этом разделе представлен полный список событий процедуры проверки паролей, от ее начала до конца. Ниже представлен как псевдокод процесса, так и соответствующая блок-схема.
Предупреждения, рассмотренные выше, представлены как в блок-схеме, так и в псевдокоде. Кроме того, они содержат некоторые дополнительные проверки, выполняемые сервером для обеспечения синхронизации дайджестов и дат. Например, когда клиент отправляет на сервер дайджест идентификатора пользователя с отметкой времени, настолько опережающей время сервера, что сервер решает, что на клиенте проблемы с системным временем. В такой ситуации на клиенте будет выдано следующее сообщение: Connection failed because of a problem with clock synchronization and password change intervals. Check your clock setting, change your password, or consult your system administrator (Подключение не было установлено из-за проблем с синхронизацией времени и интервалов изменения паролей. Проверьте настройку времени, смените пароль или обратитесь к системному администратору).
Как блок-схема, так и псевдокод показывают, в каком состоянии находятся идентификатор пользователя Notes и документы Person при получении клиентами предупреждений или при отказе в доступе к серверу.
Блок-схема изображена на рис. 11.19, а псевдокод приведен в примере 11.3.
Загрузка клиентского программного обеспечения Пользователю выдается запрос на ввод пароля if NOTES.INI CertificateIsExpChecked = системная дата {/ / да Разрешается доступ клиента к локальной базе данных }else {/ / нет if (системная дата > дата окончания срока действия) or (систем- ная дата < дата последнего изменения) {/ / да print " Вы должны изменить свой пароль, его срок действия закон- чился dd-mm-yyyy" }else {/ / нет if (системная дата - дата окончания срока действия) < (25% интер- вала изменения) {print "ПРЕДУПРЕЖДЕНИЕ: срок действия вашего пароля закончится ddmm- yyyy" }}}if клиент подключился к серверу {/ / нет if включена проверка паролей в документе Server {if включена проверка паролей в документе Person {if дайджест пароля в документе Person = EMPTY {/ / да if дата последнего изменения в документе Person = EMPTY {/ / да Изменение пароля пользователя в адресной книге Обновление даты последнего изменения и дайджеста пароля в ID пользователя Обновление даты последнего изменения и дайджеста пароля в документе Person Разрешается доступ клиента к серверу Проверка наличия незавершенных запросов к AdminP, обрабатываемых клиентом }else {/ / нет if дата последнего изменения + 3 часа > текущая дата {/ / да Изменение пароля пользователя в адресной книге Обновление даты последнего изменения и дайджеста пароля в ID пользователя Обновление даты последнего изменения и дайджеста пароля в документе Person Разрешается доступ клиента к серверу Проверка наличия незавершенных запросов к AdminP, обрабатываемых клиентом }else {/ / нет Разрешается доступ клиента к серверу Проверка наличия незавершенных запросов к AdminP, обрабатываемых клиентом }}} { // нет if дата последнего изменения в документе Person = EMPTY {/ / да print "Ошибка на сервере: срок действия вашего пароля закончился (...)" Клиент уничтожает дайджест пароля в ID-файле пользователя В доступе к серверу отказано Процесс проверки пароля завершен }else {/ / нет If (интервал изменения + период отсрочки) < системная дата - дата последнего изменения) {/ / да print "Ошибка на сервере: срок действия вашего пароля закончился (...)" Клиент уничтожает дайджест пароля в ID-файле пользователя В доступе к серверу отказано Процесс проверки пароля завершен }else {/ / нет if пользователь изменил свой пароль {/ / да Изменение пароля пользователя в адресной книге Обновление даты последнего изменения и дайджеста пароля в ID пользователя Обновление даты последнего изменения и дайджеста пароля в документе Person Разрешается доступ клиента к серверу Проверка наличия незавершенных запросов к AdminP, обрабатываемых клиентом }else {/ / нет if дайджест пароля в ID = дайджест пароля в документе Person {/ / да if срок действия пароля в ID-файле закончился {/ / да print "ПРЕДУПРЕЖДЕНИЕ: срок действия вашего пароля закончится (...)" Изменение пользователем своего пароля Изменение пароля пользователя в адресной книге Обновление даты последнего изменения и дайджеста пароля в ID пользователя Обновление даты последнего изменения и дайджеста пароля в документе Person Разрешается доступ клиента к серверу Проверка наличия незавершенных запросов к AdminP, обрабатываемых клиентом }else {/ / нет В доступе к серверу отказано Процесс проверки пароля завершен }}else {/ / нет print "Другая копия вашего ID-файла содержит другой пароль (...)" В доступе к серверу отказано Процесс проверки пароля завершен }}}}}}} }Пример 11.3. Псевдокод проверки пароля