Заметки сисадмина о интересных вещах из мира IT, инструкции и рецензии. Настраиваем Компьютеры/Сервера/1С/SIP-телефонию в Москве
С ошибкой “Не удалось установить доверительные отношения между этой рабочей станцией и основным доменом” время от времени приходится сталкиваться каждому системному администратору. Но не каждый понимает причины и механизмы процессов, приводящие к ее возникновению. Потому что без понимания смысла происходящих событий невозможно осмысленное администрирование, которое подменяется бездумным выполнением инструкций.
Учетные записи компьютеров, также, как и учетные записи пользователей, являются участниками безопасности домена. Каждому участнику безопасности автоматически присваивается идентификатор безопасности (SID) на уровне которого осуществляется доступ к ресурсам домена.
Перед тем как предоставить учетной записи доступ к домену необходимо проверить ее подлинность. Каждый участник безопасности должен иметь свою учетную запись и пароль, учетная запись компьютера не исключение. При присоединении компьютера к Active Directory для него создается учетная запись типа “Компьютер” и устанавливается пароль. Доверие на этом уровне обеспечивается тем, что данная операция производится администратором домена или иным пользователем, имеющим для этого явные полномочия.
Впоследствии при каждом входе в домен компьютер устанавливает защищенный канал с контроллером домена и сообщает ему свои учетные данные. Таким образом между компьютером и доменом устанавливаются доверительные отношения и дальнейшее взаимодействие происходит согласно установленных администратором политик безопасности и прав доступа.
Пароль учетной записи компьютера действует 30 дней и впоследствии автоматически изменяется. При этом важно понимать, что смену пароля инициирует компьютер. Это происходит аналогично процессу смены пароля пользователя. Обнаружив, что текущий пароль просрочен, компьютер при очередном входе в домен его заменит. Поэтому, даже если вы не включали компьютер несколько месяцев, доверительные отношения в домене сохранятся, а пароль будет заменен при первом входе после длительного перерыва.
Доверительные отношения нарушаются в том случае, если компьютер пытается аутентифицироваться в домене с недействительным паролем. Как такое может произойти? Самый простой способ – это откатить состояние компьютера, например, штатной утилитой восстановления системы. Такой же эффект может быть достигнут при восстановлении из образа, снапшота (для виртуальных машин) и т.п.
Еще один вариант – это изменение учетной записи другим компьютером с таким же именем. Ситуация довольно редкая, но иногда случается, например, когда сотруднику поменяли ПК с сохранением имени, выведя из домена старый, а потом снова ввели его в домен забыв переименовать. В этом случае старый ПК при повторном вводе в домен сменит пароль ученой записи компьютера и новый ПК уже не сможет войти, так как не сможет установить доверительные отношения.
Какие действия следует предпринять, столкнувшись с данной ошибкой? Прежде всего установить причину нарушения доверительных отношений. Если это был откат, то кем, когда и каким образом он был произведен, если пароль был сменен другим компьютером, то опять-таки надо выяснить, когда и при каких обстоятельствах это произошло.
Простой пример: старый компьютер переименовали и отдали в другой отдел, после чего произошел сбой, и он автоматически откатился на последнюю контрольную точку. После чего данный ПК попытается аутентифицироваться в домене под старым именем и закономерно получит ошибку установления доверительных отношений. Правильными действиями в этом случае будет переименовать компьютер как он должен называться, создать новую контрольную точку и удалить старые.
И только убедившись, что нарушение доверительных отношений было вызвано объективно необходимыми действиями и именно для этого компьютера можно приступать к восстановлению доверия. Сделать это можно несколькими способами.
Как запретить пользователям добавлять компьютеры в домен
Нужно группе Прошедшие проверку поставить явный запрет на Создание объектов компьютера, как показано на скриншоте
Нашли опечатку в тексте? Пожалуйста, выделите ее и нажмите Ctrl+Enter! Спасибо!
Служба доменных имен (DNS)
Каждый компьютер, подключенный к сети, работающей по протоколу TCP/IP (например, к Internet), идентифицируется своим IP-адресом. IP-aдрес представляет собой комбинацию четырех чисел, определяющих конкретную сеть и конкретный хост-компьютер в этой сети. IP-адреса очень трудно запоминать, поэтому для идентификации хост-компьютера вместо его 1Р-адрреса можно пользоваться доменным именем. Доменное имя состоит из двух частей — хост-имени и имени домена. Хост-имя — зто собственно имя компьютера, а домен обозначает сеть, частью которой этот компьютер является. Домены, используемые в США, обычно имеют расширения, обозначающие тип сети. Например, для учебных заведений использую расширение .edu , а для коммерческих организаций — расширение .com . Международные домены обычно имеют расширения, которые обозначают страну в которой они расположены, например .du для Германии и .аu для Австралии. Комбинация хост-имени, имени домена и расширения представляет собой уникальное имя, по которому можно обращаться к компьютеру. Домен, в свою очередь, иногда разбивается на поддомены.
Как вы знаете, компьютер в сети можно идентифицировать только по его IP-адресу, даже если он имеет доменное имя. Обратиться к компьютеру в сети по доменному имени можно, но это предполагает поиск соответствующего IP-адреса в базе данных. Сеть использует для доступа к компьютеру не доменное имя, а IP-адрес. До появления очень больших сетей с протоколами TCP/IP, в частности Internet, каждый компьютер сети мог вести файл, перечнем доменных имен и IP-адресов всех компьютеров, включенных в эту сеть. В случае обращения по доменному имени компьютер искал его в этом файле и находил соответствующий IP-адрес. Так можно поступать и сейча в отношении удаленных систем, соединения с которыми устанавливаются чаще всего.
По мере роста сетей ситуация изменилась. Ведение отдельного списка всех доменных имен и IP-адресов на каждом компьютере стало непрактичным, а в случае с Internet — просто невозможным. Чтобы обеспечивать преобразование доменных адресов в IP-адреса, были разработаны и установлены на особые серверы базы данных, содержащие доменные имена и соответствующие им IP-адреса. Для того чтобы найти IP-адрес доменного имени, на сервер имен посылается соответствующий запрос. Сервер имен ищет IP-адрес и посылает его обратно. В крупной сети может быть нескольк серверов имен, обслуживающих различные части сети. Если какой-либо сервер имен не может найти необходимый IP-адрес, он посылает запрос на другой сервер. Серверы имен могут предоставлять и такую информацию, как наименование предприятия, на котором находится искомый компьютер, его адрес и даже фамилию лица, обслуживающего этот компьютер.
Запросы на серверы имен посылают особые программы, которые называют определителями (resolver). Определитель — это программа, предназначенная для получения адресов с серверов имен. Чтобы пользоваться у себя в системе доменными именами, вам придется конфигурировать собственный определитель. Конфигурация локального определителя задается файлами /etc/host.conf и /etc/resolv.conf .
файл host.conf
В файле host.conf содержатся опции программы-определителя (см. следующую таблицу). Каждая опция может иметь несколько полей, отделенных друг от друга пробелами или знаками табуляции. Для ввода комментария в начале строки нужно ставить знак # . Опции указывают определителю, каким сервисом пользоваться. Важное значение имеет порядок следования опций. Определитель начинает обработку с первой из указанных опций и переходит по очереди к следующим. Файл host.conf находится в каталоге /etc вместе с другими файлами конфигурации.
order
hosts Проверяется наличие имени в локальном файле /etc/host
bind Запрашивается адрес у сервера имен DNS
nis Для получения адреса используется база данных центра сетевой информации (NIS)
alert Проверяет наличие в локальной системе адресов удаленных узлов, пытающихся получить к ней доступ; устанавливается и отменяется ключевыми словами on и off
В следующем примере, где представлен файл host.conf , опция order дает программе-определителю указание искать имена в локальном файле /etc/ hosts , а в случае неудачи направлять запрос на сервер имен. Не допускается использование нескольких адресов системы.
Файл /etc/resolv.conf
Для того чтобы программа-определитель могла выполнять свою задачу ей должен быть предоставлен доступ к серверам доменных имен. В фале resolv.conf содержатся адреса серверов имен, к которым имеет доступ данная система. В этом файле можно создавать три типа записей, каждая из которых предваряется одним из трех ключевых слов: domain, nameserver, search . В записи domain вводится доменное имя локальной системы. В записи search приводится список доменов на тот случай, если задается только хост-имя. Если к какой-либо системе пользователь обращается часто, он может ввести имя ее домена в запись search, а затем использовать в качестве адреса только хост-имя. Определитель попытается найти полное доменное имя по имени домена, указанному в записи search.
После записей search идут записи nameserver, если таковые имеются. Для каждого сервера имен, к которому имеет доступ данная система, вводиься ключевое слово nameserver и IP-адрес. Таких серверов может быть несколько, и порядок их следования в списке очень важен. Во многих сетях имеется основной сервер имен и несколько вспомогательных. Основной сервер должен запрашиваться первым. Для этого его IP-адрес должен быть введен в первую запись nameserver.
Ниже приведен пример файла resolv.conf . Домен хост- компьютера berkeley.edu . IP-адреса серверов имен этого домена указаны в записях name server. Запись search позволяет использовать в качестве адреса только xoct-имя для компьютеров в домене unc.edu . Например, чтобы обратиться системе sunsite.unc.edu , пользователь должен ввести в качестве адреса толькй хост-имя, sunsite .
Организация собственного сервера имен: демон named
Если, будучи администратором сети, вы решили организовать в ней сервер имен, то можно конфигурировать на работу в качестве такого сервера любую Linux-систему. Для этого необходимо запустить демон named . Этот демон запускается одновременно с системой и ожидает запросов о доменных именах. Демон named пользуется несколькими файлами конфигураци которые позволяют ему отвечать на запросы. В файле named.boot указывается домен, который обслуживает данный сервер, и имя каталога, предназначенного для его рабочих файлов. В файле named.hosts хранится информация об этом домене. Она состоит из Записей, содержащих сведения о хост-компьютерах, находящихся в данном домене. В этих записях используется весьма специфический формат, с кодами в соответствующих полях. Файл named.rev содержит данные о соответствии между IP-адресами и хост-именами. Файл named.ca организует кэширование для сервера имен. Процесс организации собственного сервера имен может быть довольно сложным. Следует обратиться к документам HOW TO, странице диалогового руководства по программе named и литературе по администрированию сети, включающей в свой состав Linux-системы.
Как получить время входа пользователя в домен в консоли ADUC?
Вы можете узнать время последнего входа пользователя в систему из графической консоли ADUC (Active Directory Users and Computers).
Вы можете узнать время последнего входа пользователя в домен из командной строки с помощью net user и dsquery.
Откройте командную строку (не обязательно с правами администратора домена) и выполните команду:
net user administrator /domain| findstr «Last»
Вы получили время последнего входа данного пользователя.
Также вы можете получить время последнего входа с помощью dsquery. Например для учетной записи slpetrov:
dsquery * domainroot -filter «(&(objectCategory=Person)(objectClass=User)(sAMAccountName=slpetrov))» -attr distinguishedName lastLogon lastLogonTimestamp -limit 0
Главная проблема в том, что атрибуты lastLogon и lastLogonTimestamp в AD хранятся в формате timestamp и вам нужно дополнительно конвертировать его в нормальный формат времени.
Также вы можете использовать эту команду, чтобы найти всех пользователей, которые неактивны в течении, например, 10 недель:
dsquery user domainroot -inactive 10
Идентификация и аутентификация (ИА) в ОС Windows
Сущность этих процедур состоит в том, что при входе в систему пользователь передает в системную функцию LogonUser свое имя, пароль и имя рабочей станции или домена, в котором данный пользователь зарегистрирован. Если пользователь успешно идентифицирован, функция LogonUser возвращает указатель на маркер доступа пользователя, который в дальнейшем используется при любом его обращении к защищенным объектам системы.
Механизм ИА пользователя в ОС Windows NT реализуется специальным процессом Winlogon, который активизируется на начальном этапе загрузки ОС и остается активным на протяжении всего периода ее функционирования. Ядро ОС регулярно проверяет состояние данного процесса и в случае его аварийного завершения происходит аварийное завершение работы всей ОС. Помимо аутентификации пользователя Winlogon реализует целый ряд других функций, таких как переключение рабочих полей (desktop), активизация хранителей экрана, а также ряд сетевых функций.
Процесс Winlogon состоит из следующих модулей:
- — ядро процесса Winlogon. ехе;
- — библиотека GINA: (Graphic Identification and Autentication — графическая библиотека идентификации и аутентификации); динамическая библиотека функций, используемых для «локальной» идентификации пользователя (идентификации пользователя на рабочей станции);
- — библиотеки сетевой поддержки (Network Provider DLLs), реализующие «удаленную» идентификацию пользователей (идентификацию пользователей, обращающихся к ресурсам сервера через Сеть).
Библиотека GINA и библиотеки сетевой поддержки являются заменяемыми компонентами процесса Winlogon. Конфигурация библиотек сетевой поддержки определяется протоколами и видами сервиса поддерживаемой сети. При этом конфигурация библиотеки GINA определяется требованиями к механизму локальной идентификации.
В каждый момент времени технологического процесса Winlogon может находиться в одном из следующих состояний рис.3.2.
Когда пользователь еще не вошел в систему, Winlogon находится в состоянии 1, пользователю предлагается идентифицировать себя и предоставить подтверждающую информацию (в стандартной конфигурации — пароль). Если информация, введенная пользователем, дает ему право входа в систему, активизируется оболочка системы (как правило, Program Manager) и Winlogon переключается в состояние 2.
Хотя в состоянии 1 ни один пользователь не может непосредственно взаимодействовать с системой, если на рабочей станции запущен Server Service, пользователи могут обращаться к ресурсам системы через сеть.
Когда пользователь вошел в систему, Winlogon находится в состоянии 2. В этом состоянии пользователь может прекратить работу, выйдя из системы, или заблокировать рабочую станцию. В первом случае Winlogon завершает все процессы, связанные с завершающимся сеансом, и переключается в состояние 1. Во втором случае Winlogon выводит на экран сообщение о том, что рабочая станция заблокирована, и переключается в состояние 3.
Рис. 3.2. Функциональная схема диспетчера доступа 1 — пользователь не вошел в систему; 2 — пользователь вошел в систему; 3 — рабочая станция заблокирована
В состоянии 3 Winlogon выводит на экран приглашение пользователю идентифицировать себя и разблокировать рабочую станцию. Это может сделать либо заблокировавший ее пользователь, либо администратор. В первом случае система возвращается в то состояние, в котором находилась непосредственно перед блокировкой, и переключается в состояние 2. Во втором случае все процессы, связанные с текущим сеансом, завершаются, и Winlogon переключается в состояние 1.
Когда рабочая станция заблокирована, фоновые процессы, запущенные пользователем до блокировки, продолжают выполняться.
Сразу после загрузки Winlogon инициализирует GINA, вызывая последовательно ее функции WlxNegotiate и Wlxlnitialize. Рабочая станция переходит в состояние «Пользователь не вошел в систему».
Когда пользователь собирается войти в систему с помощью комбинации клавиш Ctrl-Alt-Del, Winlogon вызывает функцию WlxLoggedOutSas библиотеки GINA. WlxLoggedOutSas осуществляет попытку входа в систему, вызывая системную функцию LogonUser. В зависимости от информации, введенной пользователем, GINA возвращает процессу Winlogon одно из следующих значений.
WLXSASACTIONLOGON — пользователь вошел в систему. Получив это значение, Winlogon вызывает функцию WlxActivateUserShell библиотеки GINA, которая загружает индивидуальную оболочку пользователя.
WLXSASACTIONNONE — пользователь не смог войти в систему. Состояние системы не изменяется.
WLX SAS ACTION SHUTDOWN — пользователь потребовал завершить работу системы. Эта возможность может быть отключена (см. выше). Получив данное возвращаемое значение, Winlogon последовательно вызывает функции библиотеки GINA WlxLogoff и WlxShutdown.
Если пользователь нажал комбинацию Ctrl-Alt-Del, уже войдя в систему, Winlogon вызывает функцию WlxLoggedOnSas. GINA выводит на экран диалоговое окно и в зависимости от решения пользователя выполняет следующие действия:
- — если пользователь решил не предпринимать никаких действий, GINA возвращает в Winlogon значение WLXSASACTIONNONE. Winlogon возвращает систему в то же состояние, в котором она была до нажатия комбинации Ctrl-Alt-Del;
- — если пользователь желает просмотреть список активных процессов, GINA возвращает значение WLXSASACTIONTASKLIST. Winlogon возвращает систему в состояние, в котором она была до нажатия комбинации Ctrl-Alt-Del и активизирует процесс Task Manager;
- — если пользователь желает заблокировать рабочую станцию, GINA возвращает значение WLX_SAS_ACTION_LOCK_WKSTA. Winlogon блокирует систему;
- — если пользователь желает выйти из системы, GINA возвращает значение WLXSASACTIONLOGOFF. Winlogon в ответ вызывает функцию GINA WlxLogoff;
- — если пользователь желает завершить работу с компьютером,
GINA возвращает значение WLX_SAS_ACTION_SHUTDOWN. Winlogon последовательно вызывает функции GINA WlxLogoff
— если пользователь желает перезагрузить компьютер, GINA возвращает значение WLX_SAS_ACTION_SHUTDOWN_REBOOT. Winlogon последовательно вызывает функции GINA WlxLogoff
и WlxShutdown. По окончании выгрузки системы компьютер автоматически перезагружается;
— если пользователь желает закончить работу с компьютером и
выключить его, GINA возвращает значение
WLX_SAS_ACTION_SHUTDOWN_ REBO-OTPOWEROFF. Winlogon последовательно вызывает функции GINA WlxLogoff и WlxShutdown. По окончании выгрузки системы компьютер автоматически выключается. Если аппаратная часть компьютера не допускает программного отключения питания, данное возвращаемое значение имеет тот же эффект, что и WLX SAS ACTION SHUTDOWN;
— если пользователь желает изменить свой пароль, GINA выводит
на экран соответствующее диалоговое окно, по окончании ввода пользователем нового пароля вызывает функцию WlxChangePasswordNotify и затем возвращает в Winlogon значение
W LX_S ASACTIONP WDCH AN GED.
Когда рабочая станция заблокирована, а пользователь нажал комбинацию Ctrl-Alt-Del, Winlogon вызывает функцию GINA
WlxWkstaLockedSas. GINA запрашивает у пользователя параметры идентификации и проверяет их. В зависимости от результата проверки GINA возвращает одно из следующих значений:
- — WLXUNLOCKWKSTA — разблокировать рабочую станцию;
- — WLX_FORCE_LOGOFF — принудительный выход из системы с последующим входом в систему администратора;
- — WLX NO ACTION- рабочая станция остается заблокированной.
Если пользователь вошел в систему и один из процессов вызывает системную функцию ExitWindowsEx, Winlogon в зависимости от параметров ExitWindowsEx вызывает либо WlxLogoff, либо последовательно WlxLogoff и WlxShutdown. При этом, соответственно, либо пользователь выходит из системы, либо система завершает работу.
Если GINA получает от пользователя нестандартную SAS, она вызывает функцию Winlogon WlxSasNotify, после чего Winlogon вызывает одну из вышеперечисленных функций GINA в зависимости от контекста, в котором была получена SAS.
Для изучения процесса идентификации и аутентификации можно использовать приводимый ниже модуль DLL, который является «переходником» между WinLogon и стандартной MSGINA. Прототипы экспортируемых MSGINA.DLL описаны в файле winwlx.h стандартной поставки MS SDK.
Для активизации модуля xgina.dll необходимо создать ключ реестра (например, при помощи Regini с использованием следующего ini файла):
Вместо c:xgina.dll необходимо указать реальный путь, либо поместить библиотеку по заданному пути.