Блог системного администратора - Сообщения с тегом "logon"

 

Определения кто из пользователей за каким компьютером работает. AD.

Всегда имел желание написать цикл постов, где был бы понемногу изложены разные интересные мелочи и задачи, которые приходилось решать в повседневной рутине системного администратора.
Возможно, кое-что из описанного будет полезно другим сисадминам.

Сразу оговорюсь, что в качестве исходных данных имею Windows среду и домен Active Directory, причем ОС преимущественно WindowsXP — Server2003. Ну и обслуживаемые компании были в основном некрупными (от 30 до 500 пользователей).

Начнем, пожалуй, c часто встречаемой задачи определения кто из пользователей за каким компьютером работает.

Для решения этой задачи были перепробованы разные методики:
•именование машин по именам пользователей (нудно. Через пару месяцев начинаешь забывать переименовать компьютер, и система катится в хаос)
•строгий учет кому куда можно ходить где нибудь в отдельном Excel и установка прав на логон только на конкретную машину и т.д. (чистой воды паранойя, была у одного из клиентов. ОЧЕНЬ нудно и муторно)
•Использование сторонних утилит от bginfo и psloggedon от Sysinternals, до всевозможных Hyena и Ideal Administrator (большая часть стоит денег, не всегда корректно работают, или слишком открытые, например в случае с BgInfo на рабочем столе становится видна информация, которую не хотелось бы чтобы видели абсолютно все. Возможно это паранойя – но не хочется чтобы толпы неизвестных людей в отделе продаж или на ресепшне узнали внутреннее имя компьютера, пользователя, IP и т.п. просто взглянув на экран.

В результате, мы "построили свой лунапарк с VBS и пользователями", и написали 2 небольших логон-логоф скрипта, которые запускаются групповой политикой на уровне всего домена при входе пользователя в систему, и при выходе из нее соответственно.


ЛОГОН-Вариант

Dim adsinfo, ThisComp, oUser

' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)

' Заносим данные в AD
' В поле Department компьютера пишем имя пользователя, и время входа
Thiscomp.put "Department", "Logged on: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

'В поле Department учетки пользователя пишем имя компьютера и время входа
oUser.put "Department", "Logged on: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo
wscript.quit


ЛОГОФФ-Вариант

Dim adsinfo, ThisComp, oUser

' Определяем объекты
Set adsinfo = CreateObject("adsysteminfo")
Set ThisComp = GetObject("LDAP://" & adsinfo.ComputerName)
Set oUser = GetObject("LDAP://" & adsinfo.UserName)

' Заносим данные в AD
' В поле Department компьютера пишем имя пользователя, и время входа
Thiscomp.put "Department", "Logged off: " + oUser.cn + " " + CStr(Now)
ThisComp.Setinfo

'В поле Department пользователя пишем имя компьютера и время входа
oUser.put "Department", "Logged off: " + ThisComp.cn + " " + CStr(Now)
oUser.Setinfo
wscript.quit
Пояснения по коду наверное не нужны, скрипт элементарен, расскажу лишь про плюсы скрипта которые в моей ситуации значительно перевесили минусы (о которых тоже расскажу).


Плюсы

•при таком скрипте достаточно настроить в оснастке AD отображение одного дополнительного столбца (в нашем случае department) и можно будет четко видеть где кто работает в данный момент, когда он туда залогинился, либо если на компьютере никто не работает – то кто на нем работал последним, и когда вышел из системы
•Не привлекается никакого стороннего ПО, нагрузка на систему (время входа пользователя) увеличивается очень незначительно
•Легко и наглядно отслеживается наличие старых объектов компьютеров-пользователей в AD (по дате последнего логина)
•Данные централизованно хранятся в AD и не нужно никакого дополнительного хранилища (файла, папки, БД и т.п.). Данные дублируются в объектах Пользователь и Компьютер, т.е. можно отследить ситуацию «дважды под одним и тем же вошел на разных компьютерах».
•Выбраны наименее используемые (у нас и у всех тех организаций, с которыми я работал) ОБЩИЕ для объектов пользователь и компьютер поля AD. Это плюс, потому что если бы поля были разными – то пришлось бы добавлять отображение лишних столбцов в оснастке AD
•Легко корректировать скрипт по своему усмотрению (выбирать другие поля для хранения данных, писать дополнительно в текстовый файл, исключать из обработки отдельных пользователей или компьютеры (например терминальные сервера), и т.д.)


Минусы

•НЕ ХРАНИТСЯ история входов, т.е. записано только текущее состояние. Если история входов нужна, то временно можно добавив несколько строк кода писать информацию еще и в сетевой файл, а если нужна постоянно – то лучше подумать о другом методе учета.
•Требуется выдать дополнительное разрешение Write\Modify на поле Department объектов Компьютер и Пользователь в AD для всех доменных пользователей. Минус в моей ситуации сомнительный, но и отрицать его не буду – он есть.

Продолжение следует (если, конечно, вам интересно читать такие «опытные мелочи»)