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


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://manager@my.repository.org/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 manager@my.repository.org
    

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.

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.


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 your_login@your.repository.org
  • editar /etc/apt/sources.listy agregar algo como:

    deb ssh://your_login@your.repository.org/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)


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).


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.