Инвентаризация компьютеров, мониторинг ПО и USB устройств
Немного отступления. Работаю в ИТ отделе государственного учреждения и специфика работы организация такова, что запрещается на рабочем компьютере работать в локальной сети учреждения и одновременно иметь доступ к Интернету. Либо выделенный компьютер, на котором только Интернет, либо только локальная сеть.
В один прекрасный день начальство озаботило сбором информации о том, что твориться на компьютерах сотрудников после инцидента, когда высокое начальство застало в рабочее время кого-то за увлеченной баталией в Сall of Duty (лицом к двери надо сидеть!!!). После этого начальство заинтересовалось, что творится на компьютерах сотрудников.
Зоопарк – где-то около 2-3 тысяч компьютеров, большей частью под управлением MS Windows. Пользователи – в основном сотрудники, для которых компьютер нужен только как печатная машинка, которые если что-то не так даже толком объяснить не смогут, что не работает, продвинутые конечно есть, но это больше как исключение. Проблема еще в том, что народ в Интернет стал лазить через USB модемы сотовых операторов, нарушая «политику партии» и проконтролировать ответственность сотрудников становиться сложнее.
Информацию о компьютерах мы собирали и до этого в виде полугодовых отчетов в электронном виде (удобном для подсчета статистики для нас) от материально ответственных людей, потом приспособили всем известную checkcfg + оболочка для нее, в которой дополнительно вводились необходимые нам данные, в виде отдела, инвентарного номера и т.д. Материально ответственный делал обход с программкой на флешке. Собранные данные отсылались на сервер либо автоматически по ftp, либо почтой на сервер, где в дальнейшем по данным делалась сводка.
Было решено, что в новой реализации все данные будут отсылаться незаметно для пользователя. А также дополнительно передаваться информация о подключаемом оборудовании (да и для будущего неплохая задумка, вдруг какая база уйдет или еще что, а тут полный список всего, что подключалось). Актуально для поиска модемов.
Из готового по духу наиболее близок OCS Inventory. Но опять таки, хотелось, чтобы все работало скрытно, было автообновление. Осуществлялась передача как полной информации о компьютере, так и по вновь устанавливаемому ПО и USB устройствам, подключение, отключение.
Как таковых проблем доступа с рабочих машин к нужным серверам нет.
Дело за малым – реализация.
Так как постоянно будет что-то добавляться, модифицироваться и т.д. бегать по такому количеству компьютеров дело неблагодарное, поэтому необходимо предусмотреть реализацию автоматического обновления. В системе себя никак не проявлять, чтобы всякие умные не вынесли агента из запущенных процессов.
Клиент. Состоит из двух частей:
Агент – сидит в памяти, время от времени «просыпаться», проверяет реестр (ветку uninstall) на новое установленное ПО, запоминает изменения. Если есть изменения – отсылает данные на сервер. В более редком случае (временные интервалы можно варьировать) отсылает более подробную информацию о компьютере. Фиксация подключения/отключения USB устройств осуществляется через событие DEVICE_NOTIFY_WINDOW_HANDLE. Все данные, отправляемые на сервер, подвергаются несложному шифрованию. Агент проверяет и обновляет параметры, которые лежат на сервере, такие как: периодичность отправления информации, время поиска нового ПО, время опроса новых параметров и т.д. и.т.п.
Для каждого компьютера формируется идентификатор по аппаратно-программной части компьютера (по данным о процессоре, материнской плате, системе). В дальнейшем к данному идентификатору привязывается собранная информация на сервере.
Сервис – проверяет наличие запущенного агента. Если его не находит — запускает. Если удалили бинарник — восстанавливает из «запасного» места и запускает. Если и там нет — скачивает с сервера. Проверяет обновление, при появлении новой версии — скачивает и заменяет агента (около 300кб).
Как показала практика, этого оказалось достаточно, для счастливой жизни агента, процесс реанимировался сервисом, если что-то с ним было не так (например, прибил пользователь).
Инсталлятор клиентского ПО собран с использованием Inno Setup, что упростило процесс инсталляции. Копирует необходимые файлы, проверяет наличие сервиса, устанавливает сервис, осуществляет запуск, записывает необходимые данные в реестр. Дополнительно при инсталляции запрашиваются инвентарный номер и отдел, чтобы знать откуда данные.
Серверная часть.
Реализована на PHP. Все данные передаются методом POST, дешифруются и хранятся на данный момент пока в обычном текстовом виде (лишь бы работало на данный момент) + простой web frontend.
Немного скриншотов:
Сводка по установке ПО
Подключение/Отключение USB устройств:
Более подробная информация о составе компьютера по идентификатору.
Основная информация:
Софт в системе:
Все, что подключалось по USB:
Предыдущая версии сбора информации показала интересную статистику по модемам:
Билайн – 0%
Мегафон – 50%
МТС – 50%
Как дойдут руки, надо еще доделать:
- В серверной части организовать хранение данных в базе, а не в текстовых файлах.
- Ввести историю изменений конфигурации компьютера.
- В клиентской части сжимать данные при передаче полной информации о компьютере (сейчас это где-то от 20 до 100кб).
- Если проблемы сетью, то накапливать на клиенте, при появлении связи — их передача.