{"id":38585839,"url":"https://github.com/carlosrabelo/deskbox","last_synced_at":"2026-01-17T08:19:32.013Z","repository":{"id":324127469,"uuid":"1096068210","full_name":"carlosrabelo/deskbox","owner":"carlosrabelo","description":"Docker container with Debian 13 + XFCE4 + XRDP for remote desktop access via RDP and SSH","archived":false,"fork":false,"pushed_at":"2025-11-27T20:42:30.000Z","size":41,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-30T11:50:26.169Z","etag":null,"topics":["debian","docker","remote-desktop","xfce4","xrdp"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carlosrabelo.png","metadata":{"files":{"readme":"README-PT.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-13T22:38:29.000Z","updated_at":"2025-11-27T20:42:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/carlosrabelo/deskbox","commit_stats":null,"previous_names":["carlosrabelo/aurora","carlosrabelo/deskbox"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/carlosrabelo/deskbox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrabelo%2Fdeskbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrabelo%2Fdeskbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrabelo%2Fdeskbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrabelo%2Fdeskbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carlosrabelo","download_url":"https://codeload.github.com/carlosrabelo/deskbox/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlosrabelo%2Fdeskbox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28504362,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debian","docker","remote-desktop","xfce4","xrdp"],"created_at":"2026-01-17T08:19:29.996Z","updated_at":"2026-01-17T08:19:32.001Z","avatar_url":"https://github.com/carlosrabelo.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deskbox - Ambiente de Desktop Remoto\n\nContainer Docker com Debian 12 (Bookworm) + Xfce4 + XRDP para acesso remoto via Remote Desktop Protocol.\n\n## Recursos\n\n- **Base**: Debian 12 (Bookworm) - Release estáveling\n- **Ambiente Desktop**: Xfce4 (com auto-configuração no primeiro login)\n- **Acesso Remoto**:\n  - XRDP (porta 3389) - Remote Desktop Protocol\n  - SSH (porta 2222) - Acesso via terminal seguro\n- **Backend**: xorgxrdp (Xorg nativo)\n- **Múltiplos Usuários**: Suporte completo (sessões simultâneas)\n- **Usuário Padrão**: deskbox (UID 1000)\n- **Hostname**: deskbox\n- **Timezone**: America/Cuiaba\n- **Persistência**: Todos os diretórios home em `/mnt/deskbox/home`\n- **Healthcheck**: Monitoramento automático do serviço XRDP\n- **Logging**: Logs estruturados para startup e eventos XRDP\n- **Ferramentas Pré-instaladas**: git, vim, htop, tmux, tree, e mais\n- **Profile Customizado**: Aliases úteis e prompt colorido\n\n## Início Rápido\n\n### 1. Configurar Ambiente (Obrigatório)\n\nCopie o arquivo de exemplo e personalize:\n\n```bash\ncp .env.example .env\n```\n\nDepois edite o `.env` para definir seus valores:\n\n```bash\n# Configuração Docker Hub\nDOCKER_USER=carlosrabelo\nIMAGE_NAME=deskbox\nVERSION=0.0.1\n\n# Configuração do Usuário\nUSER_PASSWORD=sua_senha_segura_aqui\n\n# Configuração do Sistema\nTZ=America/Cuiaba\n```\n\n**IMPORTANTE**: Nunca faça commit do arquivo `.env` no Git!\n\n### Opções de Segurança\n\n#### Configuração Padrão\n```bash\n# Usa variáveis de ambiente do .env\nmake start CTX=hostname\n```\n\n#### Configuração de Produção (Recomendado)\n```bash\n# Define senha segura no arquivo .env\necho \"USER_PASSWORD=sua_senha_segura\" \u003e\u003e .env\nmake start CTX=hostname\n```\n\n### Notas Importantes de Segurança\n\n1. **Gerenciamento de Senhas**\n   - **Desenvolvimento**: Variáveis de ambiente (arquivo `.env`)\n   - **Nunca commite senhas no Git**\n\n2. **Acesso de Rede**\n   - **Padrão**: RDP exposto em `0.0.0.0:3389`\n   - **Seguro**: Você pode restringir para localhost definindo `RDP_BIND_ADDRESS=127.0.0.1` no `.env`\n   - **Túnel SSH**: Opção mais segura para acesso remoto\n\n### 2. Construir Imagem\n\n```bash\nmake build CTX=hostname\n```\n\n### 3. Iniciar Container\n\n```bash\nmake start CTX=hostname\n```\n\n### 4. Conectar ao Deskbox\n\n**Opção 1: RDP (Desktop Gráfico)**\n\nUse um cliente RDP (como Remmina, Microsoft Remote Desktop, ou rdesktop):\n\n```bash\n# Linux\nrdesktop -u deskbox -p sua_senha hostname:3389\n\n# Ou com Remmina\n# Host: hostname:3389\n# Usuário: deskbox\n# Senha: a que você definiu no .env\n```\n\n**Opção 2: SSH (Acesso via Terminal)**\n\nConecte via SSH para acesso por linha de comando:\n\n```bash\n# Acesso SSH\nssh -p 2222 deskbox@hostname\n\n# Ou com SCP para transferir arquivos\nscp -P 2222 arquivo.txt deskbox@hostname:/home/deskbox/\n```\n\n## Comandos Make Disponíveis\n\n| Comando | Descrição |\n|---------|-----------|\n| `make build` | Constrói a imagem Docker (cria tags VERSION e latest) |\n| `make push` | Envia imagens para Docker Hub (VERSION e latest) |\n| `make start` | Inicia o container |\n| `make stop` | Para o container |\n| `make restart` | Reinicia o container |\n| `make ps` | Lista containers em execução |\n| `make logs` | Exibe logs do Docker Compose em tempo real |\n| `make view-logs` | Visualiza logs de startup e XRDP do Deskbox |\n| `make sessions` | Mostra sessões de usuários ativos |\n| `make backup` | Cria backup de /mnt/deskbox/home |\n| `make exec SVC=deskbox` | Abre shell no container |\n| `make config` | Exibe configuração do Docker Compose |\n| `make clean` | Remove imagens Docker locais (versão atual) |\n| `make clean-all` | Para containers e remove todas as imagens do projeto |\n\nTodos os comandos aceitam `CTX=\u003ccontext\u003e` para especificar o host Docker remoto e podem sobrescrever variáveis do `.env`.\n\n## Múltiplos Usuários\n\nO container funciona como um sistema Debian normal - você pode adicionar quantos usuários precisar!\n\n### Usuário Padrão\n\n- **Usuário**: debian-rdp\n- **UID**: 1000\n- **Senha**: Definida via `.env` (variável `USER_PASSWORD`)\n\n### Adicionando Novos Usuários\n\nComo um sistema Debian normal, use comandos nativos:\n\n**Método 1: Usando `adduser` (Recomendado - Interativo)**\n\n```bash\n# Entrar no container\nmake exec SVC=debian-rdp CTX=hostname\n\n# Adicionar o usuário (comando interativo do Debian)\nadduser john\n\n# Isso vai:\n# 1. Criar o usuário\n# 2. Solicitar senha\n# 3. Criar diretório home\n# 4. Solicitar informações opcionais (nome completo, etc)\n\n# Adicionar ao grupo sudo (opcional)\nusermod -aG sudo john\n\n# Configurar sessão Xfce4\necho \"startxfce4\" \u003e /home/john/.xsession\n```\n\n**Método 2: Usando `useradd` (Não-interativo)**\n\n```bash\n# Entrar no container\nmake exec SVC=debian-rdp CTX=hostname\n\n# Criar o usuário\nuseradd -m -s /bin/bash mary\n\n# Definir a senha\npasswd mary\n\n# Adicionar ao grupo sudo (opcional)\nusermod -aG sudo mary\n\n# Configurar sessão Xfce4\necho \"startxfce4\" \u003e /home/mary/.xsession\n```\n\n### Conectando com Diferentes Usuários\n\nCada usuário pode conectar simultaneamente via RDP:\n\n```bash\n# Usuário 1: debian-rdp\nrdesktop -u debian-rdp -p senha_debian-rdp hostname:3389\n\n# Usuário 2: john (em outra sessão)\nrdesktop -u john -p senha_john hostname:3389\n\n# Usuário 3: mary (em outra sessão)\nrdesktop -u mary -p senha_mary hostname:3389\n```\n\n### Recursos de Múltiplos Usuários\n\n**Cada usuário tem:**\n- Diretório home separado e persistente\n- Sessão Xfce4 independente\n- Configurações próprias\n- Permissões sudo (por padrão)\n\n**Suporte para:**\n- Múltiplas sessões simultâneas\n- Dados persistidos no volume `/mnt/debian-rdp/home`\n- Estrutura padrão (Desktop, Documents, etc)\n\n### Gerenciando Usuários\n\nEntre no container e use comandos Debian padrão:\n\n```bash\nmake exec SVC=debian-rdp CTX=hostname\n```\n\n**Listar usuários:**\n```bash\ncat /etc/passwd | grep /home\n# ou\ncut -d: -f1 /etc/passwd\n```\n\n**Remover usuário:**\n```bash\ndeluser --remove-home john  # Comando Debian\n# ou\nuserdel -r john             # Comando Linux tradicional\n```\n\n**Alterar senha:**\n```bash\npasswd john\n```\n\n**Ver informações do usuário:**\n```bash\nid john\ngroups john\n```\n\n## Considerações de Segurança\n\n### Avisos Importantes\n\n1. **NOPASSWD sudo**: O usuário `debian-rdp` pode executar comandos sudo SEM senha\n   - **Risco**: Se alguém ganhar acesso ao usuário, terá controle total do container\n   - **Recomendação**: Use apenas em ambientes controlados/desenvolvimento\n   - **Produção**: Remova `NOPASSWD` da linha 181 no Dockerfile\n\n2. **Senha via Variável de Ambiente**\n   - Senhas são definidas em runtime via `USER_PASSWORD`\n   - **Melhor prática**: Use Docker secrets em produção\n   - Nunca exponha `USER_PASSWORD` em logs ou repositórios\n\n3. **Porta 3389 Exposta**\n   - RDP não é criptografado por padrão\n   - **Recomendação**: Use VPN ou túnel SSH em redes não confiáveis\n   - Considere usar `ports: - \"127.0.0.1:3389:3389\"` e túnel SSH\n\n4. **Sandbox do Chromium**\n   - Chromium roda com flag `--no-sandbox` (necessário para containers)\n   - **Seguro**: Docker provê isolamento no nível do container (namespaces, cgroups, seccomp)\n   - O navegador ainda está isolado do sistema host\n   - Esta é a abordagem padrão para executar navegadores em containers\n\n### Melhorias de Segurança Recomendadas\n\nPara ambientes de produção:\n\n1. **Remover NOPASSWD**:\n   ```dockerfile\n   # Linha 181 no Dockerfile\n   echo \"$USER_NAME ALL=(ALL) ALL\" \u003e\u003e /etc/sudoers\n   ```\n\n2. **Usar Docker Secrets**:\n   ```yaml\n   secrets:\n     - user_password\n   ```\n\n3. **Túnel SSH para RDP**:\n   ```bash\n   ssh -L 3389:localhost:3389 user@hostname\n   # Então conecte RDP para localhost:3389\n   ```\n\n4. **Firewall/Políticas de Rede**:\n   - Restrinja acesso à porta 3389 apenas de IPs confiáveis\n\n## Estrutura de Volumes\n\n```\n/mnt/debian-rdp/\n    ├── home/                    → /home (no container)\n    │   ├── debian-rdp/              # Usuário padrão (UID 1000)\n    │   │   ├── Desktop/\n    │   │   ├── Documents/\n    │   │   ├── Downloads/\n    │   │   ├── Pictures/\n    │   │   └── Videos/\n    │   ├── john/                # Usuários adicionais\n    │   ├── mary/\n    │   └── ...\n    │\n    └── logs/                    → /var/log/debian-rdp (no container)\n        ├── startup.log          # Logs de inicialização do Debian-RDP\n        └── xrdp.log             # Logs do servidor XRDP\n```\n\n**Dados persistidos no host:**\n- **Diretórios home**: `/mnt/debian-rdp/home/*` - Todos os dados, configurações e arquivos dos usuários\n- **Logs**: `/mnt/debian-rdp/logs/*` - Logs de startup e XRDP para troubleshooting\n\n## Ferramentas Pré-instaladas\n\nDebian-RDP vem com ferramentas essenciais de desenvolvimento e sistema pré-instaladas:\n\n**Ferramentas de Desenvolvimento:**\n- git - Controle de versão\n- vim - Editor de texto\n- tmux - Multiplexador de terminal\n- tree - Visualização de diretórios\n\n**Monitoramento do Sistema:**\n- htop - Visualizador interativo de processos\n- net-tools - Utilitários de rede\n- iputils-ping - Diagnóstico de rede\n\n**Aplicações Desktop:**\n- Chromium - Navegador web (otimizado para containers)\n- Thunar - Gerenciador de arquivos\n- Mousepad - Editor de texto\n- Xfce4 Terminal - Emulador de terminal\n- Task Manager - Monitor do sistema\n- Screenshot Tool - Ferramenta de captura de tela\n\n**Aliases Customizados (disponíveis no terminal):**\n```bash\nll          # Listagem detalhada de arquivos (ls -lah)\ngs          # Git status\ngp          # Git pull\ngc          # Git commit\ngd          # Git diff\nupdate      # Atualização do sistema (apt update \u0026\u0026 upgrade)\nports       # Mostrar portas de rede (netstat)\n```\n\n## Logging e Monitoramento\n\nDebian-RDP implementa logging estruturado para melhor troubleshooting:\n\n**Visualizar logs de startup:**\n```bash\nmake view-logs CTX=hostname\n```\n\n**Monitorar sessões ativas:**\n```bash\nmake sessions CTX=hostname\n```\n\n**Visualizar logs do Docker em tempo real:**\n```bash\nmake logs CTX=hostname\n```\n\n**Arquivos de log (persistidos no host em `/mnt/debian-rdp/logs/`):**\n- `startup.log` - Logs do processo de startup\n- `xrdp.log` - Logs do servidor XRDP\n\n**Nota**: Os logs são persistidos no host, portanto sobrevivem a reinicializações e rebuilds do container.\n\n## Backup e Restore\n\n**Criar backup:**\n```bash\nmake backup CTX=hostname\n```\n\nIsso cria um arquivo de backup com timestamp em `/tmp/debian-rdp-backup-YYYYMMDD-HHMMSS.tar.gz` no host remoto.\n\nO backup inclui:\n- Todos os diretórios home dos usuários (`/mnt/debian-rdp/home/*`)\n- Todos os logs (`/mnt/debian-rdp/logs/*`)\n\n**Restaurar a partir do backup:**\n```bash\n# No host remoto\nssh root@hostname\ncd /tmp\ntar -xzf debian-rdp-backup-20250113-120000.tar.gz -C /\n```\n\n**Backup manual de diretórios específicos:**\n```bash\n# Backup apenas dos diretórios home\nssh root@hostname \"tar -czf /tmp/debian-rdp-home-backup.tar.gz /mnt/debian-rdp/home\"\n\n# Backup apenas dos logs\nssh root@hostname \"tar -czf /tmp/debian-rdp-logs-backup.tar.gz /mnt/debian-rdp/logs\"\n```\n\n## Solução de Problemas\n\n### Não consigo conectar via RDP\n\n1. Verifique se o container está rodando:\n   ```bash\n   make ps CTX=hostname\n   ```\n\n2. Verifique o status de saúde do container:\n   ```bash\n   docker ps  # Procure pelo status \"healthy\"\n   ```\n\n3. Verifique os logs:\n   ```bash\n   make logs CTX=hostname\n   # Ou visualize os logs específicos do Debian-RDP\n   make view-logs CTX=hostname\n   ```\n\n4. Teste conectividade:\n   ```bash\n   telnet hostname 3389\n   ```\n\n### Não consigo conectar via SSH\n\n1. Verifique se a porta SSH está exposta:\n   ```bash\n   docker ps | grep deskbox\n   # Deve mostrar 0.0.0.0:2222-\u003e2222/tcp\n   ```\n\n2. Teste conectividade SSH:\n   ```bash\n   telnet hostname 2222\n   ```\n\n3. Tente conectar com modo verbose:\n   ```bash\n   ssh -v -p 2222 deskbox@hostname\n   ```\n\n### Tela preta após login\n\n1. Verifique os logs do Debian-RDP para erros:\n   ```bash\n   make view-logs CTX=hostname\n   ```\n\n2. Verifique permissões do diretório home:\n   ```bash\n   make exec SVC=debian-rdp CTX=hostname\n   ls -la /home/deskbox\n   ```\n\n3. Verifique a configuração do XFCE4:\n   ```bash\n   make exec SVC=debian-rdp CTX=hostname\n   cat /home/deskbox/.xsession\n   # Deve conter: startxfce4\n   ```\n\n4. Reinicie o container:\n   ```bash\n   make restart CTX=hostname\n   ```\n\n### \"USER_PASSWORD não definido\"\n\nVerifique se o arquivo `.env` existe e contém:\n```bash\nUSER_PASSWORD=sua_senha\n```\n\n## Variáveis de Ambiente\n\nTodas as variáveis de ambiente devem ser configuradas no arquivo `.env` (copie de `.env.example`):\n\n| Variável | Padrão | Descrição |\n|----------|--------|-----------|\n| `DOCKER_USER` | carlosrabelo | Nome de usuário do Docker Hub |\n| `IMAGE_NAME` | debian-rdp | Nome da imagem Docker |\n| `USER_NAME` | debian-rdp | Nome do usuário padrão |\n| `USER_PASSWORD` | debian-rdp | Senha RDP (altere isso!) |\n\n## Arquitetura\n\n```\n┌─────────────────────────────────────┐\n│  Cliente RDP (Remmina/mstsc)        │\n│  Cliente SSH (Terminal)             │\n└──────────┬──────────────┬───────────┘\n           │ Porta 3389   │ Porta 2222\n           │ (RDP)        │ (SSH)\n┌──────────▼──────────────▼───────────┐\n│         Container Docker            │\n│  ┌───────────────────────────────┐  │\n│  │       Servidor XRDP           │  │\n│  └──────────────┬────────────────┘  │\n│  ┌──────────────▼────────────────┐  │\n│  │  Gerenciador de Sessão XRDP   │  │\n│  └──────────────┬────────────────┘  │\n│  ┌──────────────▼────────────────┐  │\n│  │     Xorg (xorgxrdp)           │  │\n│  └──────────────┬────────────────┘  │\n│  ┌──────────────▼────────────────┐  │\n│  │    Desktop Xfce4              │  │\n│  └───────────────────────────────┘  │\n│  ┌───────────────────────────────┐  │\n│  │      Servidor SSH             │  │\n│  └───────────────────────────────┘  │\n└─────────────────────────────────────┘\n```\n\n## Licença\n\nLicença MIT - Use por sua própria conta e risco.\n\n## Contribuindo\n\nPRs são bem-vindos! Para mudanças maiores, por favor abra uma issue primeiro.\n\n## Suporte\n\nPara problemas ou perguntas, por favor abra uma issue no repositório.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlosrabelo%2Fdeskbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarlosrabelo%2Fdeskbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlosrabelo%2Fdeskbox/lists"}