Receba atualizações, não force
À medida que você escala, torna-se inviável fazer atualizações por push de todos os seus produtos.
- Você precisará rastrear todos os clientes, cada um com uma configuração de firewall diferente.
- Você precisará criar conexões de entrada através do firewall do cliente, o que exigiria o encaminhamento de porta ou algum outro mecanismo semelhante. Este é um risco de segurança para seus clientes
Em vez disso, solicite aos seus produtos as atualizações periodicamente e, em seguida, você poderá adicionar capacidade extra ao lado do servidor à medida que crescer.
Quão?
Esse problema já foi resolvido, como você sugeriu. Aqui estão várias abordagens em que consigo pensar.
- using apt : Use o sistema apt interno com um PPA personalizado e uma lista de fontes. Como configuro um PPA?
- Contras: A menos que você use um serviço de hospedagem pública como a barra de ativação, a configuração do seu próprio sistema de empacotamento PPA + apt não é para os fracos de coração.
- using ssh : gere uma chave pública SSH para cada produto e adicione a chave desse dispositivo aos seus servidores de atualização. Depois, basta ter o seu software
rsync
/ scp
os arquivos necessários.
- Contras: É necessário rastrear (e fazer backup!) De todas as chaves públicas de cada produto enviado.
- Pro : mais seguro que um download bruto, já que os únicos dispositivos que podem acessar as atualizações seriam aqueles com a chave pública instalada.
download bruto + verificação de assinatura :
- Poste um arquivo de atualização assinado em algum lugar (Amazon S3, servidor FTP, etc.)
- Seu produto verifica periodicamente a alteração do arquivo de atualização e baixa / verifica a assinatura.
- Contras : dependendo de como você implanta isso, os arquivos podem ser acessíveis ao público (o que pode facilitar seu produto de fazer engenharia reversa e hackear)
ansible : O Ansible é uma ótima ferramenta para gerenciar configurações do sistema. Está no reino do fantoche / chef, mas não tem agente (usa python) e foi projetado para ser idempotente. Se a implantação do seu software exigir um script bash complicado, eu usaria uma ferramenta como essa para tornar menos complicado a execução de suas atualizações.
Claro, existem outras maneiras de fazer isso. Mas isso me leva a um ponto importante.
Assine / valide suas atualizações!
Não importa o que você faça, é imperativo que você tenha um mecanismo para garantir que sua atualização não seja adulterada. Um usuário mal-intencionado pode se passar por seu servidor de atualização em qualquer uma das configurações acima. Se você não validar sua atualização, sua caixa será muito mais fácil de invadir e invadir.
Uma boa maneira de fazer isso é assinar seus arquivos de atualização. Você precisará manter um certificado (ou pagar alguém para fazê-lo), mas poderá instalar sua impressão digital em cada um dos seus dispositivos antes de enviá-los para que eles possam rejeitar atualizações que foram adulteradas.
Segurança física
Obviamente, se alguém tiver acesso físico à implantação do cliente, poderá facilmente assumir o controle do servidor. Mas pelo menos eles não podem atacar as outras implantações! A segurança física é provavelmente a responsabilidade do seu cliente.
Por um momento, imagine o que aconteceria se você usasse uma grande rede OpenVPN para atualizações ... Eles poderiam usar o servidor comprometido para atacar todas as instâncias da VPN
Segurança
Faça o que fizer, a segurança precisa ser incorporada desde o início. Não corte cantos aqui - você vai se arrepender no final, se o fizer.
A proteção total deste sistema de atualização está fora do escopo desta publicação, e eu recomendo fortemente a contratação de um consultor se você ou alguém da sua equipe não tiver conhecimento nessa área. Vale cada centavo.