 # PC park observer - система учёта комплектующих компьютеров парка, базирующегося на MS Windows
 
 
![PC park observer ](https://github.com/constantinekg/pcpo/blob/main/img/biglogo.png?raw=true "PC park observer ")
 
 ## Для чего эта система

Данная система предназначена для учёта комплектующих в компьютерном парке, базирующемся на Windows. Я выложил систему под GNU/GPL v. 3 лицензией, так что денег не прошу, можете использовать как угодно... Все пожелания и т.п. обсуждаются отдельно...
Особенности и возможности

Система работает под управлением ОС GNU Linux (на данный момент успешно обкатана на ubuntu 20.04).  Система собирает информацию и создаёт оповещения в случае изменений в необходимых хостах (в частности информацию об:

- мак адрес сетевого адаптера
- ip адрес
- имя хоста
- информацию о мат. плате (по возможности и её серийный номер)
- информацию о процессоре (по возможности и её серийный номер)
- информацию об оперативной памяти (по возможности серийный номер, тип памяти - ECC или не ECC, объём)
- видеоадаптер (с указанием PNP Device id)
- жёсткие диски (можно опционально включить проверку тех, что подключены по USB или iSCSI) - серийный номер, модель, объём

).

Система позволяет производить анализ изменений, а также выгрузку данных в различные форматы и т.п.

Доступ к системе регулируется на основе двух ролей - администраторов (могут менять системные настройки и менять перечень проверяемых сетей/хостов); менеджеров - могут просматривать статистику и аналитику по проверяемым хостам.

## Реальные кейсы применения:

1. Воруют периодически железо - если настроить обходчик на довольно частый период, то можно вполне поймать вора (так уже было обкатано и в ментуру система отправила свою пачку крыс). В этом случае одной данной системы мало, лучше ещё запастись системой видео наблюдения и/или СКУДом... 

2. Надо держать актуализированную информацию о железе в парке конторы, т.к. бывает её запрашивает бухгалтерия.

3. Контролировать непонятные периодически возникающие в сети флешки с хер понятными линуксами. Если (положим по ИБ) запрещено совать в компьютеры флешки с кали...

В целом на реальном кейсе данная система работает вне пределов проверяемой локальной сети, так что тамошние админы в сути не могут повлиять на данные, находящиеся в БД системы. Для такого достаточно виртуалку с данной системой расположить ~~у себя на балконе~~ на каком нибудь хостинге и пробросить VPN до проверяемой сети. **При этом на клиентских машинах ничего устанавливать НЕ НУЖНО.**  Единственными условиями успеха проверки выступают открытый 135 tcp порт на проверяемых машинках и ваше знание о паре логина/пароля для авторизации на них. В реальном кейсе, на текущий момент обход и сбор информации с 370 хостов производится примерно за 2 минуты с тонко подкрученными настройками.

## Как всё пашет под капотом

1. Запускается nmap, в который передаются для проверки необходимые сети/хосты (к примеру 192.168.0.0/24 и заодно отдельно скажем проверить 192.168.22.2/32).

2. Nmap быстренько проверяет открытость портов по указанным диапазонам и формирует список "живых" хостов.

3. Далее по живым хостам начинается сбор информации о железе и прочем через протокол WMI.

4. Если не получилось в ходе забора информации с хоста получить данные (ну может отключили компик именно в это время), то он помечается как недоступный и съём инфы идёт дальше.

5. По мере получения инфы с хостов они сразу заносятся в БД и сопоставляются с ранее полученными данными по данному хосту. Опорной точкой сравнения является MAC адрес сетевого адаптера хоста. 

6. По желанию в случае появления информации о новых, изменённых хостах может формироваться отправка сообщения о событии в телеграм (для этого нужно вам будет завести бота и выяснить id чата, куда кидать уведомления).

7. Также по желанию может быть сформирован сводный отчёт, который полетит на почту.

## Минимальные системные требования

Вполне подойдёт виртуалка со скромными параметрами (скажем пара ядер на проце, хотя бы 1024 мгб ОЗУ и места на диске гигов так в 15).

## Установка

Перед установкой на боевую машинку достаточно на ней сконфигурировать правильно сеть, после чего:

```
sudo -s
wget https://raw.githubusercontent.com/constantinekg/pcpo/main/doc/INSTALL.txt -O install.sh && chmod +x install.sh && ./install.sh
```
 
## Первоначальная настройка

**Администратор по умолчанию:**

>> login: pcpoadmin

>> password: pcpoadmin1

Перед первым запуском необходимо войти в систему, открыв в браузере айпишник/доменное имя машинки, на которую была произведена установка. Далее перейти в раздел Настройки->Проверяемые сети/хосты и добавить необходимые диапазоны с указанием логина-пароля:

![Проверяемые сети/хосты и добавить необходимые диапазоны](https://github.com/constantinekg/pcpo/blob/main/img/p1.png?raw=true "Проверяемые сети/хосты и добавить необходимые диапазоны")

Далее идём в командную строку и выполняем первую проверку:

```
root@pcpo:~# /opt/pcpo/scanner/rerun.sh
```

Как только первая проверка завершится - можем идти в системные настройки и выставлять там параметры согласно нашим пожеланиям. После того, как все настройки будут выставлены - мы можем запланировать проверку на периодическую основу. Для этого откроем crontab (crontab -e) и добавим примерно такое:

```
#exec main data fetching process
3 */1 * * * /opt/pcpo/scanner/rerun.sh
```

Такая строчка позволит нам начинать проверку каждую третью минуту каждого часа. 

### Ресурсы:

Проект на гитхабе: https://github.com/constantinekg/pcpo

Готовый образ машины в формате qcow2:  https://cloud.mail.ru/public/1EkR/b3DGfh2de

Обсуждение на хабре: https://habr.com/ru/post/570190/

### Отдельные благодарности:

    Александру (в миру Михалыч) за площадку для обкатки и воплощение старой идеи 
     Димону за отладку и терпение
    Артёму за крутой логотип
