reprepro: preparando el servidor

24 Nov

De entre las cosas que es necesario hacer en el servidor de paquetes Debian los preliminares son importantes.

Veamos. Necesitamos una cuenta de acceso limitada a transferir archivos y poco más, un espacio donde hacerlo y una manera de conectar ese espacio con el servidor web que publica los paquetes al mundo mundial.

Ya, ya sé que parece que he hablado antes de todo esto y que alguien se ha perdido algo. Y así es. Llevo varios días trabajando para mantener y crear dos repositorios de paquetes Debian que sean sencillos de mantener y fáciles de acceder. Y no he dicho nada hasta ahora, pero tengo que empezar a apuntar las cosas por alguna parte o no lo haré nunca.

Así que vamos allá con la configuración.

Paquetes necesarios

Instalamos lo siguiente:

  • openssh-server
  • rssh

Nos aseguramos ¡de que el servicio sftp esté activo en la configuración de sshd:

Subsystem sftp /usr/lib/openssh/sftp-server -u 0002
UsePAM yes

Y activamos lo que necesitemos en el programa rssh:

logfacility = LOG_USER 

allowscp
allowsftp
allowrsync

umask = 002

El usuario responsable

Creamos un usuario con algunos parámetros concretos: su directorio de trabajo será /var/lib/debian y su shell será restringido (rssh):

$ sudo adduser --home /var/lib/debian --shell /usr/bin/rssh debrepo

El directorio debian se encuentra bajo /var/lib/ para asegurarnos de que es salvado automáticamente con las copias de seguridad (sigo el criterio de que todo lo que esté bajo esa ruta es importante).

Y ahora podemos probar a testear la conexión para ver si es factible:

$ sftp debrepo@example.net
debrepo@example.net's password: 
Connected to example.net
sftp> ls -la 
drwxr-xr-x    3 debrepo  debrepo      4096 Nov 24 09:24 .
drwxr-xr-x  101 root     root         4096 Nov 24 09:18 ..
-rw-r--r--    1 debrepo  debrepo       220 Nov 24 09:18 .bash_logout
-rw-r--r--    1 debrepo  debrepo      3526 Nov 24 09:18 .bashrc
-rw-r--r--    1 debrepo  debrepo       675 Nov 24 09:18 .profile
drwxrwxr-x    2 debrepo  debrepo      4096 Nov 24 09:24 .ssh
sftp> mkdir .ssh
sftp> chmod 0700 .ssh
Changing mode on /var/lib/debian/.ssh
sftp> bye

De paso aprovechamos para crear y ajustar los permisos del directorio .ssh ya que queremos que la subida de archivos del repositorio sea más cómoda y necesitamos emplear claves SSH.

Un detalle al respecto: si vamos a crear un número mayor de usuarios con este tipo de acceso sería preferible modificar el directorio de plantillas que utiliza adduser (algo de lo que hablo en esta entrada).

La conexión con el servidor web

No he hablado aún de la manera en que añadimos archivos y directorios al repositorio porque es algo que tengo en otra entrada; ahora mismo interesa saber cómo conectamos el servidor web (apache en mi caso) con el repositorio.

Lo idóneo es definir un servidor virtual cuya raíz sea la del repositorio de paquetes. Para ello vamos a crear la configuración concreta.

<VirtualHost *:80>
    ServerName          debian.example.net
    ServerAdmin         root@example.net

    Include /etc/apache2/conf.d/redirect-ssl.conf
</VirtualHost>

<VirtualHost *:443>
    ServerName          debian.example.net
    ServerAdmin         root@example.net

    DocumentRoot    /var/lib/debian

    <Directory /var/lib/debian>
                Options +Indexes
                IndexIgnore css include images
                IndexOptions Charset=UTF-8 FancyIndexing FoldersFirst
                HeaderName /include/HEADER.html
                ReadmeName /include/FOOTER.html
                Require all granted
    </Directory>

    LogLevel    warn
    ErrorLog    /var/log/apache2/debian.example.net/error.log
    CustomLog   /var/log/apache2/debian.example.net/access.log combined

    # Incluímos conexiones seguras
    Include /etc/apache2/conf.d/example.net-ssl.conf
</VirtualHost>

Las opciones del directorio raíz son las necesarias para el módulo autoindex de Apache; hace referencia a dos archivos HTML que añaden información a las páginas y de los que hablaré en otra entrada, e indica qué tipo de acceso precisa.

También hace referencia a dos archivos de configuración; el primero fuerza que las conexiones sean siempre cifradas:

RewriteEngine on

Alias /letsencrypt      /var/www/letsencrypt
RewriteCond %{REQUEST_URI} ^/\.well\-known/acme\-challenge/
RewriteRule . /letsencrypt%{REQUEST_URI} [PT] [L]

RewriteCond %{HTTPS} !^on$ [NC]
RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
RewriteRule . https://%{HTTP_HOST}%{REQUEST_URI}  [L]

Mientras que el segundo sólo activa el motor SSL e indica dónde están los certificados necesarios.

Lo que sí que tenemos que añadir es el directorio de registro de mensajes:

$ sudo install -d -o www-data -g www-data /var/log/apache2/debian.example.net/

Activar el servidor virtual será el paso final antes de proceder con el uso del repositorio en sí; no debe mostrarnos nada porque nada tiene. Si enseñamos algo es que hay algún problema con la configuración.

Sigamos con el resto …