- 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
557 lines
13 KiB
Markdown
557 lines
13 KiB
Markdown
# 🛡️ 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
|
|
|