# 🛡️ 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: ```bash 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:** ```json { "success": true, "policy": { "id": 1, "name": "Forçar Windows Update Mensal", "type": "windows_update", ... } } ``` --- ### 2. **Aplicar Política a Dispositivos** ```bash 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** ```bash 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: ```bash curl -X POST https://admin.noidle.tech/api/policies/1/execute ``` --- ### 4. **Ver Histórico de Execuções** ```bash curl https://admin.noidle.tech/api/policies/1/executions ``` **Resposta:** ```json { "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 ```json { "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 ```json { "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 ```json { "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 ```json { "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 ```json { "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 ```json { "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`: ```python 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 ```powershell pyinstaller --onefile --windowed --name NoIdle CLIENTE_CORRIGIDO.py ``` --- ## 📊 Banco de Dados ### Criar Tabelas MDM ```bash 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 ```bash curl https://admin.noidle.tech/api/mdm/stats/DEV-123 ``` **Resposta:** ```json { "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: ```bash # 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 ```bash cd /var/www/noidle/backend # Criar tabelas MDM psql $DATABASE_URL -f create_mdm_tables.sql # Reiniciar API pm2 restart noidle-api ``` ### 2. Cliente ```bash # 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: - [x] Criar tabelas SQL - [x] Criar rotas `/api/policies` - [x] Criar rotas `/api/mdm` - [x] Adicionar rotas ao server.js - [ ] Testar com Postman ### Cliente: - [x] 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: - [x] 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