Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Proteger repositorio Satis

10 de enero de 2014

Hola,

necesito crear un repositorio satis para gestionar los paquetes privados de la empresa en la que trabajo y, por consiguiente, necesito proteger el acceso al repositorio mediante algún mecanismo de seguridad. Tras leer la documentación de Satis y en concreto la sección que habla de este tema me surgen muchas dudas, ya que la documentación es bastante escueta al respecto y mis conocimientos sobre SSH/SSL son bastante escasos, de modo que si alguien pudiese indicarme los pasos a seguir se lo agradecería enormemente.

Un saludo.


Respuestas

#1

La forma más sencilla de crear un repositorio privado con Satis consiste en instalarlo en un servidor al que sólo tengáis acceso vía SSH los empleados de la empresa. Después, en el archivo composer.json de tus proyectos tienes que añadir la siguiente configuración para indicar tu login y los archivos donde se guardan la clave pública y privada que te permiten acceder a ese servidor remoto:

{
    "repositories": [
        {
            "type": "composer",
            "url": "ssh2.sftp://example.org",
            "options": {
                "ssh2": {
                    "username": "composer",
                    "pubkey_file": "/home/composer/.ssh/id_rsa.pub",
                    "privkey_file": "/home/composer/.ssh/id_rsa"
                }
            }
        }
    ]
}

@javiereguiluz

11 enero 2014, 22:18
#2

Gracias por tu respuesta Javier. La verdad es que me estaba haciendo un lío y no tenía claro donde debía ubicar la configuración de acceso mediante clave pública y privada. Entonces, si no he entendido mal, cada desarrollador que necesite acceder al repositorio desde su entorno local de desarrollo necesitará forzosamente tener permiso para acceder con par de claves al servidor Satis desde el equipo en el que trabaja, ¿verdad?

@beni0888

13 enero 2014, 9:59
#3

@beni0888 efectivamente esa sería la idea para proteger completamente un repositorio privado creado con Satis.

Otra forma de hacerlo que he visto en alguna empresa consiste en instalar Satis en un servidor que solamente se pueda acceder desde la red interna de la empresa. Así los programadores no tienen que indicar sus claves públicas y privadas en el archivo composer.json.

Obviamente, para poder deployar la aplicación en un servidor externo, sí que tendrías que permitir que el servidor de producción acceda a la red de tu empresa y tendrías que configurar en el archivo composer.json sus claves. La diferencia es que sólo tendrías que hacerlo para un servidor en vez obligar a que cada programador indique sus claves.

@javiereguiluz

15 enero 2014, 22:03
#4

@beni0888 he preguntado a algunos programadores de SensioLabs y me han comentado cómo utilizan ellos los repositorios privados creados con Satis. La solución no se basa en Composer sino en el departamento de sistemas: al servidor donde está el repositorio privado sólo se puede acceder desde la red interna de la empresa y desde la IP que corresponde al servidor de producción.

Si no puedes limitar el acceso por IP, me han comentado que lo mejor sería utilizar un certificado en vez de las claves SSH. La ventaja de hacerlo así es que el composer.json de todos los programadores es exactamente el mismo porque todos utilizan el mismo certificado:

{
    "repositories": [
        {
            "type": "composer",
            "url": "https://example.org",
            "options": {
                "ssl": {
                    "local_cert": "/home/composer/.ssl/composer.pem"
                }
            }
        }
    ]
}

@javiereguiluz

16 enero 2014, 9:38
#5

Muchísimas gracias por tu respuesta y por las molestias que te has tomado para documentarte al respecto @javiereguiluz, ahora mismo voy a tratar de ponerlo en práctica. Un saludo.

@beni0888

16 enero 2014, 13:48
#6

@javiereguiluz disculpa que vuelva a molestarte con este tema, he puesto en marcha el repositorio Satis protegido con un certificado SSL según las instrucciones de tu último comentario pero no consigo que Composer conecte al repositorio. Cuando ejecuto composer install recibo el siguiente error:

[Composer\Downloader\TransportException]                                                                                                                      
  The "https://satis.example.com/packages.json" file could not be downloaded:
  Unable to set private key file `/var/www/satisclient/certificado-cliente.pem'  
  failed to create an SSL handle                                                                                                                                
  Failed to enable crypto                                                                                                                                       
  failed to open stream: operation failed

Para ello estoy utilizando un certificado SSL autofirmado tanto en el cliente como el servidor. Los certificados SSL están correctamente creados y funcionando ya que al acceder desde el navegador a https://satis.example.com/ me solicita el certificado del cliente y una vez seleccionado accedo correctamente. Se me ocurre que podría deberse a alguna limitación de Composer en cuanto a certificados protegidos con pass_phrase, no sé si sabrás algo al respecto.

@beni0888

17 enero 2014, 13:46
#7

Tras un fin de semana sin dormir he conseguido dar con la solución al problema. El problema radicaba en que Composer necesita que se le indique en la opción local_cert la ruta a un fichero que contenga tanto la clave privada como la clave pública del certificado SSL, mientras que yo únicamente le estaba indicando la ruta al fichero con la clave pública.

Finalmente llegué a la solución a través de esta url en la que se comenta un problema similar con la utilidad cURL, ya que la documentación de Composer/Satis al respecto es bastante escasa (por no decir inexistente).

Así que finalmente la solución pasó por hacer lo siguiente:

$> cat clave-privada-cliente.pem clave-publica-cliente.pem > certificado.txt

Añadir la ruta a certificado.txt en la opción local_cert del fichero composer.json y a disfrutar ;)

Un saludo

@beni0888

20 enero 2014, 13:41
#8

¡Muchas gracias por la explicación de cómo hacerlo funcionar!

En el repositorio de Composer he leído un comentario de un usuario que propone otra forma de hacerlo. En vez de añadir la ruta del certificado en el archivo composer.json, se puede utilizar la configuración global de Composer.

Así los cambios sólo hay que hacerlos una vez por cada máquina de cada programador, en vez de tener que añadir la configuración en cada proyecto que utiliza el repositorio privado.

@javiereguiluz

20 enero 2014, 23:04
#9

Gracias Javier, evaluaré también la solución que propones.

Un saludo.

@beni0888

21 enero 2014, 8:37