Restringir com segurança o acesso a um repositório Debian privado

9

Eu estava procurando por um método para restringir o acesso a um repositório Debian privado e ser capaz de se autenticar de maneira não interativa (ou seja, usando um script)

O artigo mais útil que encontrei se realmente fosse do site de administração da Debian, mas o método seguro usa ssh e chaves públicas / privadas. Ele funciona bem, mas a chave pública de cada host precisa estar dentro do arquivo remote_keys autorizado para autenticar com êxito. Não diz nada sobre o fornecimento de senha para ssh: //, mas suponho que seja possível.

Você já tentou outras alternativas (por exemplo, ftps)?

desde já, obrigado

Humber
fonte
O problema que tenho com o artigo acima é que ele não apenas fornece acesso ao repositório APT - fornece acesso shell à minha máquina de repositório APT. Esse é um risco inaceitável.
BobDoolittle

Respostas:

5

Se você sempre executa apt-getseus servidores manualmente (sem apt-getcomandos automáticos iniciados por crons), considere usar o encaminhamento de agente ssh . Isso evita a necessidade de gerenciar um par de chaves pública / privada por servidor que você gerencia, e provavelmente é mais seguro do que deixar chaves privadas em todos os servidores.

Configuração inicial - conecte-se aos servidores que você deseja gerenciar e adicione algo assim /etc/apt/sources.list(este exemplo assume que você deseja que seus servidores se conectem à managerconta):

    deb ssh://[email protected]/path other stuff
  • crie um par de chaves públicas / privadas em seu próprio computador, com seu login, johndoepor exemplo (desde que seu computador seja executado no debian: caso contrário, você pode fazer isso em um servidor debian dedicado ao gerenciamento):

    ssh-keygen
    
  • verifique se está protegido por uma frase-chave forte
  • copie sua chave pública para o servidor de repositório em /home/manager/.ssh/authorized_keys:

    ssh-copy-id [email protected]
    

Uma vez por sessão de gerenciamento

  • inicie o agente ssh na sua máquina digitando:

    eval `ssh-agent`
    
  • adicione sua chave ao agente (isso exigirá sua senha):

    ssh-add
    

Gerenciando um servidor

  • conecte-se ao servidor que você deseja gerenciar usando ssh -A( -Aativa o encaminhamento de agente):

    ssh -A some.server.org
    
  • mude para raiz (se você quiser usar, sudoprecisará configurar /etc/sudoersou sudointerromperá o encaminhamento do agente, leia isto ):

    su
    
  • agora você deve conseguir se conectar à conta de gerente do repositório usando ssh sem digitar sua senha novamente, graças ao encaminhamento do agente. Portanto, apt-getdeve funcionar bem:

    apt-get udate
    

Finalizando sua sessão de gerenciamento

  • Depois de terminar de gerenciar seus servidores, remova suas chaves do agente:

    ssh-add -D
    

Vantagens

  • Não é necessária muita configuração inicial
  • É necessária apenas uma chave privada
  • A chave privada é protegida por uma senha forte
  • Se alguém obtiver acesso root a um servidor, ele não terá acesso imediato ao servidor de repositório.
    • Observe que, se o hacker for paciente e qualificado, ele poderá esperar até você se conectar ao servidor usando o encaminhamento de agente e ele poderá invadir o mecanismo de encaminhamento para obter acesso ao servidor de repositório.
    • Para ajudar a evitar isso, você pode usar ssh-askpara aceitar / recusar todas as tentativas de usar sua chave.
    • De qualquer forma, o hacker não terá acesso à própria chave privada: ele poderá sequestrar o mecanismo de encaminhamento para poder usá- la e somente durante o tempo em que você estiver conectado ao servidor.
MiniQuark
fonte
Mais uma vez obrigado MiniQuark. Na verdade, as atualizações são autônomas, mas esse é um ótimo método que eu poderia aplicar para fins de teste.
Humber
O prazer é meu! :) Fico feliz se isso ajuda.
MiniQuark
4

Uma maneira de fazer isso é apenas permitir que um determinado conjunto de IPs acesse o repositório. Isso funciona muito bem para LAN e VPN.

Simples e eficiente.

Antoine Benkemoun
fonte
1
Obrigado Antoine :). Na verdade, o repositório que eu tenho agora é acessível usando esse método (http em uma conexão OpenVPN). Eu restrinja os IPs que pertencem à VPN. A desvantagem aqui é que todo host precisa estar conectado à VPN para acessar o repositório, o que é um pouco chato (gerenciar vários certificados / chaves). Desculpe por não especificar isso na pergunta.
Humber
É verdade que é incômodo gerenciar o OpenVPN, mas simplifica muito o gerenciamento da segurança do seu repositório. Além disso, os usuários não precisam se preocupar com credenciais uma vez dentro da VPN.
Antoine Benkemoun
2

A solução + / chaves privadas públicas SSH não é que ruim:

  • faça login como root na máquina cliente
  • digite ssh-keygen, entãossh-copy-id [email protected]
  • edite /etc/apt/sources.liste adicione algo como:

    deb ssh://[email protected]/path other stuff
    

Concedido, exige que você coloque a chave pública de cada servidor no ~/.ssh/authorized_keysarquivo no servidor, mas não é tão complicado (veja acima) e fornece controle sobre os servidores que você permite ou não a qualquer momento (você pode remover uma chave em a qualquer momento authorized_keys).

MiniQuark
fonte
Obrigado MiniQuark. Sim, esta solução não é tão ruim, mas o ssh-copy-id não funciona se a autenticação de senha estiver desativada no servidor openssh. Pensei em espalhar o mesmo arquivo de chave em cada cliente usando o repositório para poder usá-lo. Para mais segurança, o usuário com permissões mínimas seria usado. É quase o mesmo que compartilhar credenciais. Atualmente, estou testando esse método para verificar como se comporta / funciona.
Humber
1

Você pode configurar um acesso https ao seu repositório, protegido por login / senha (autenticação básica). O problema é que você precisa inserir o logon / senha em texto não criptografado /etc/apt/sources.list(nota: existe um patch para permitir que o logon / senha seja inserido /root/.netrc).

MiniQuark
fonte
Esta é provavelmente a melhor solução, também não é netrc, mas /etc/apt/auth.conf. Documentos aqui: manpages.debian.org/testing/apt/apt_auth.conf.5.en.html
Nicholi
0

O link na sua pergunta mostra vários métodos. Você deseja o número 2, https + autenticação básica.

Justin
fonte
Obrigado Justin. Eu acho que o transporte https com o apt só funciona se o apt-transport-https estiver instalado. Essa é uma alternativa interessante. O único inconveniente é as credenciais em sources.list
Humber
chmod 600 /etc/apt/sources.list
Justin