/ 00-SISTEMA / avaliacoes / 2026-02-04_OpenClaw_AI_Avaliacao_Impacto.md
2026-02-04_OpenClaw_AI_Avaliacao_Impacto.md
  1  # Avaliação de Impacto: OpenClaw AI no Raspberry Pi
  2  
  3  **Data**: 2026-02-04
  4  **Sistema**: Raspberry Pi 5 (8GB RAM, ARM64, Ubuntu)
  5  **Estado**: Estudo preliminar - Avaliação de segurança PENDENTE
  6  
  7  ## Resumo Executivo
  8  
  9  **Veredicto**: ⚠️ **Possível mas com limitações significativas**
 10  
 11  O OpenClaw AI pode funcionar neste Raspberry Pi 5, mas com compromissos de desempenho e algumas funcionalidades limitadas.
 12  
 13  ---
 14  
 15  ## Estado Atual do Sistema
 16  
 17  | Recurso | Disponível | Em Uso | Livre |
 18  |---------|-----------|--------|-------|
 19  | **RAM** | 7.6 GB | 4.4 GB | 3.2 GB |
 20  | **Disco** | 229 GB | 56 GB | 165 GB |
 21  | **Swap** | 1 GB | ~0 | 1 GB |
 22  | **CPU** | ARM Cortex-A76 (4 cores) | Variável | - |
 23  
 24  **Temperatura CPU**: 76.9°C (elevada, clamscan ativo)
 25  
 26  ### Processos Principais em Memória
 27  - `clamscan` + `clamd`: ~2 GB (antivírus)
 28  - `claude` (Claude Code): ~550 MB
 29  - GNOME Shell: ~280 MB
 30  - NoMachine (nxnode): ~260 MB
 31  
 32  ---
 33  
 34  ## Requisitos do OpenClaw AI
 35  
 36  | Requisito | Mínimo | Recomendado | Este Sistema |
 37  |-----------|--------|-------------|--------------|
 38  | **RAM** | 512 MB - 1 GB | 4 GB | ✅ 3.2 GB livre |
 39  | **Disco** | ~500 MB | 1-2 GB | ✅ 165 GB livre |
 40  | **Node.js** | v22+ | v22+ | ❌ Não instalado |
 41  | **Docker** | Opcional | Recomendado | ❌ Não instalado |
 42  | **Arquitetura** | x86/ARM64 | x86 | ⚠️ ARM64 (suportado mas com "rough edges") |
 43  
 44  ---
 45  
 46  ## Dependências a Instalar
 47  
 48  ### Obrigatórias
 49  1. **Node.js 22+** (~100 MB instalado)
 50     - Via NodeSource: `curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -`
 51     - Ou via nvm para melhor controlo
 52  
 53  2. **OpenClaw** (~200-500 MB)
 54     - `npm install -g openclaw@latest`
 55  
 56  ### Opcionais (Recomendadas)
 57  3. **Docker** (~400 MB + imagens)
 58     - Para sandboxing de sessões não-main
 59     - Aumenta segurança quando usado com canais externos
 60  
 61  4. **Chromium dedicado** (~300 MB)
 62     - Para automação de browser (já pode estar instalado)
 63  
 64  ---
 65  
 66  ## Análise de Impacto
 67  
 68  ### RAM (Principal Preocupação)
 69  | Cenário | Uso Estimado | RAM Livre Após |
 70  |---------|--------------|----------------|
 71  | Gateway idle | +200-300 MB | ~2.9 GB |
 72  | Gateway + 1 agente | +400-600 MB | ~2.6 GB |
 73  | Gateway + agente + browser | +800-1200 MB | ~2.0 GB |
 74  | Gateway + Docker sandbox | +500-800 MB extra | ~1.5 GB |
 75  
 76  **Risco**: Com clamscan ativo (2GB), a RAM livre pode esgotar durante tarefas pesadas.
 77  
 78  ### CPU
 79  - Gateway é leve em CPU (event-driven Node.js)
 80  - Agentes com browser automation são CPU-intensivos
 81  - **Risco**: Temperatura já elevada (77°C); tarefas pesadas podem causar throttling
 82  
 83  ### Disco
 84  - **Impacto mínimo**: ~1-2 GB para instalação completa
 85  - 165 GB livres são mais que suficientes
 86  
 87  ### Portas
 88  - OpenClaw usa `localhost:18789` (WebSocket Gateway)
 89  - **Sem conflitos** com portas atuais (Radicle: 8776, NoMachine: vários, Samba: 139/445)
 90  
 91  ---
 92  
 93  ## Compatibilidade ARM64
 94  
 95  ### Problemas Conhecidos
 96  1. **Binários nativos**: Alguns packages npm com código nativo podem não ter builds ARM64
 97     - `sharp` (processamento de imagem) - geralmente funciona
 98     - Packages obscuros podem falhar
 99  
100  2. **Chromium/Puppeteer**: Requer chromium-browser do sistema, não o bundled
101  
102  3. **Performance**: ~20-30% mais lento que x86 equivalente em algumas operações
103  
104  ### Recomendações da Comunidade
105  - Usar instalação via git (não npm global) para melhor debugging
106  - Adicionar skills/canais um de cada vez
107  - Monitorizar logs para erros de compatibilidade ARM
108  
109  ---
110  
111  ## Conflitos Potenciais
112  
113  | Serviço Atual | Conflito com OpenClaw | Mitigação |
114  |---------------|----------------------|-----------|
115  | Claude Code | Ambos usam muita RAM | Não usar simultaneamente para tarefas pesadas |
116  | ClamAV (clamd) | 1 GB RAM constante | Considerar desativar scan em tempo real |
117  | NoMachine | Usa ~260 MB | Conflito mínimo |
118  | Radicle Node | Usa pouca RAM | Sem conflito |
119  
120  ---
121  
122  ## Recomendações
123  
124  ### Antes de Instalar
125  1. **Parar clamscan** se estiver a correr (liberta ~1 GB)
126  2. **Considerar** desativar clamd daemon se não for crítico (mais 1 GB)
127  3. **Aumentar swap** para 2-4 GB:
128     ```bash
129     sudo swapoff /swapfile
130     sudo fallocate -l 4G /swapfile
131     sudo mkswap /swapfile
132     sudo swapon /swapfile
133     ```
134  
135  ### Durante Instalação
136  1. Usar `SHARP_IGNORE_GLOBAL_LIBVIPS=1` se tiver libvips instalado
137  2. Instalar via git clone para melhor controlo em ARM
138  3. Testar Gateway antes de adicionar canais
139  
140  ### Após Instalação
141  1. Configurar OpenClaw para usar modelo via API (Anthropic/OpenAI), não local
142  2. Começar sem Docker, adicionar depois se necessário
143  3. Monitorizar com `htop` durante uso inicial
144  
145  ---
146  
147  ## Uso Simultâneo: Claude Code + OpenClaw
148  
149  | Configuração | Viabilidade |
150  |--------------|-------------|
151  | Ambos idle | ✅ Funciona |
152  | Claude Code ativo + OpenClaw idle | ✅ Funciona |
153  | Ambos ativos simultaneamente | ⚠️ Possível RAM pressure |
154  | Ambos + browser automation | ❌ Provável OOM |
155  
156  **Recomendação**: Usar um de cada vez para tarefas intensivas.
157  
158  ---
159  
160  ## Alternativas Consideradas
161  
162  1. **Executar OpenClaw num VPS barato** (~5€/mês)
163     - Melhor performance, sem impacto local
164     - Acesso remoto via Tailscale
165  
166  2. **Container leve no Pi** (Docker com limites)
167     - Isola recursos
168     - Previne OOM do sistema
169  
170  3. **Instalação minimal** (só Gateway + WebChat)
171     - Sem canais externos (WhatsApp, Telegram)
172     - Menor footprint
173  
174  ---
175  
176  ## Conclusão Técnica
177  
178  **Instalação é viável** se:
179  - Aceitar que tarefas pesadas podem ser lentas
180  - Não usar Claude Code e OpenClaw intensivamente ao mesmo tempo
181  - Aumentar swap para 4 GB
182  - Monitorizar recursos inicialmente
183  
184  **Não recomendado** se:
185  - Precisar de browser automation frequente
186  - Quiser múltiplos canais (WhatsApp + Telegram + Discord)
187  - ClamAV em tempo real for obrigatório
188  
189  ---
190  
191  ## Avaliação de Segurança
192  
193  ### Riscos Identificados
194  
195  1. **Acesso Total ao Sistema**
196     - OpenClaw executa comandos de terminal com permissões do utilizador
197     - Pode ler/escrever ficheiros, instalar software, aceder a rede
198     - **Risco**: Código malicioso em skills pode comprometer o sistema
199  
200  2. **Canais de Comunicação Externos**
201     - WhatsApp/Telegram/Discord requerem credenciais e tokens
202     - Mensagens de terceiros podem conter instruções maliciosas (prompt injection)
203     - **Risco**: Atacante pode enviar comandos via canal de chat
204  
205  3. **API Keys e Segredos**
206     - Chaves de API (Anthropic, OpenAI, etc.) armazenadas localmente
207     - Tokens de canais (WhatsApp, Telegram) são sensíveis
208     - **Risco**: Exposição de credenciais
209  
210  4. **Browser Automation**
211     - Chromium controlado por agente tem acesso a cookies/sessões
212     - Pode aceder a contas logadas no browser
213     - **Risco**: Exfiltração de sessões autenticadas
214  
215  5. **Rede Local**
216     - Gateway escuta em localhost:18789
217     - Com Tailscale Funnel, pode expor à internet
218     - **Risco**: Acesso remoto não autorizado
219  
220  6. **Dependências npm**
221     - Centenas de packages de terceiros
222     - Supply chain attacks são comuns em npm
223     - **Risco**: Código malicioso em dependências
224  
225  ---
226  
227  ## Configuração de Segurança Completa
228  
229  ### Estrutura de Diretórios Segura
230  
231  ```
232  ~/clawd/
233  ├── config/
234  │   ├── security-config.json      # Configurações de segurança
235  │   └── .env                      # Variáveis de ambiente (API keys)
236  ├── data/
237  │   ├── conversations/            # Histórico de conversas
238  │   └── cache/                    # Cache temporário
239  ├── logs/
240  │   └── security.log              # Logs de segurança
241  ├── scripts/
242  │   └── security-check.sh         # Script de verificação
243  └── docker/
244      └── docker-compose.yml        # Configuração Docker
245  ```
246  
247  ---
248  
249  ### Docker Compose com Segurança
250  
251  ```yaml
252  # ~/clawd/docker/docker-compose.yml
253  version: '3.8'
254  
255  services:
256    openclaw:
257      image: openclaw/openclaw:latest
258      container_name: openclaw-secure
259      restart: unless-stopped
260  
261      # Limites de recursos
262      deploy:
263        resources:
264          limits:
265            cpus: '2'
266            memory: 2G
267          reservations:
268            cpus: '0.5'
269            memory: 512M
270  
271      # Rede isolada
272      networks:
273        - clawd-internal
274  
275      # Portas (só localhost)
276      ports:
277        - "127.0.0.1:18789:18789"
278  
279      # Volumes com permissões restritas
280      volumes:
281        - ../config:/app/config:ro
282        - ../data:/app/data:rw
283        - ../logs:/app/logs:rw
284        - /etc/localtime:/etc/localtime:ro
285  
286      # Variáveis de ambiente
287      env_file:
288        - ../config/.env
289  
290      # Segurança do container
291      security_opt:
292        - no-new-privileges:true
293      read_only: true
294      tmpfs:
295        - /tmp:size=100M,mode=1777
296  
297      # Utilizador não-root
298      user: "1000:1000"
299  
300      # Capabilities mínimas
301      cap_drop:
302        - ALL
303      cap_add:
304        - NET_BIND_SERVICE
305  
306  networks:
307    clawd-internal:
308      driver: bridge
309      internal: true
310  ```
311  
312  ---
313  
314  ### Ficheiro de Configuração de Segurança
315  
316  ```json
317  {
318    "security": {
319      "version": "1.0",
320      "lastUpdated": "2026-02-04",
321  
322      "authentication": {
323        "enabled": true,
324        "method": "token",
325        "sessionTimeout": 3600,
326        "maxFailedAttempts": 5,
327        "lockoutDuration": 900
328      },
329  
330      "authorization": {
331        "defaultPolicy": "deny",
332        "allowedCommands": [
333          "ls", "cat", "grep", "find", "echo",
334          "curl", "wget", "python3", "node"
335        ],
336        "blockedCommands": [
337          "rm -rf", "dd", "mkfs", "fdisk",
338          "passwd", "useradd", "userdel",
339          "chmod 777", "sudo su", "su -"
340        ],
341        "blockedPaths": [
342          "/etc/passwd", "/etc/shadow",
343          "/root", "~/.ssh", "~/.gnupg",
344          "/var/log/auth.log"
345        ]
346      },
347  
348      "network": {
349        "allowedHosts": [
350          "api.anthropic.com",
351          "api.openai.com",
352          "localhost",
353          "127.0.0.1"
354        ],
355        "blockedPorts": [22, 23, 25, 3306, 5432],
356        "rateLimiting": {
357          "enabled": true,
358          "requestsPerMinute": 60,
359          "burstLimit": 10
360        }
361      },
362  
363      "filesystem": {
364        "sandboxEnabled": true,
365        "allowedPaths": [
366          "~/clawd/data",
367          "~/clawd/cache",
368          "/tmp/clawd"
369        ],
370        "maxFileSize": "50MB",
371        "blockedExtensions": [
372          ".exe", ".sh", ".bat", ".ps1",
373          ".dll", ".so", ".dylib"
374        ]
375      },
376  
377      "logging": {
378        "enabled": true,
379        "level": "info",
380        "sensitiveDataMasking": true,
381        "retentionDays": 30,
382        "alertOnSuspiciousActivity": true
383      },
384  
385      "channels": {
386        "whatsapp": {"enabled": false},
387        "telegram": {"enabled": false},
388        "discord": {"enabled": false},
389        "webchat": {"enabled": true, "localOnly": true}
390      }
391    }
392  }
393  ```
394  
395  ---
396  
397  ### Script de Verificação de Segurança
398  
399  ```bash
400  #!/bin/bash
401  # ~/clawd/scripts/security-check.sh
402  
403  LOG_FILE="$HOME/clawd/logs/security.log"
404  ALERT_EMAIL="admin@example.com"
405  
406  log_event() {
407      echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
408  }
409  
410  check_docker_security() {
411      echo "=== Verificação Docker ==="
412  
413      # Verificar se container está a correr como root
414      USER=$(docker inspect openclaw-secure --format '{{.Config.User}}' 2>/dev/null)
415      if [ "$USER" == "" ] || [ "$USER" == "root" ]; then
416          log_event "ALERTA: Container a correr como root!"
417          echo "❌ Container a correr como root"
418      else
419          echo "✅ Container a correr como utilizador: $USER"
420      fi
421  
422      # Verificar capabilities
423      CAPS=$(docker inspect openclaw-secure --format '{{.HostConfig.CapAdd}}' 2>/dev/null)
424      echo "Capabilities: $CAPS"
425  
426      # Verificar portas expostas
427      PORTS=$(docker port openclaw-secure 2>/dev/null)
428      echo "Portas: $PORTS"
429  }
430  
431  check_file_permissions() {
432      echo ""
433      echo "=== Verificação de Permissões ==="
434  
435      # Verificar ficheiros sensíveis
436      for file in ~/.clawd/.env ~/.clawd/config/*.json; do
437          if [ -f "$file" ]; then
438              PERMS=$(stat -c %a "$file" 2>/dev/null)
439              if [ "$PERMS" != "600" ] && [ "$PERMS" != "400" ]; then
440                  log_event "ALERTA: Permissões inseguras em $file ($PERMS)"
441                  echo "❌ $file tem permissões $PERMS (deveria ser 600)"
442              else
443                  echo "✅ $file tem permissões corretas"
444              fi
445          fi
446      done
447  }
448  
449  check_network_connections() {
450      echo ""
451      echo "=== Conexões de Rede ==="
452  
453      # Listar conexões do OpenClaw
454      ss -tlnp | grep -E "18789|openclaw" || echo "Nenhuma conexão activa"
455  
456      # Verificar se está exposto externamente
457      if ss -tlnp | grep -q "0.0.0.0:18789"; then
458          log_event "ALERTA: Porta 18789 exposta externamente!"
459          echo "❌ Porta exposta a todas as interfaces"
460      else
461          echo "✅ Porta apenas em localhost"
462      fi
463  }
464  
465  check_running_processes() {
466      echo ""
467      echo "=== Processos Suspeitos ==="
468  
469      # Procurar processos suspeitos
470      SUSPICIOUS=$(ps aux | grep -E "nc -l|ncat|socat|reverse" | grep -v grep)
471      if [ ! -z "$SUSPICIOUS" ]; then
472          log_event "ALERTA: Processos suspeitos detectados: $SUSPICIOUS"
473          echo "❌ Processos suspeitos encontrados"
474          echo "$SUSPICIOUS"
475      else
476          echo "✅ Nenhum processo suspeito"
477      fi
478  }
479  
480  # Executar verificações
481  echo "========================================"
482  echo "  OpenClaw Security Check"
483  echo "  $(date)"
484  echo "========================================"
485  
486  check_docker_security
487  check_file_permissions
488  check_network_connections
489  check_running_processes
490  
491  echo ""
492  echo "========================================"
493  echo "Verificação completa. Ver logs em: $LOG_FILE"
494  ```
495  
496  ---
497  
498  ### Cron Jobs de Segurança
499  
500  ```bash
501  # Adicionar ao crontab: crontab -e
502  
503  # Verificação de segurança a cada hora
504  0 * * * * /home/ricardo/clawd/scripts/security-check.sh >> /home/ricardo/clawd/logs/cron.log 2>&1
505  
506  # Rotação de logs diária
507  0 0 * * * find /home/ricardo/clawd/logs -name "*.log" -mtime +30 -delete
508  
509  # Backup de configurações semanal
510  0 2 * * 0 tar -czf /home/ricardo/backups/clawd-config-$(date +\%Y\%m\%d).tar.gz /home/ricardo/clawd/config
511  
512  # Atualização de segurança Docker (verificar imagem)
513  0 3 * * 1 docker pull openclaw/openclaw:latest && docker-compose -f /home/ricardo/clawd/docker/docker-compose.yml up -d
514  ```
515  
516  ---
517  
518  ### Hardening do Sistema
519  
520  #### UFW (Firewall)
521  
522  ```bash
523  # Instalar e configurar UFW
524  sudo apt install ufw -y
525  
526  # Política padrão
527  sudo ufw default deny incoming
528  sudo ufw default allow outgoing
529  
530  # Permitir SSH (com rate limiting)
531  sudo ufw limit ssh
532  
533  # Permitir apenas localhost para OpenClaw
534  # (não precisa de regra externa se só usa localhost)
535  
536  # Activar
537  sudo ufw enable
538  sudo ufw status verbose
539  ```
540  
541  #### Fail2ban
542  
543  ```bash
544  # Instalar
545  sudo apt install fail2ban -y
546  
547  # Configuração para OpenClaw
548  sudo tee /etc/fail2ban/jail.d/openclaw.conf << 'EOF'
549  [openclaw]
550  enabled = true
551  port = 18789
552  filter = openclaw
553  logpath = /home/ricardo/clawd/logs/security.log
554  maxretry = 5
555  bantime = 3600
556  findtime = 600
557  EOF
558  
559  # Filtro
560  sudo tee /etc/fail2ban/filter.d/openclaw.conf << 'EOF'
561  [Definition]
562  failregex = ^.*ALERTA.*failed login.*from <HOST>.*$
563              ^.*unauthorized access attempt.*<HOST>.*$
564  ignoreregex =
565  EOF
566  
567  sudo systemctl restart fail2ban
568  ```
569  
570  #### SSH Hardening
571  
572  ```bash
573  # /etc/ssh/sshd_config - adicionar/modificar:
574  PermitRootLogin no
575  PasswordAuthentication no
576  PubkeyAuthentication yes
577  MaxAuthTries 3
578  ClientAliveInterval 300
579  ClientAliveCountMax 2
580  AllowUsers ricardo
581  ```
582  
583  ---
584  
585  ### Alertas Telegram (Opcional)
586  
587  ```bash
588  #!/bin/bash
589  # ~/clawd/scripts/telegram-alert.sh
590  
591  TELEGRAM_BOT_TOKEN="YOUR_BOT_TOKEN"
592  TELEGRAM_CHAT_ID="YOUR_CHAT_ID"
593  
594  send_alert() {
595      MESSAGE="🚨 *OpenClaw Security Alert*%0A%0A$1"
596      curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
597          -d chat_id="${TELEGRAM_CHAT_ID}" \
598          -d text="${MESSAGE}" \
599          -d parse_mode="Markdown" > /dev/null
600  }
601  
602  # Usar: send_alert "Tentativa de acesso não autorizado detectada"
603  ```
604  
605  ---
606  
607  ### Resposta a Incidentes
608  
609  #### Passos Imediatos
610  
611  ```bash
612  # 1. Parar OpenClaw imediatamente
613  docker stop openclaw-secure
614  
615  # 2. Preservar logs
616  cp -r ~/clawd/logs ~/clawd/logs-backup-$(date +%Y%m%d-%H%M%S)
617  
618  # 3. Verificar processos suspeitos
619  ps aux | grep -E "nc|ncat|python|perl|ruby" | grep -v grep
620  
621  # 4. Verificar conexões de rede
622  ss -tlnp
623  netstat -an | grep ESTABLISHED
624  
625  # 5. Verificar ficheiros modificados recentemente
626  find ~/clawd -type f -mmin -60 -ls
627  
628  # 6. Revogar tokens/API keys
629  # Ir aos dashboards de Anthropic/OpenAI e revogar chaves
630  ```
631  
632  #### Recuperação
633  
634  ```bash
635  # 1. Limpar container comprometido
636  docker rm -f openclaw-secure
637  docker system prune -af
638  
639  # 2. Restaurar de backup limpo
640  tar -xzf ~/backups/clawd-config-YYYYMMDD.tar.gz -C /
641  
642  # 3. Gerar novas API keys
643  
644  # 4. Reiniciar com configuração segura
645  docker-compose -f ~/clawd/docker/docker-compose.yml up -d
646  
647  # 5. Monitorizar
648  tail -f ~/clawd/logs/security.log
649  ```
650  
651  ---
652  
653  ### Checklist de Segurança
654  
655  - [x] Docker com utilizador não-root
656  - [x] Capabilities mínimas (cap_drop: ALL)
657  - [x] Rede isolada (internal: true)
658  - [x] Portas só em localhost
659  - [x] Volumes read-only onde possível
660  - [x] Limites de recursos (CPU/RAM)
661  - [x] Ficheiro .env com permissões 600
662  - [x] UFW configurado
663  - [x] Fail2ban activo
664  - [x] SSH hardened
665  - [x] Logs com retenção limitada
666  - [x] Backups automáticos
667  - [x] Script de verificação em cron
668  - [ ] Alertas Telegram configurados
669  - [ ] Auditoria de skills instaladas
670  
671  ### Referências
672  
673  - [OpenClaw Security Concerns (ara.cat)](https://en.ara.cat/media/openclaw-the-viral-ai-that-controls-your-computer-and-opens-huge-cybersecurity-hole_1_5633694.html)
674  - [GitHub - OpenClaw](https://github.com/openclaw/openclaw)
675  - [Documentação oficial](https://docs.openclaw.ai/)
676  - [Docker Security Best Practices](https://docs.docker.com/develop/security-best-practices/)
677  - [CIS Docker Benchmark](https://www.cisecurity.org/benchmark/docker)
678  
679  ---
680  
681  ## Próximos Passos
682  
683  1. **Completar avaliação de segurança** (investigar riscos acima)
684  2. Decidir se benefícios justificam riscos
685  3. Se sim: aumentar swap, instalar Node.js, configurar isolamento
686  4. Testar em ambiente controlado primeiro
687  
688  ---
689  
690  *Documento gerado automaticamente via Claude Code*