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 …