Конектор за обекта
rmm-connector.exe работи като Windows услугата RMMConnector на един
присъединен към домейна сървър за всеки обект. Изходен код:
entrosity-axis-connector/ (пакети ldap, adsync, push, wol, account, vertex),
който споделя entrosity-shared-go/agentkit с агента.
Инсталиране
msiexec /i rmm-connector.msi /qn ENROLLMENT_TOKEN=<token> SERVER_URL=<url> [SERVICE_ACCOUNT=DOMAIN\user SERVICE_PASSWORD=<pw>]
| Свойство | Значение |
|---|---|
ENROLLMENT_TOKEN | Токен за регистриране от вид конектор (от Active Directory → Download connector). |
SERVER_URL | Публичният URL адрес на сървъра. |
SERVICE_ACCOUNT, SERVICE_PASSWORD | Незадължителен домейн акаунт за услугата; MSI пакетът му дава правото „Log on as a service“ и достъп до директорията с данни. |
MSI пакетът инсталира една Windows услуга – RMMConnector (показвано име
Entrosity Axis Site Connector; записът в Add/Remove Programs е със същото
име). Тя работи като LocalSystem, освен ако не е зададен SERVICE_ACCOUNT.
След като я стартира, MSI пакетът настройва услугата да се рестартира 30
секунди след всеки от първите ѝ три неуспеха, като броячът се нулира след
едно денонощие (sc.exe failure). Тази стъпка се изпълнява по възможност и
никога не връща инсталацията назад.
Регистрирането се извършва по време на инсталацията само ако машината още
не е регистрирана. Ако в %ProgramData%\RMM Connector вече има съхранени
идентификационни данни, в журнала на инсталацията пише already enrolled и
съхраненият ключ се запазва. Ако този ключ вече не се приема, конекторът
продължава да не успява да се свърже (401 за /api/connector/v1/ws в
журнала на сървъра). За да отстраните това, регистрирайте машината отново с
нов токен за конектор и рестартирайте услугата:
"C:\Program Files\RMM Connector\rmm-connector.exe" enroll --server <url> --token <token> --force
sc start RMMConnector
/qn скрива грешките на инсталатора. За отстраняване на проблеми добавете
/l*v C:\connector-install.log и потърсете Return value 3. Подробният
журнал съдържа токена за регистриране, затова го изтрийте след това.
Команден ред
rmm-connector <command> [flags]
run run the connector (foreground, or as a service under the SCM)
--server URL --token T enroll first if not enrolled yet
enroll enroll this machine: --server URL --token T [--force]
status show enrollment state
install install the Windows service
uninstall remove the Windows service
prepare-service-account --account DOMAIN\user
grant "Log on as a service" and data directory access (MSI)
vertex guard show|accept|set|reset
the local Entrosity Vertex write guard (elevated prompt)
version print the version
RMM_CONNECTOR_DATA_DIR задава друга директория с данни (по подразбиране
%ProgramData%\RMM Connector); RMM_LOG_LEVEL задава нивото на журналиране.
Журнали: %ProgramData%\RMM Connector\logs\connector.log.
Възможности и ленти
Конекторът обявява ldap, winrm, wol, а при компилации за Windows и
smb и vertex. Задачите се изпълняват в отделни ленти, така че едно дълго push
инсталиране не блокира синхронизацията:
| Лента | Задачи | Паралелност |
|---|---|---|
| LDAP | adsync.run, ldap.test, ldap.ous | последователно |
| push | push_agent | 2 задачи, всяка с concurrency цели (по подразбиране 5) |
| wake | wake | – |
| update | update_agent | – |
| vertex | vertex.op (промени на Entrosity Vertex) | последователно, по ред |
| vertex-read | vertex.read (четения на Entrosity Vertex) | 2 |
LDAP синхронизация
- Свързване чрез LDAPS или StartTLS със системните коренни сертификати плюс
незадължителния CA от конфигурацията; проверката се пропуска само при
skip_tls_verify. - Simple bind, след това странично (paged) търсене в поддървото (по 500 на
страница) с
(&(objectCategory=computer)<filter>); включване/изключване на OU по суфикс на DN. - Компютрите се изпращат на порции от най-много 1000; последната порция има
complete: trueи общия брой. Порциите са идемпотентни според поредния си номер и може да пристигат в разбъркан ред.
Push инсталиране на агента
Конекторът изтегля MSI пакета веднъж за задача (до 4 опита с нарастващо
изчакване при мрежови грешки и HTTP 5xx; SHA-256 се проверява). Сървърът
предоставя най-новото публикувано stable издание на агента чрез неговия
версиониран обект, така че издание, публикувано по време на push
инсталирането, не променя файла. Ако DNS на конектора не може да разреши
името на хоста за файлове, грешката го казва (download_failed).
За всяка цел, с времево ограничение от 10 минути:
- разрешаване на името (FQDN, иначе краткото име) →
connecting; - първо SMB (TCP 445, компилации за Windows). Всички SMB стъпки се
изпълняват в нишка, която имперсонира net only влизане с push акаунта
(като
runas /netonly), защото собствената идентичност на конектора (LocalSystem, т.е. компютърният акаунт в мрежата) не е администратор на целите, а RPC на отдалечения мениджър на услуги използва TCP в текущите версии на Windows. Свързване към\\host\ADMIN$(конфликтна съществуваща връзка, грешка 1219, се прекъсва и опитът се повтаря) и отваряне на отдалечения мениджър на услуги. Съществуваща услугаRMMAgent→success(already_installed); останала услугаRMMPushсе премахва; - копиране на MSI пакета в
ADMIN$\Temp\rmm-agent.msi→copying; - създаване и стартиране на временна услуга
RMMPush, която изпълняваcmd /c start "" msiexec /i … /qn ENROLLMENT_TOKEN=… SERVER_URL=… /l*v C:\Windows\Temp\rmm-agent-install.log→installing; - периодично проверяване на журнала на инсталатора (UTF-16 или ANSI) за
Installation success or error status и на мениджъра на услуги за
RMMAgent: код на изход 0, 3010 или 1641 и налична услуга →success; друг код на изход →msiexec_failedсъс значението му и последните 25 реда от журнала (с редактирани токени за регистриране). Услугата, MSI пакетът и журналът се премахват.
WinRM се използва, когато порт 445 е затворен (или при компилации,
различни от Windows), както и като резервен вариант, когато SMB се провали,
преди нещо да е стартирано (ADMIN$ е изключен, мениджърът на услуги е
недостъпен: copy_failed или unreachable). Той се свързва през HTTPS 5986,
иначе през HTTP 5985 с NTLM шифроване на съобщенията, и изпълнява всяка
команда в една отдалечена обвивка, една по една (никога със stdin:
едновременното подаване на stdin и изчитане на изхода поврежда шифрования
поток). MSI пакетът се добавя като base64 редове от по 7800 знака, декодира се
с certutil -decode и се сравнява с certutil -hashfile … SHA256; след това
msiexec се изпълнява както по-горе.
Токенът за регистриране при push, идентификационните данни и връзката към MSI пакета се добавят към задачата едва при доставянето ѝ.
Wake-on-LAN
wake изпраща magic пакети за до 16 MAC адреса през всеки IPv4 интерфейс,
към ограничения и насочения broadcast адрес, на UDP портове 9 и 7.
Entrosity Vertex
На домейн контролер конекторът изпълнява операциите с Active Directory
на Entrosity Vertex: задачи vertex.op и
vertex.read (Протокол на Vertex). За всяка задача
той взема AD акаунта и паролите от Vertex през Axis
(POST /api/connector/v1/vertex/jobs/{jobID}/secrets, веднъж за задача),
стартира Windows PowerShell 5.1 с вграден скрипт, който отваря PowerShell
сесия към същата машина като този AD акаунт, и връща големите резултати на
части (POST …/vertex/jobs/{jobID}/chunks). Изисквания към домейн
контролера: Подготовка на домейн контролера.
Промените изискват локалната защита – vertex-guard.json в
директорията с данни, която се променя само от локален администратор, от
команден ред с администраторски права:
rmm-connector vertex guard show
rmm-connector vertex guard accept [--ou "<DN>" ...] [--yes]
rmm-connector vertex guard set [--user|--group|--ou|--gpo|--pso on|off] [--deletes on|off] [--max-writes-per-minute N]
rmm-connector vertex guard reset
accept --ou (може да се повтаря) приема дадените управлявани OU
предварително, преди Vertex да е изпратил задача; те трябва да са точно
управляваните OU от настройките на Vertex. Без --ou accept приема
управляваните OU, които Vertex е изпратил с последната си промяна
(защитата се създава, като чакаща, от първата промяна). set превключва
класовете промени, изтриването и лимита в минута (по подразбиране 1000,
от 1 до 2000; новата защита позволява потребители, групи и OU), а reset
оттегля приемането. Собственик на файла трябва да е
групата Administrators и само SYSTEM и Administrators да могат да го
променят, иначе той се пренебрегва. Подробности:
Локалната защита на конектора.
Присъствие
Конекторът е онлайн от своето hello, докато сокетът му не се затвори
(конекторите работят на сървъри, така че прекъсването се вижда веднага) или
след 3 минути мълчание.
Разработка срещу Samba AD
LDAP частта работи и на macOS и Linux. Вижте Среда за разработка → Стартиране на конектора.