Restrinja de forma segura el acceso a un repositorio privado de Debian

9

Estaba buscando un método para restringir el acceso a un repositorio privado de Debian y poder autenticarlo de manera no interactiva (es decir, usando un script)

El artículo más útil que encontré si realmente es uno del sitio de administración de Debian pero el método seguro usa ssh y claves públicas / privadas. Funciona muy bien, pero la clave pública de cada host debe estar dentro del archivo remote_keys remoto para autenticarse con éxito. No dice nada acerca de proporcionar una contraseña para ssh: // pero supongo que debería ser posible.

¿Has probado otras alternativas (por ejemplo, ftps)?

Gracias por adelantado

Humber
fuente
El problema que tengo con el artículo anterior es que no solo le da acceso al repositorio APT, sino que le da acceso de shell a mi máquina de repositorio APT. Ese es un riesgo inaceptable.
BobDoolittle

Respuestas:

5

Si siempre ejecuta apt-geten sus servidores a mano (no hay apt-getcomandos automáticos iniciados por crons), entonces podría considerar usar el reenvío de agente ssh . Esto evita tener que administrar un par de claves públicas / privadas por servidor que administre, y probablemente sea más seguro que dejar las claves privadas en cada servidor.

Configuración inicial : conéctese a los servidores que desea administrar y agregue algo como esto /etc/apt/sources.list(en este ejemplo se supone que desea que sus servidores se conecten a la managercuenta):

    deb ssh://[email protected]/path other stuff
  • cree un par de claves privadas / públicas en su propia computadora, con su inicio johndoede sesión, por ejemplo (siempre que su computadora se ejecute en debian: si no, puede hacerlo desde un servidor debian dedicado a la administración):

    ssh-keygen
    
  • asegúrese de que esté protegido por una frase clave fuerte
  • copie su clave pública al servidor del repositorio en /home/manager/.ssh/authorized_keys:

    ssh-copy-id [email protected]
    

Una vez por sesión de gestión

  • inicie el agente ssh en su máquina escribiendo:

    eval `ssh-agent`
    
  • agregue su clave al agente (esto requerirá su frase de contraseña):

    ssh-add
    

Administrar un servidor

  • conéctese al servidor que desea administrar usando ssh -A( -Aactiva el reenvío de agente):

    ssh -A some.server.org
    
  • cambie a root (si desea usarlo sudonecesita configurarlo /etc/sudoerso de lo contrario sudointerrumpirá el reenvío del agente, lea esto ):

    su
    
  • ahora debería poder conectarse a la cuenta de administrador del repositorio utilizando ssh sin volver a escribir su contraseña, gracias al reenvío de agente. Por lo tanto, apt-getdebería funcionar bien:

    apt-get udate
    

Finalizando su sesión de gestión

  • Una vez que haya terminado de administrar sus servidores, elimine sus claves del agente:

    ssh-add -D
    

Ventajas

  • No se requiere mucha configuración inicial
  • Solo se requiere una clave privada
  • La clave privada está protegida por una contraseña fuerte
  • Si alguien obtiene acceso de root a uno de su servidor, no tendrá acceso inmediato a su servidor de repositorio.
    • Tenga en cuenta que si el pirata informático es paciente y calificado, puede esperar hasta que se conecte al servidor mediante el reenvío de agente, y puede secuestrar el mecanismo de reenvío para obtener acceso a su servidor de repositorio.
    • Para ayudar a prevenir eso, puede usarlo ssh-askpara aceptar / rechazar cualquier intento de usar su clave.
    • En cualquier caso, el hacker no tendrá acceso a la clave privada en sí: solo podrá secuestrar el mecanismo de reenvío para usar la clave, y solo durante el tiempo que esté conectado al servidor.
MiniQuark
fuente
Gracias de nuevo MiniQuark. En realidad, las actualizaciones son desatendidas, pero este es un gran método que podría aplicar para fines de prueba.
Humber
¡El gusto es mio! :) Me alegro si ayuda.
MiniQuark
4

Una forma de hacerlo es simplemente permitir que un determinado conjunto de IP acceda al repositorio. Esto funciona muy bien para LAN y VPN.

Simple y eficiente.

Antoine Benkemoun
fuente
1
Gracias Antoine :) En realidad, el repositorio que tengo ahora es accesible usando ese método (http sobre una conexión OpenVPN). Restringí las IP que pertenecen a la VPN. El inconveniente aquí es que cada host debe estar conectado a la VPN para acceder al repositorio, lo que es un poco molesto (administrar varios certificados / claves). Perdón por no especificar eso en la pregunta.
Humber
Es cierto que es molesto administrar OpenVPN, pero hace que administrar la seguridad de su repositorio sea muy simple. Además, los usuarios no tienen que molestarse con las credenciales una vez dentro de la VPN.
Antoine Benkemoun
2

La solución + claves públicas / privadas ssh no es que malo:

  • iniciar sesión como root en la máquina cliente
  • escriba ssh-keygen, entoncesssh-copy-id [email protected]
  • editar /etc/apt/sources.listy agregar algo como:

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

De acuerdo, requiere que coloque la clave pública de cada servidor en el ~/.ssh/authorized_keysarchivo en el servidor, pero no es tan complicado (ver arriba) y le da control sobre qué servidores permite o no en un momento dado (puede eliminar una clave en en cualquier momento authorized_keys)

MiniQuark
fuente
Gracias MiniQuark Sí, esta solución no es tan mala, pero ssh-copy-id no funciona si la autenticación de contraseña está deshabilitada en el servidor openssh. Pensé en difundir el mismo archivo de clave en cada cliente usando el repositorio para poder usarlo. Para mayor seguridad, se usaría un usuario con permisos mínimos. Es casi lo mismo que compartir credenciales. Actualmente estoy probando este método para verificar cómo se comporta / funciona.
Humber
1

Puede configurar un acceso https a su repositorio, asegurado por usuario / contraseña (autenticación básica). El problema es que necesita ingresar el nombre de usuario / contraseña de texto sin formato /etc/apt/sources.list(nota: hay un parche para permitir que se ingrese el nombre de usuario / contraseña /root/.netrc).

MiniQuark
fuente
Esta es probablemente la mejor solución, además no es netrc sino /etc/apt/auth.conf. Docs aquí: manpages.debian.org/testing/apt/apt_auth.conf.5.en.html
Nicholi
0

El enlace en su pregunta muestra varios métodos. Desea el número 2, https + autenticación básica.

Justin
fuente
Gracias justin Creo que el transporte https con apt solo funciona si apt-transport-https está instalado. Esta es una alternativa interesante. El único inconveniente son las credenciales en sources.list
Humber
chmod 600 /etc/apt/sources.list
Justin