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*