Resolvendo Erros de Permissão de SSH Dentro do Seu App
Novos usuários de SSH frequentemente encontram um obstáculo. Eles veem este erro:
WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 0644 for 'id_rsa.pem' are too open.
A solução é um comando simples de terminal: chmod 600 id_rsa.pem. Para engenheiros, isso é fácil. Para funcionários de agências ou operadores de TI que não utilizam terminais, isso é uma barreira significativa. Isso gera chamados de suporte constantes.
Decidimos resolver isso dentro do nosso aplicativo. Construímos um sistema para diagnosticar e corrigir permissões automaticamente.
O Problema
O OpenSSH recusa-se a carregar uma chave privada se as permissões forem muito permissivas. Se outras pessoas puderem ler sua chave, sua segurança estará comprometida. A maioria das chaves tem como padrão 0644, o que permite a leitura por qualquer usuário. O OpenSSH exige 0600.
Nossa Solução
Utilizamos uma abordagem de duas fases para lidar com isso.
Fase 1: Recuperação pós-falha Se uma conexão falhar devido às permissões, a interface (UI) exibirá um botão "Corrigir e tentar novamente". Ao clicar nele, o sistema executa a correção e tenta a conexão novamente.
Fase 2: Prevenção pré-conexão O aplicativo inspeciona o caminho da chave antes de o usuário clicar em conectar. Se as permissões estiverem incorretas, exibimos um aviso. O usuário escolhe corrigi-las ou conectar como está.
Também lidamos com o Windows de forma diferente. O Windows utiliza ACLs em vez de permissões Unix. Nosso código detecta a plataforma e executa o comando correto, como icacls, para corrigir o acesso.
Por que não corrigimos automaticamente de forma silenciosa
Consideramos corrigir as chaves automaticamente na inicialização. Rejeitamos essa ideia. Alguns fluxos de trabalho exigem permissões específicas para chaves compartilhadas. Se as alterarmos sem perguntar, interromperemos o fluxo de trabalho do usuário.
Nossa regra é simples: diagnosticamos tudo, mas só modificamos arquivos quando o usuário clica em um botão.
O Resultado
Construir uma UX que absorva obstáculos técnicos reduz o volume de suporte. Mostramos ao usuário o que está errado e oferecemos uma correção com um único clique. Isso remove a barreira psicológica de usar um terminal.