{"id":2445,"date":"2017-11-24T08:52:17","date_gmt":"2017-11-24T08:52:17","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=2445"},"modified":"2017-11-24T16:33:25","modified_gmt":"2017-11-24T16:33:25","slug":"reprepro-preparando-el-servidor","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2017\/11\/24\/reprepro-preparando-el-servidor\/","title":{"rendered":"reprepro: preparando el servidor"},"content":{"rendered":"<p>De entre las cosas que es necesario hacer en el servidor de paquetes Debian los preliminares son importantes.<\/p>\n<p><!--more--><\/p>\n<p>Veamos. Necesitamos una cuenta de acceso limitada a transferir archivos y poco m\u00e1s, un espacio donde hacerlo y una manera de conectar ese espacio con el servidor web que publica los paquetes al mundo mundial.<\/p>\n<p style=\"padding-left: 30px;\">Ya, ya s\u00e9 que parece que he hablado antes de todo esto y que alguien se ha perdido algo. Y as\u00ed es. Llevo varios d\u00edas trabajando para mantener y crear dos repositorios de paquetes Debian que sean sencillos de mantener y f\u00e1ciles de acceder. Y no he dicho nada hasta ahora, pero tengo que empezar a apuntar las cosas por alguna parte o no lo har\u00e9 nunca.<\/p>\n<p>As\u00ed que vamos all\u00e1 con la configuraci\u00f3n.<\/p>\n<h4>Paquetes necesarios<\/h4>\n<p>Instalamos lo siguiente:<\/p>\n<ul>\n<li>openssh-server<\/li>\n<li>rssh<\/li>\n<\/ul>\n<p>Nos aseguramos \u00a1de que el servicio <em>sftp<\/em> est\u00e9 activo en la configuraci\u00f3n de <em>sshd<\/em>:<\/p>\n<pre class=\"lang:default decode:true \">Subsystem sftp \/usr\/lib\/openssh\/sftp-server -u 0002\r\nUsePAM yes\r\n\r\n<\/pre>\n<p>Y activamos lo que necesitemos en el programa <em>rssh<\/em>:<\/p>\n<pre class=\"lang:default decode:true \">logfacility = LOG_USER \r\n\r\nallowscp\r\nallowsftp\r\nallowrsync\r\n\r\numask = 002\r\n<\/pre>\n<h4>El usuario responsable<\/h4>\n<p>Creamos un usuario con algunos par\u00e1metros concretos: su directorio de trabajo ser\u00e1 <em>\/var\/lib\/debian<\/em> y su shell ser\u00e1 restringido (<em>rssh<\/em>):<\/p>\n<pre class=\"lang:default decode:true\">$ sudo adduser --home \/var\/lib\/debian --shell \/usr\/bin\/rssh debrepo<\/pre>\n<p>El directorio <em>debian<\/em> se encuentra bajo <em>\/var\/lib\/<\/em> para asegurarnos de que es salvado autom\u00e1ticamente con las copias de seguridad (sigo el criterio de que todo lo que est\u00e9 bajo esa ruta es importante).<\/p>\n<p>Y ahora podemos probar a testear la conexi\u00f3n para ver si es factible:<\/p>\n<pre class=\"lang:default decode:true\">$ sftp debrepo@example.net\r\ndebrepo@example.net's password: \r\nConnected to example.net\r\nsftp&gt; ls -la \r\ndrwxr-xr-x    3 debrepo  debrepo      4096 Nov 24 09:24 .\r\ndrwxr-xr-x  101 root     root         4096 Nov 24 09:18 ..\r\n-rw-r--r--    1 debrepo  debrepo       220 Nov 24 09:18 .bash_logout\r\n-rw-r--r--    1 debrepo  debrepo      3526 Nov 24 09:18 .bashrc\r\n-rw-r--r--    1 debrepo  debrepo       675 Nov 24 09:18 .profile\r\ndrwxrwxr-x    2 debrepo  debrepo      4096 Nov 24 09:24 .ssh\r\nsftp&gt; mkdir .ssh\r\nsftp&gt; chmod 0700 .ssh\r\nChanging mode on \/var\/lib\/debian\/.ssh\r\nsftp&gt; bye\r\n<\/pre>\n<p>De paso aprovechamos para crear y ajustar los permisos del directorio <em>.ssh<\/em> ya que queremos que la subida de archivos del repositorio sea m\u00e1s c\u00f3moda y necesitamos emplear claves SSH.<\/p>\n<p style=\"padding-left: 30px;\">Un detalle al respecto: si vamos a crear un n\u00famero mayor de usuarios con este tipo de acceso ser\u00eda preferible modificar el directorio de plantillas que utiliza <em>adduser<\/em> (algo de lo que hablo en <a href=\"https:\/\/esferas.org\/msqlu\/2017\/11\/24\/adduser-cuando-necesitas-anadir-muchas-cuentas\/\">esta entrada<\/a>).<\/p>\n<h4>La conexi\u00f3n con el servidor web<\/h4>\n<p>No he hablado a\u00fan de la manera en que a\u00f1adimos archivos y directorios al repositorio porque es algo que tengo en otra entrada; ahora mismo interesa saber c\u00f3mo conectamos el servidor web (<em>apache<\/em> en mi caso) con el repositorio.<\/p>\n<p>Lo id\u00f3neo es definir un servidor virtual cuya ra\u00edz sea la del repositorio de paquetes. Para ello vamos a crear la configuraci\u00f3n concreta.<\/p>\n<pre class=\"lang:apache decode:true \">&lt;VirtualHost *:80&gt;\r\n    ServerName          debian.example.net\r\n    ServerAdmin         root@example.net\r\n\r\n    Include \/etc\/apache2\/conf.d\/redirect-ssl.conf\r\n&lt;\/VirtualHost&gt;\r\n\r\n&lt;VirtualHost *:443&gt;\r\n    ServerName          debian.example.net\r\n    ServerAdmin         root@example.net\r\n\r\n    DocumentRoot    \/var\/lib\/debian\r\n\r\n    &lt;Directory \/var\/lib\/debian&gt;\r\n                Options +Indexes\r\n                IndexIgnore css include images\r\n                IndexOptions Charset=UTF-8 FancyIndexing FoldersFirst\r\n                HeaderName \/include\/HEADER.html\r\n                ReadmeName \/include\/FOOTER.html\r\n                Require all granted\r\n    &lt;\/Directory&gt;\r\n\r\n    LogLevel    warn\r\n    ErrorLog    \/var\/log\/apache2\/debian.example.net\/error.log\r\n    CustomLog   \/var\/log\/apache2\/debian.example.net\/access.log combined\r\n\r\n    # Inclu\u00edmos conexiones seguras\r\n    Include \/etc\/apache2\/conf.d\/example.net-ssl.conf\r\n&lt;\/VirtualHost&gt;\r\n\r\n<\/pre>\n<p>Las opciones del directorio ra\u00edz son las necesarias para el m\u00f3dulo autoindex de Apache; hace referencia a dos archivos HTML que a\u00f1aden informaci\u00f3n a las p\u00e1ginas y de los que hablar\u00e9 en otra entrada, e indica qu\u00e9 tipo de acceso precisa.<\/p>\n<p>Tambi\u00e9n hace referencia a dos archivos de configuraci\u00f3n; el primero fuerza que las conexiones sean siempre cifradas:<\/p>\n<pre class=\"lang:apache decode:true\">RewriteEngine on\r\n\r\nAlias \/letsencrypt      \/var\/www\/letsencrypt\r\nRewriteCond %{REQUEST_URI} ^\/\\.well\\-known\/acme\\-challenge\/\r\nRewriteRule . \/letsencrypt%{REQUEST_URI} [PT] [L]\r\n\r\nRewriteCond %{HTTPS} !^on$ [NC]\r\nRewriteCond %{REQUEST_URI} !^\/\\.well\\-known\/acme\\-challenge\/\r\nRewriteRule . https:\/\/%{HTTP_HOST}%{REQUEST_URI}  [L]\r\n<\/pre>\n<p>Mientras que el segundo s\u00f3lo activa el motor SSL e indica d\u00f3nde est\u00e1n los certificados necesarios.<\/p>\n<p>Lo que s\u00ed que tenemos que a\u00f1adir es el directorio de registro de mensajes:<\/p>\n<pre class=\"lang:default decode:true\">$ sudo install -d -o www-data -g www-data \/var\/log\/apache2\/debian.example.net\/<\/pre>\n<p>Activar el servidor virtual ser\u00e1 el paso final antes de proceder con el uso del repositorio en s\u00ed; no debe mostrarnos nada porque nada tiene. Si ense\u00f1amos algo es que hay alg\u00fan problema con la configuraci\u00f3n.<\/p>\n<p>Sigamos con el resto &#8230;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>De entre las cosas que es necesario hacer en el servidor de paquetes Debian los preliminares son importantes.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[6],"tags":[731,730,729,726],"class_list":["post-2445","post","type-post","status-publish","format-standard","hentry","category-debian","tag-adduser","tag-reprepro","tag-rssh","tag-sshd"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2445","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=2445"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2445\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=2445"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=2445"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=2445"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}