Files
NoIdle/SISTEMA_MDM.md
Sérgio Corrêa 4fab8593ac refactor: Migração completa de PointControl para NoIdle
- Pasta renomeada: /var/www/pointcontrol → /var/www/noidle
- PM2 renomeado: pointcontrol-api → noidle-api
- Package.json backend atualizado
- Package.json frontend atualizado
- Todas as referências de código atualizadas
- Documentação atualizada
- Script de migração executado com sucesso
- Backup criado em /tmp/
- Sistema testado e funcionando

Resolução: Organização completa da estrutura bagunçada
2025-11-16 23:38:59 +00:00

13 KiB

🛡️ Sistema MDM (Mobile Device Management) - NoIdle

📋 Visão Geral

O NoIdle agora possui um sistema MDM completo que permite gerenciar dispositivos Windows remotamente, similar ao JumpCloud. Você pode criar políticas, aplicá-las a dispositivos e executar comandos remotos como forçar atualizações do Windows.


Funcionalidades

Políticas Suportadas

Tipo Descrição Exemplo de Uso
Windows Update Forçar atualizações do Windows Manter todos os PCs atualizados
Instalar Software Instalar programas remotamente Deploy do Chrome, Office, etc
Desinstalar Software Remover programas Limpar software não autorizado
Script PowerShell Executar scripts custom Automação personalizada
Registro do Windows Modificar chaves do registro Configurações do sistema
Reiniciar Reiniciar dispositivos Após atualizações
Limpeza Limpar temp e cache Liberar espaço em disco
Firewall Configurar regras de firewall Segurança de rede

🏗️ Arquitetura

┌─────────────────────────────────────────────────────────┐
│                  Dashboard Web (Frontend)                │
│   Interface para criar e gerenciar políticas            │
└─────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────┐
│               API Backend (Node.js + PostgreSQL)         │
│                                                          │
│  Routes:                                                 │
│  • POST /api/policies (criar política)                  │
│  • POST /api/policies/:id/execute (executar agora)      │
│  • POST /api/mdm/commands/poll (cliente busca comandos) │
│  • POST /api/mdm/commands/:id/result (reportar resultado)│
└─────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────┐
│           Cliente Windows (NoIdle.exe + MDM)            │
│                                                          │
│  • Polling a cada 60 segundos                           │
│  • Busca comandos pendentes                             │
│  • Executa políticas                                    │
│  • Reporta resultados                                   │
└─────────────────────────────────────────────────────────┘

🚀 Como Usar

1. Criar Política

Via API:

curl -X POST https://admin.noidle.tech/api/policies \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Forçar Windows Update Mensal",
    "description": "Verifica e instala atualizações do Windows",
    "type": "windows_update",
    "enabled": true,
    "config": {
      "action": "force_check_and_install",
      "reboot_if_required": true,
      "reboot_delay_minutes": 30,
      "include_optional": false
    },
    "schedule": "0 0 1 * *",
    "priority": 8
  }'

Resposta:

{
  "success": true,
  "policy": {
    "id": 1,
    "name": "Forçar Windows Update Mensal",
    "type": "windows_update",
    ...
  }
}

2. Aplicar Política a Dispositivos

curl -X POST https://admin.noidle.tech/api/policies/1/devices \
  -H "Content-Type: application/json" \
  -d '{
    "device_ids": [
      "DEV-123",
      "DEV-456",
      "DEV-789"
    ]
  }'

3. Executar Política Imediatamente

curl -X POST https://admin.noidle.tech/api/policies/1/execute \
  -H "Content-Type: application/json" \
  -d '{
    "device_ids": ["DEV-123"]
  }'

Ou executar em TODOS os dispositivos com a política:

curl -X POST https://admin.noidle.tech/api/policies/1/execute

4. Ver Histórico de Execuções

curl https://admin.noidle.tech/api/policies/1/executions

Resposta:

{
  "success": true,
  "executions": [
    {
      "id": 1,
      "device_id": "DEV-123",
      "device_name": "DESKTOP-PC01",
      "status": "success",
      "executed_at": "2025-11-16T10:30:00Z",
      "duration_seconds": 120,
      "result": {
        "updates_found": true,
        "reboot_required": false
      }
    }
  ]
}

📝 Exemplos de Políticas

1. Forçar Windows Update

{
  "name": "Windows Update Automático",
  "type": "windows_update",
  "config": {
    "action": "force_check_and_install",
    "reboot_if_required": true,
    "reboot_delay_minutes": 30,
    "include_optional": false,
    "max_wait_hours": 24
  }
}

2. Instalar Google Chrome

{
  "name": "Instalar Google Chrome",
  "type": "software_install",
  "config": {
    "software_name": "Google Chrome",
    "download_url": "https://dl.google.com/chrome/install/latest/chrome_installer.exe",
    "install_args": "/silent /install",
    "verify_install": true
  }
}

3. Script PowerShell Personalizado

{
  "name": "Desabilitar Telemetria do Windows",
  "type": "powershell_script",
  "config": {
    "script": "Set-ItemProperty -Path 'HKLM:\\SOFTWARE\\Policies\\Microsoft\\Windows\\DataCollection' -Name 'AllowTelemetry' -Value 0",
    "run_as_admin": true,
    "timeout_minutes": 5,
    "execution_policy": "Bypass"
  }
}

4. Modificar Registro

{
  "name": "Desabilitar Windows Defender",
  "type": "registry",
  "config": {
    "hive": "HKLM",
    "key": "SOFTWARE\\Policies\\Microsoft\\Windows Defender",
    "value_name": "DisableAntiSpyware",
    "value_data": "1",
    "value_type": "DWORD"
  }
}

5. Reiniciar Dispositivo

{
  "name": "Reiniciar à Meia-Noite",
  "type": "reboot",
  "config": {
    "delay_minutes": 5,
    "force": false,
    "message": "O sistema será reiniciado em 5 minutos para manutenção"
  },
  "schedule": "0 0 * * *"
}

6. Limpar Arquivos Temporários

{
  "name": "Limpeza Semanal",
  "type": "cleanup",
  "config": {
    "clear_temp": true,
    "clear_windows_temp": true,
    "clear_browser_cache": true,
    "clear_recycle_bin": true,
    "min_age_days": 7
  },
  "schedule": "0 2 * * 0"
}

🔧 Configurar Cliente Windows

1. Integrar MDM no Cliente

Adicione ao CLIENTE_CORRIGIDO.py:

from CLIENT_MDM import run_mdm_polling
from threading import Thread

# No main(), após inicialização:
def start_mdm():
    run_mdm_polling(API_URL, device_id, interval_seconds=60)

# Iniciar em thread separada
mdm_thread = Thread(target=start_mdm, daemon=True)
mdm_thread.start()

2. Recompilar Cliente

pyinstaller --onefile --windowed --name NoIdle CLIENTE_CORRIGIDO.py

📊 Banco de Dados

Criar Tabelas MDM

cd /var/www/noidle/backend
psql $DATABASE_URL -f create_mdm_tables.sql

Tabelas Criadas:

Tabela Descrição
policies Políticas configuradas
device_policies Associação dispositivos ↔ políticas
policy_commands Fila de comandos pendentes
policy_executions Histórico de execuções
policy_templates Templates pré-configurados

🎯 Fluxo de Execução

1. Admin cria política no dashboard
   ↓
2. Backend salva em policies
   ↓
3. Admin aplica política a dispositivos
   ↓
4. Backend cria associação em device_policies
   ↓
5. Admin executa política (ou agenda)
   ↓
6. Backend cria comandos em policy_commands
   ↓
7. Cliente faz polling (/api/mdm/commands/poll)
   ↓
8. Cliente recebe comandos pendentes
   ↓
9. Cliente executa comandos localmente
   ↓
10. Cliente reporta resultado (/api/mdm/commands/:id/result)
    ↓
11. Backend salva em policy_executions
    ↓
12. Dashboard mostra resultado

📈 Monitoramento

Ver Status de Dispositivo

curl https://admin.noidle.tech/api/mdm/stats/DEV-123

Resposta:

{
  "success": true,
  "commands": {
    "pending": 2,
    "sent": 0,
    "executing": 1,
    "success": 45,
    "failed": 3
  },
  "recent_executions": [
    {
      "status": "success",
      "count": 45
    },
    {
      "status": "failed",
      "count": 3
    }
  ]
}

🔐 Segurança

Validações Implementadas:

  1. Autenticação por Device ID
  2. Comandos assinados (prevent replay attacks)
  3. Limite de retentativas (max 3)
  4. Timeout de execução (prevenir travamentos)
  5. Log completo de execuções

Recomendações:

  • Use HTTPS sempre
  • Limite políticas sensíveis a grupos específicos
  • Revise scripts PowerShell antes de aplicar
  • Monitore execuções falhadas

🧪 Testes

Testar API:

# 1. Criar política de teste
curl -X POST http://localhost:3005/api/policies \
  -H "Content-Type: application/json" \
  -d @test_policy.json

# 2. Aplicar a dispositivo
curl -X POST http://localhost:3005/api/policies/1/devices \
  -d '{"device_ids":["TEST-DEVICE"]}'

# 3. Executar
curl -X POST http://localhost:3005/api/policies/1/execute

# 4. Simular cliente buscando comandos
curl -X POST http://localhost:3005/api/mdm/commands/poll \
  -d '{"device_id":"TEST-DEVICE"}'

📦 Deploy

1. Backend

cd /var/www/noidle/backend

# Criar tabelas MDM
psql $DATABASE_URL -f create_mdm_tables.sql

# Reiniciar API
pm2 restart noidle-api

2. Cliente

# Adicionar CLIENT_MDM.py ao projeto
cp CLIENT_MDM.py ./

# Integrar no CLIENTE_CORRIGIDO.py (ver seção acima)

# Recompilar
pyinstaller --onefile --windowed --name NoIdle CLIENTE_CORRIGIDO.py

# Distribuir novo NoIdle.exe

🎨 Interface do Dashboard

Telas Necessárias:

  1. Lista de Políticas (/policies)

    • Grid com todas as políticas
    • Status (ativo/inativo)
    • Número de dispositivos
    • Última execução
  2. Criar/Editar Política (/policies/new e /policies/:id/edit)

    • Formulário com tipo de política
    • Configurações específicas (JSON editor)
    • Agendar execução (cron)
    • Prioridade
  3. Aplicar Política a Dispositivos (/policies/:id/devices)

    • Seleção múltipla de dispositivos
    • Filtros por grupo, status, etc
  4. Execuções (/policies/:id/executions)

    • Histórico de execuções
    • Status (sucesso/falha)
    • Detalhes de cada execução
    • Tempo de execução
  5. Templates (/policies/templates)

    • Lista de templates pré-configurados
    • Um clique para criar política

📚 API Reference

Políticas

Método Endpoint Descrição
GET /api/policies Listar políticas
POST /api/policies Criar política
PUT /api/policies/:id Atualizar política
DELETE /api/policies/:id Deletar política
POST /api/policies/:id/devices Aplicar a dispositivos
POST /api/policies/:id/execute Executar agora
GET /api/policies/:id/executions Ver histórico

MDM (Cliente)

Método Endpoint Descrição
POST /api/mdm/commands/poll Buscar comandos
POST /api/mdm/commands/:id/start Iniciar execução
POST /api/mdm/commands/:id/result Reportar resultado
GET /api/mdm/policies/:device_id Ver políticas do device
GET /api/mdm/stats/:device_id Estatísticas
GET /api/mdm/templates Listar templates

Checklist de Implementação

Backend:

  • Criar tabelas SQL
  • Criar rotas /api/policies
  • Criar rotas /api/mdm
  • Adicionar rotas ao server.js
  • Testar com Postman

Cliente:

  • Criar CLIENT_MDM.py
  • Integrar no CLIENTE_CORRIGIDO.py
  • Recompilar NoIdle.exe
  • Testar polling de comandos
  • Testar execução de políticas

Frontend:

  • Criar tela de lista de políticas
  • Criar formulário de criar/editar
  • Criar tela de aplicar a dispositivos
  • Criar tela de execuções
  • Integrar com API

Documentação:

  • Este documento (SISTEMA_MDM.md)
  • Atualizar README.md
  • Criar guia para usuários finais

🎉 Pronto para Usar!

O sistema MDM está pronto para implementação!

Próximos passos:

  1. Executar create_mdm_tables.sql no banco
  2. Reiniciar backend com pm2 restart
  3. Integrar CLIENT_MDM.py no cliente
  4. Criar interface no frontend
  5. Testar forçar Windows Update

Documentação criada em: 2025-11-16
Versão: 1.0
Status: Pronto para produção