<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Servicios | ahierro.es</title>
	<atom:link href="https://blog.ahierro.es/category/sistemas/servicios/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.ahierro.es</link>
	<description>Un blog personal  donde compartir experiencias e inquietudes relacionadas con internet, tecnología y otros asuntos interesantes</description>
	<lastBuildDate>Fri, 30 Oct 2020 05:28:10 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>

<image>
	<url>https://blog.ahierro.es/wp-content/uploads/2018/10/cropped-logo_small-1-2-32x32.png</url>
	<title>Servicios | ahierro.es</title>
	<link>https://blog.ahierro.es</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>FTP activo vs FTP pasivo</title>
		<link>https://blog.ahierro.es/ftp-activo-vs-ftp-pasivo/</link>
					<comments>https://blog.ahierro.es/ftp-activo-vs-ftp-pasivo/#comments</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Tue, 19 Nov 2019 07:02:42 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[ftps]]></category>
		<category><![CDATA[servidor]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=2078</guid>

					<description><![CDATA[<p>El protocolo FTP lleva con nosotros desde la década de los setenta, y hoy, casi cincuenta años después, sigue siendo una tecnología muy presente en el flujo de trabajo habitual de los desarrolladores web. Personalmente lo utilzo con relativa frecuencia, generalmente con el cliente FileZilla, un cliente FTP multiplataforma de código abierto muy recomendable. Y &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/ftp-activo-vs-ftp-pasivo/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "FTP activo vs FTP pasivo"</span></a></p>
La entrada <a href="https://blog.ahierro.es/ftp-activo-vs-ftp-pasivo/">FTP activo vs FTP pasivo</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>El protocolo FTP lleva con nosotros desde la década de los setenta, y hoy, casi cincuenta años después, sigue siendo una tecnología muy presente en el flujo de trabajo habitual de los desarrolladores web.</p>



<figure class="wp-block-image is-resized"><img fetchpriority="high" decoding="async" src="https://lh3.googleusercontent.com/yRgL9935kWlYQIhJf0mXw_oaa6ulwsW9mbw2OWCo-QhDz2vE35Kqk1ZbjI9XiTU9T1wKhKKxCe3svz5S72pD9x5aFEjLxzGtLkD-00w4WLbB5wwqsJ--u_nrJI6DPuQlKHeQ7SDHmkW97ukFSNTdlWH-z43BzJJ0H51hasNjJkGvf3aDzz0cht-F78bk8TqGIYCYA_25bHZ0cGpk6fY2ZKXrTvPgklJ58JXibyWI2AtgDUz0A8RMmTtz3yFxJw0PWsgayACnamN032kXlb9yE8Y8APsNpmk5racVLM_EwsjceRCN0O9xperEORykp5IYUMaAdjb8VNGzHLjPvhuYo7JVsujGLhaN__eJxWH2TtwIXuu91K9KDmXMvigZKjTR6cmrtwaZ-wTrIXUBS1wAfo3c_sQ7QWwKEHLmSOwaYTwSC3jWRkHU8HlVbS3eNcjLvgEWwJ70F-H2Ti0KLJKo4ySqSPrOrG02v2gNJHrUaN46p6p6BNLgUIrOzHSUonfoOHY0j2YtojI8baFqt74LFyu4LuwC8lj-XpDIud2CLRBkGmBxi2zP3NyObUplJiwRbl7BnojmhpbqrPjAKpwY-rCatqymzedjgzpvCh9a5ADFKqQDM4-Vl8qMLEZ_iBrNBOPiJr8emKN_FXEM_HIOCKKA1dnb8rDf75_hRmm-c0D9e-0RDsl90V5crdwSkDmPWFwZ5SvO7xpQqusK8BzaG9CsvnXkYd0qiyN7n_7qhPo=w1622-h912-no" alt="FTP activo vs FTP pasivo" width="840" height="470"/></figure>



<span id="more-2078"></span>



<p>Personalmente lo utilzo con relativa frecuencia, generalmente con el cliente FileZilla, un cliente FTP multiplataforma de código abierto muy recomendable. Y siendo honestos, hasta la escritura de esta entrada, mi desconocimiento sobre los modos de conexión activo o pasivo era absoluto, algo que intuyo que le sucede a mucha gente, y ya se sabe que mal de muchos <s>consuelo de tontos</s> entrada en el blog.</p>



<h2 class="wp-block-heading">FTP, FTPS y SFTP.</h2>



<p>Recordemos que existen tres protocolos distintos a los que solemos referirnos cuando hablamos de FTP: FTP, FTPS y SFTP. Si tienes dudas sobre alguno de ellos puedes echarle un vistazo a la entrada <a href="https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/">FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes</a>.</p>



<p>Pues bien, los modos activo o pasivo solo aplican sobre los protocolos FTP y FTPS, en ningún caso sobre SFTP, pues es un protocolo que dista bastante de los dos anteriores.</p>



<h2 class="wp-block-heading">Puerto de datos y puerto de control</h2>



<p>Otro aspecto clave que debemos conoce para entender el funcionamiento del FTP es que trabaja sobre dos puertos distintos: el puerto de datos y el puerto de comandos o puerto de control.</p>



<p>Los nombres son bastante auto-explicativos, el  puerto de datos se encarga de la transmisión de los ficheros y el puerto de control de las instrucciones entre ambos host. Se diseñó así para poder enviar comandos sin la necesidad de detener la transmisión de datos ni de encolarlos tras estos.</p>



<p>Si nos centramos en el servidor, tradicionalmente el puerto de control ha sido el 21 y el puerto de datos varía en función del modo, siendo el 20 para el modo activo, y un puerto aleatorio para el modo pasivo.</p>





<p>En el lado del cliente, en cambio, el puerto de control será un puerto aleatorio P superior a 1023, y el puerto de datos será P+1. Esto es así tanto en el modo activo, como en el pasivo.</p>



<p>Pero veamos cada uno de los modos en detalle para entenderlo mejor.</p>



<h2 class="wp-block-heading">FTP activo</h2>



<p>Es el modo predeterminado para las conexiones FTP, de hecho fue el primero en desarrollarse. En este modo el servidor utilizará el puerto 20 para la transferencia de datos, mientras que transmitirá los comandos utilizando el puerto 21. El cliente en cambio utilizará un puerto aleatorio P superior al 1023 para la transferencia de comandos, y un puerto P+1 para la transferencia de datos.</p>



<h3 class="wp-block-heading">Secuencia de conexión del modo activo</h3>



<p>La secuencia de conexión del modo activo es la siguiente:</p>



<ol class="wp-block-list"><li>El cliente FTP comienza la conexión dese un puerto de control aleatorio P con destino al puerto 21 del servidor. Como hemos mencionado el puerto P será superior a 1023.</li><li>El servidor responde desde el puerto de control.</li><li>El servidor inicia entonces la conexión del canal de datos: puerto 20 para el servidor y puerto P+1 para el cliente.</li><li>El cliente responde desde el puerto de datos estableciendo así la conexión.</li></ol>



<h3 class="wp-block-heading">Inconvenientes del modo activo</h3>



<p>Históricamente el principal inconveniente de este modo ha radicado en que si no hay una directiva específica en los firewalls del lado del cliente, la conexión es propensa a ser bloqueada. Esto se debe a que, como hemos visto, existen dos conexiones independientes: una de salida en la que el cliente establece la conexión del canal de control y otra de entrada en la que el servidor hace lo propio con el de datos. Esta última conexión es iniciada por el servidor en el puerto previamente negociado, y en ocasiones es bloqueada por el firewall del cliente al ser identificada como un intento de conexión externa no autorizada.</p>



<p>Recordemos que este sistema se diseñó en los años 70, cuando la democratización de los sistemas informáticos y los problemas de seguridad eran completamente distintos a los que podemos encontrar hoy en día.</p>



<p>Sea como sea, en todos los años que llevo utilizando el protocolo FTP desde el rol de cliente, no recuerdo haber experimentado nunca problemas de este tipo, y habré conectado con varias decenas de servidores de muchos proveedores distintos. Entiendo que esto se deba a la sofisticación de los sistemas de red y de seguridad más modernos.</p>



<h2 class="wp-block-heading">FTP pasivo</h2>



<p>El modo de FTP pasivo surge como consecuencia de los problemas de conexión  del modo activo. Este modo mantiene los dos canales (control y datos) pero en este caso es el cliente el encargado de establecer las dos conexiones.</p>



<p>El servidor sigue manteniendo el puerto 21 como puerto de comandos, el puerto de datos en cambio difiere del modo activo y pasa a ser un rango de puertos Q superior a 1023. Del lado del cliente seguimos manteniendo el puerto P superior a 1023 para control, y el puerto P+1 para datos.</p>



<h3 class="wp-block-heading">Secuencia de conexión del modo pasivo</h3>



<p>La secuencia de conexión del modo pasivo es la que sigue a continuación:</p>



<ol class="wp-block-list"><li>El cliente FTP comienza la conexión dese un puerto de control aleatorio P con destino al puerto 21 del servidor.</li><li>El servidor responde desde el puerto de control.</li><li>El cliente inicia la conexión del canal de datos dese el puerto P+1 hacia el puerto Q del servidor.</li><li>El servidor responde desde el puerto de datos estableciendo así la conexión.</li></ol>



<p>Como ves, los pasos uno y dos son iguales que en el modo activo, y es en los pasos tres y cuatro dónde vemos como se invierten los roles y es el cliente el que inicia la conexión de datos.</p>



<h3 class="wp-block-heading">Inconvenientes del modo pasivo del FTP</h3>



<p>El principal inconveniente de habilitar el modo pasivo en un servidor FTP está asociado con el riesgo extra en materia de seguridad que conlleva la apertura de un rango de puertos extra con respecto al modo activo. Notemos que para que el modo pasivo funcione adecuadamente estos puertos deben ser abiertos tanto en el servidor como en el firewall.</p>





<p>Para minimizar este riesgo la estrategia pasa por definir un rango de puertos lo más pequeño posible en función del número de conexiones concurrentes que esperemos tener, pero ojo, porque un cliente no se corresponde con una única conexión, es muy probable que cada cliente abra múltiples conexiones concurrentes.</p>



<h2 class="wp-block-heading">Resumen</h2>



<p>Para cerrar esta entrada os dejo una tabla con el resumen de lo que hemos visto.</p>



<figure class="wp-block-table"><table class=""><tbody><tr><th></th><th></th><th>Activo</th><th>Pasivo</th></tr><tr><th>Servidor</th><th>Puerto de control</th><td>21</td><td>21</td></tr><tr><th>Servidor</th><th>Puerto de datos</th><td>20</td><td>Rango Q &gt; 1023</td></tr><tr><th>Cliente</th><th>Puerto de control</th><td>P &gt; 1023</td><td>P &gt; 1023</td></tr><tr><th>Cliente</th><th>Puerto de datos</th><td>P + 1</td><td>P + 1</td></tr><tr><th>Quien inicia</th><th>Conexión de control</th><td>Cliente</td><td>Cliente</td></tr><tr><th>Quién inicia</th><th>Conexión de datos</th><td>Servidor</td><td>Cliente</td></tr><tr><th></th><th>Inconvenientes</th><td>Bloqueo por firewalls</td><td>Riesgo extra de seguridad</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Créditos, referencias y artículos relacionados</h2>



<ul class="wp-block-list"><li>Imagen de portada por <a rel="noreferrer noopener" aria-label="Michal Jarmoluk  (abre en una nueva pestaña)" href="https://pixabay.com/users/jarmoluk-143740/" target="_blank">Michal Jarmoluk </a>en Pixabay</li><li><a href="https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/">FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes</a></li><li><a href="https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/">VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu</a></li><li><a href="https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/">FTPS o cómo habilitar SSL en vsftp</a></li><li><a href="https://blog.ahierro.es/usuarios-virtuales-en-vsftp/">Usuarios virtuales en vsftp</a></li></ul>



<p></p>La entrada <a href="https://blog.ahierro.es/ftp-activo-vs-ftp-pasivo/">FTP activo vs FTP pasivo</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/ftp-activo-vs-ftp-pasivo/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Aumentar el límite de memoria de un script en PHP</title>
		<link>https://blog.ahierro.es/aumentar-el-limite-de-memoria-de-un-script-en-php/</link>
					<comments>https://blog.ahierro.es/aumentar-el-limite-de-memoria-de-un-script-en-php/#respond</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Wed, 18 Sep 2019 06:55:37 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=1656</guid>

					<description><![CDATA[<p>La configuración por defecto de un servidor LAMP es válida para el correcto funcionamiento de la mayoría de las páginas web. Sin embargo, si ejecutamos aplicaciones que necesitan de una gran cantidad de recursos del sistema es posible estos valores se nos queden cortos en algunos momentos. Y uno de esos valores que a veces &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/aumentar-el-limite-de-memoria-de-un-script-en-php/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "Aumentar el límite de memoria de un script en PHP"</span></a></p>
La entrada <a href="https://blog.ahierro.es/aumentar-el-limite-de-memoria-de-un-script-en-php/">Aumentar el límite de memoria de un script en PHP</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>La configuración por defecto de un servidor LAMP es válida para el correcto funcionamiento de la mayoría de las páginas web.  Sin embargo, si ejecutamos aplicaciones que necesitan de una gran cantidad de recursos del sistema es posible estos valores se nos queden cortos en algunos momentos.</p>



<figure class="wp-block-image is-resized"><img decoding="async" src="https://blog.ahierro.es/wp-content/uploads/2019/08/chips-20072_1920-1024x683.jpg" alt="Aumentar el límite de memoria de un script en PHP" class="wp-image-1673" width="798" height="413"/></figure>



<span id="more-1656"></span>



<p>Y uno de esos valores que a veces se quedan cortos es la cantidad de memoria máxima que un script desarrollado en PHP puede consumir, así que hoy veremos como aumentar ese límite.</p>



<h2 class="wp-block-heading">Fatal error: Allowed memory size of 134217728 bytes exhausted</h2>



<p>Alcanzar el límite máximo de memoria de nuestro servidor no es algo demasiado habitual. La configuración por defecto tiene un valor lo suficientemente amplio como para que podamos ejecutar la mayoría de las aplicaciones sin problema alguno. Pero en caso de alcanzarlo,el sistema devuelve el siguiente error:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
Fatal error: Allowed memory size of 134217728 bytes exhausted
</pre></div>


<p>Con la salvedad de que el número de bytes puede variar en función de la configuración del servidor.</p>





<h2 class="wp-block-heading">Medida de protección</h2>



<p>Que PHP disponga de un límite máximo de consumo de memoria en la ejecución de cada script es una medida de protección, no olvidemos que la memoria en una máquina es un recurso finito. Así que antes de ampliar este parámetro, mi consejo es que nos aseguremos de que:</p>



<ol class="wp-block-list"><li>No es un bug en nuestro script el que crea la necesidad de ampliar la memoria.</li><li>Nuestro script está razonablemente optimizado.</li></ol>



<p>Es decir, nada que no debamos hacer con cualquier otro script que no supere el límite máximo de memoria definido. Porque si recordáis una de las primeras lecciones que aprendemos (o al menos que deberíamos aprender) al comenzar a programar es que nuestro código debe cumplir tres requisitos fundamentales:</p>



<ol class="wp-block-list"><li>Estar libre de errores</li><li>Ser eficiente</li><li>Ser comprensible</li></ol>



<h2 class="wp-block-heading">Cómo aumentar el límite máximo de memoria para un script PHP</h2>



<p>Por defecto, el límite máximo de memoria que un script PHP puede consumir es de 128Mb, algo más que razonable. Si ya tenemos claro que queremos aumentar este límite podemos hacerlo de dos formas.</p>



<h3 class="wp-block-heading">Con la función init_set()</h3>



<p>Con la función <em>init_set() </em>pasando el string<em> memory_limit </em>como primer parámetro y la cantidad de memoria deseada como segundo. Con este método, el nuevo limite afectará única y exclusivamente al script dónde lo estemos utilizando, es decir, sin afectar a la configuración general del servidor.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php

ini_set(&#039;memory_limit&#039;, &#039;256M&#039;);

...

?&gt;
</pre></div>


<h3 class="wp-block-heading">En el archivo php.ini</h3>



<p>En este caso, la principal diferencia con respecto al método anterior es que el nuevo límite afectará a todos los scripts PHP que se ejecuten en el servidor dónde apliquemos esta configuración. Para definir el nuevo límite, buscamos la directriz <em>memory_limit,</em> dentro de la sección <em>Resources Limits</em>, en el archivo <em>php.ini</em> y modificamos su valor.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

...

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit=256M
</pre></div>


<p>Y acto seguido reiniciamos el servidor Apache 2 para que los cambios surtan efecto.:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo service apache2 restart
</pre></div>


<p>La ubicación del archivo <em>php.ini </em>variará en función del sistema que estemos utilizando. En los sistemas Linux basados en Debian como Ubuntu la ubicación será <em>/etc/php/X.X/apache2</em>, donde X.X será la versión de PHP.</p>





<h2 class="wp-block-heading">Comprobar límite máximo de memoria de un script PHP</h2>



<p>Podemos comprobar el valor máximo de memoria que utiliza un script configurado en nuestro servidor en la sección <em>Core </em>de la salida de la función <em>phpinfo()</em>:</p>



<figure class="wp-block-image"><img decoding="async" width="417" height="122" src="https://blog.ahierro.es/wp-content/uploads/2019/09/phpinfo_memory_limit.png" alt="phpinfo() memory_limit" class="wp-image-1705" srcset="https://blog.ahierro.es/wp-content/uploads/2019/09/phpinfo_memory_limit.png 417w, https://blog.ahierro.es/wp-content/uploads/2019/09/phpinfo_memory_limit-300x88.png 300w" sizes="(max-width: 417px) 100vw, 417px" /></figure>



<p>O como acabamos de ver, accediendo al archivo de configuración php.ini:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="415" height="157" src="https://blog.ahierro.es/wp-content/uploads/2019/09/php_ini_memory_limit.png" alt="php.ini memory_limit" class="wp-image-1706" srcset="https://blog.ahierro.es/wp-content/uploads/2019/09/php_ini_memory_limit.png 415w, https://blog.ahierro.es/wp-content/uploads/2019/09/php_ini_memory_limit-300x113.png 300w" sizes="auto, (max-width: 415px) 100vw, 415px" /></figure>



<h2 class="wp-block-heading">Créditos, referencias y artículos relacionados</h2>



<ul class="wp-block-list"><li>Imagen de portada: <a href="https://pixabay.com/users/publicdomainpictures-14/">Public Domain Pictures</a></li><li><a href="https://blog.ahierro.es/aumentar-el-limite-de-tiempo-maximo-de-ejecucion-de-un-script-en-php/">Aumentar el limite de tiempo máximo de ejecución de un script en PHP</a>.</li><li><a rel="noreferrer noopener" aria-label="Documentación de la función init_set() (abre en una nueva pestaña)" href="https://www.php.net/manual/es/function.ini-set.php" target="_blank">Documentación de la función php init_set()</a></li><li><a aria-label="Documentación de la función init_set() (abre en una nueva pestaña)" href="https://blog.ahierro.es/servidor-web-en-raspberry-pi-y-ubuntu-mate/">Servidor Web en Raspberry PI y Ubuntu Mate</a></li><li><a href="https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/">Como configurar Virtual Hosts en Apache 2 y Ubuntu</a></li><li><a href="https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/">Habilitar módulos en Apache 2 sobre Ubuntu</a></li></ul>La entrada <a href="https://blog.ahierro.es/aumentar-el-limite-de-memoria-de-un-script-en-php/">Aumentar el límite de memoria de un script en PHP</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/aumentar-el-limite-de-memoria-de-un-script-en-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Aumentar el limite de tiempo maximo de ejecución de un script en PHP</title>
		<link>https://blog.ahierro.es/aumentar-el-limite-de-tiempo-maximo-de-ejecucion-de-un-script-en-php/</link>
					<comments>https://blog.ahierro.es/aumentar-el-limite-de-tiempo-maximo-de-ejecucion-de-un-script-en-php/#respond</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Tue, 30 Jul 2019 06:41:08 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=1522</guid>

					<description><![CDATA[<p>Cuando instalamos un servidor web LAMP, la configuración por defecto de PHP es válida para la mayoría de las aplicaciones. Sin embargo, es posible que si desarrollamos o instalamos aplicaciones que necesiten de una gran cantidad de recursos del sistema nos encontremos con algunos límites. Algunos de ellos pueden ser: la memoria consumida en la &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/aumentar-el-limite-de-tiempo-maximo-de-ejecucion-de-un-script-en-php/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "Aumentar el limite de tiempo maximo de ejecución de un script en PHP"</span></a></p>
La entrada <a href="https://blog.ahierro.es/aumentar-el-limite-de-tiempo-maximo-de-ejecucion-de-un-script-en-php/">Aumentar el limite de tiempo maximo de ejecución de un script en PHP</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>Cuando instalamos un servidor web LAMP, la configuración por defecto de PHP es válida para la mayoría de las aplicaciones. Sin embargo, es posible que si desarrollamos o instalamos aplicaciones que necesiten de una gran cantidad de recursos del sistema nos encontremos con algunos límites.</p>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="https://blog.ahierro.es/wp-content/uploads/2019/07/max_execution_time.jpg" alt="php max_execution_time" class="wp-image-1533" width="840" height="331"/></figure>



<span id="more-1522"></span>



<p>Algunos de ellos pueden ser: la memoria consumida en la ejecución del script, el tamaño de los archivos subidos al servidor, el número de variables pasadas por get o por post, etc.</p>



<p>En esta estrada hablamos sobre el límite de tiempo de ejecución de un script.</p>



<h2 class="wp-block-heading">Fatal error: Maximum execution time of 30 seconds exceeded</h2>



<p>Este es el error que nos encontraremos si nuestro script sobrepasa el tiempo máximo de ejecución definido.</p>



<p>Encontrarnos con este error no es una situación excesivamente habitual y en muchos casos puede ser el resultado de un error de programación, como por ejemplo una rutina que nos haga entrar en un bucle infinito.</p>





<p>Pero también es posible alcanzar ese límite por las propias exigencias de nuestro software. En mi caso, me he encontrado con esta situación al desarrollar aplicaciones empresariales que procesan una gran cantidad de datos.</p>



<h2 class="wp-block-heading">Medida de protección</h2>



<p>Que PHP disponga de un límite máximo de tiempo de ejecución para los scripts es una medida de protección que puede librarnos de largas esperas e incluso de algún reinicio. La experiencia me dice que en algunas ocasiones un bucle infinito puede dejar un equipo completamente bloqueado.</p>



<p>Así que antes de ampliar el tiempo máximo de ejecución mi consejo es que nos aseguremos de que:</p>



<ol class="wp-block-list"><li>No es un bug en nuestro script el que crea la necesidad de ampliar este tiempo.</li><li>Nuestro script está razonablemente optimizado.</li></ol>



<p>Es decir, nada que no debamos hacer con cualquier otro script que no supere el tiempo de ejecución máximo. </p>



<h2 class="wp-block-heading">Cómo aumentar el límite el tiempo de ejecución de un script PHP</h2>



<p>Por defecto, el tiempo máximo de ejecución de un script es de 30 segundos. Si ya tenemos claro que queremos aumentar este tiempo podemos hacerlo de varias formas.</p>



<h3 class="wp-block-heading">Con la función set_time_limit()</h3>



<p>Utilizaremos esta función al comienzo de nuestro script definiendo el tiempo máximo de ejecución en segundos. Por lo tanto, con este método el nuevo limite afectará única y exclusivamente al script dónde lo utilicemos.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php

set_time_limit(60);

...

?&gt;
</pre></div>


<p>Debemos puntualizar que en caso de que estemos utilizando php en modo seguro esta función no tendrá ningún efecto.</p>



<h3 class="wp-block-heading">Con la función init_set()</h3>



<p>Este sistema funciona exactamente igual que <em>set_time_limit()</em>, con la única diferencia que utilizaremos la función <em>init_set() </em>pasando el string <em>max_execution_time </em>como primer parámetro.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: php; title: ; notranslate">
&lt;?php

ini_set(&#039;max_execution_time&#039;, 60);

...

?&gt;
</pre></div>


<h3 class="wp-block-heading">En el archivo php.ini</h3>



<p>En este caso, la principal diferencia entre este método y los dos anteriores es que el nuevo límite afectará a todos los scripts PHP que se ejecuten en el servidor dónde apliquemos esta configuración. Para aplicarlo, buscamos la directriz <em>max_execution_time,</em> dentro de la sección <em>Resources Limits</em>, en el archivo <em>php.ini</em> y modificamos su valor.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 60

</pre></div>


<p>Y acto seguido reiniciamos el servidor Apache 2 para que los cambios surtan efecto.:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo service apache2 restart
</pre></div>


<p>La ubicación del archivo <em>php.ini </em>variará en función del sistema que estemos utilizando. En los sistemas Linux basados en Debian como Ubuntu la ubicación será <em>/etc/php/X.X/apache2</em>, donde X.X será la versión de PHP.</p>



<h3 class="wp-block-heading">En el archivo .htaccess</h3>



<p>Esta es quizás la opción menos conocida de las que mostramos en esta entrada, pero es una de las más interesante en cuanto a que podemos conseguir que la nueva directriz aplique a todos los scripts cuando no tenemos acceso al archivo <em>php.ini</em>.</p>



<p>Para aplicar este sistema editaremos el archivo <em>.htaccess </em>que nos interese incluyendo las siguientes líneas:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
&amp;lt;IfModule mod_php7.c&gt;
php_value max_execution_time 60
&amp;lt;/IfModule&gt;
</pre></div>


<p>Si nuestro servidor utiliza una versión 5.X de PHP en lugar de una versión 7.X, solo habría que cambiar <em>mod_php7.c</em> por <em>mod_php5.c</em>.</p>





<h2 class="wp-block-heading">Cómo comprobar el valor de tiempo máximo de ejecución</h2>



<p>Podemos comprobar el valor de tiempo máximo de ejecución configurado en nuestro servidor en la sección <em>Core </em>de la salida de la función <em>phpinfo()</em>:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="422" height="129" src="https://blog.ahierro.es/wp-content/uploads/2019/07/max_execution_time.png" alt="max_execution_time phpinfo()" class="wp-image-1548" srcset="https://blog.ahierro.es/wp-content/uploads/2019/07/max_execution_time.png 422w, https://blog.ahierro.es/wp-content/uploads/2019/07/max_execution_time-300x92.png 300w" sizes="auto, (max-width: 422px) 100vw, 422px" /></figure>



<p>O como acabamos de ver, accediendo al archivo de configuración php.ini:</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="469" height="143" src="https://blog.ahierro.es/wp-content/uploads/2019/07/max_execution_time_vim.png" alt="max_execution_time en php.ini" class="wp-image-1535" srcset="https://blog.ahierro.es/wp-content/uploads/2019/07/max_execution_time_vim.png 469w, https://blog.ahierro.es/wp-content/uploads/2019/07/max_execution_time_vim-300x91.png 300w" sizes="auto, (max-width: 469px) 100vw, 469px" /></figure>



<h2 class="wp-block-heading">Créditos, referencias y artículos relacionados</h2>



<ul class="wp-block-list"><li>Imagen de portada: <a rel="noreferrer noopener" aria-label="Michael Jarmoluk (abre en una nueva pestaña)" href="https://pixabay.com/users/jarmoluk-143740/" target="_blank">Michael Jarmoluk</a></li><li><a rel="noreferrer noopener" aria-label="Documentación de la función php_time_limit() (abre en una nueva pestaña)" href="https://www.php.net/manual/es/function.set-time-limit.php" target="_blank">Documentación de la función php set_time_limit()</a></li><li><a rel="noreferrer noopener" aria-label="Documentación de la función init_set() (abre en una nueva pestaña)" href="https://www.php.net/manual/es/function.ini-set.php" target="_blank">Documentación de la función php init_set()</a></li><li><a href="https://blog.ahierro.es/servidor-web-en-raspberry-pi-y-ubuntu-mate/">Servidor Web en Raspberry PI y Ubuntu Mate</a></li><li><a href="https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/">Como configurar Virtual Hosts en Apache 2 y Ubuntu</a></li><li><a href="https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/">Habilitar módulos en Apache 2 sobre Ubuntu</a></li></ul>La entrada <a href="https://blog.ahierro.es/aumentar-el-limite-de-tiempo-maximo-de-ejecucion-de-un-script-en-php/">Aumentar el limite de tiempo maximo de ejecución de un script en PHP</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/aumentar-el-limite-de-tiempo-maximo-de-ejecucion-de-un-script-en-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Habilitar módulos en Apache 2 sobre Ubuntu</title>
		<link>https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/</link>
					<comments>https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/#comments</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Mon, 22 Jul 2019 06:39:40 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[Tips & Quick Wins]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=1491</guid>

					<description><![CDATA[<p>En realidad esta entrada iba a tratar sobre cómo habilitar el módulo mod_rewrite en Apache 2, cosa que no tiene mucho sentido pues ya (casi) siempre viene habilitado por defecto al instalar Apache. Así que puestos a escribir sobre habilitar módulos, y dado que es una tarea bastante habitual habitual cuando instalamos un nuevo servidor &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "Habilitar módulos en Apache 2 sobre Ubuntu"</span></a></p>
La entrada <a href="https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/">Habilitar módulos en Apache 2 sobre Ubuntu</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>En realidad esta entrada iba a tratar sobre cómo habilitar el módulo mod_rewrite en Apache 2, cosa que no tiene mucho sentido pues ya (casi) siempre viene habilitado por defecto al instalar Apache.</p>



<p>Así que puestos a escribir sobre habilitar módulos, y dado que es una tarea bastante habitual habitual cuando instalamos un nuevo servidor web, o incluso cuando instalamos algunos paquetes de software sobre un servidor web existente, decidí escribir esta entrada más generalista.</p>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="https://blog.ahierro.es/wp-content/uploads/2019/07/habilitar.png" alt="Habilitar modulos Apache" class="wp-image-1493" width="840" height="330"/></figure>



<span id="more-1491"></span>



<p>Y es que en la actualidad, en una instalación estándar de Apache 2 sobre Ubuntu 18 se instalan más de 100 módulos, de los cuales sólo hay activos algo más de una veintena.</p>



<h2 class="wp-block-heading">Habilitar módulos</h2>



<p>Lejos quedan los tiempos en los que para habilitar módulos de Apache teníamos que editar el archivo <em>apache.conf</em>, tarea que generalmente no consistía más que en descomentar alguna línea. Hoy basta con ejecutar el comando <em>a2enmod</em> y reiniciar el servidor:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo a2enmod modulo
sudo service apache2 restart
</pre></div>


<p>Pero descubramos que hay detrás de de este comando.</p>



<p>Los módulos disponibles por Apache 2 se encuentran dentro del directorio <em>/etc/apache2/mods-available/</em>. Lo que quiere decir que si el módulo que queremos habilitar no se encuentra ahí tendremos que copiarlo  y asignarle los permisos adecuados.</p>





<p>Por otro lado, los módulos habilitados se encuentran en el directorio <em>/etc/apache2/mods-enabled/</em>. Pero en este caso en lugar de encontrar archivos, encontraremos enlaces simbólicos a los archivos situados en la carpeta <em>/etc/apache2/mods-available/</em>. Así que una alternativa al comando <em>a2enmod</em> es el comando <em>ln</em>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo ln -s /etc/apache2/mods-available/modulo /etc/apache2/mods-enabled/modulo
sudo service apache2 restart
</pre></div>


<h2 class="wp-block-heading">Deshabilitar módulos</h2>



<p> Y para deshabilitar módulos la operación es muy similar, con la salvedad de que en lugar de utilizar el comando <em>a2enmod</em> utilizaremos el comando <em>a2dismod</em>:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo a2dismod modulo
sudo service apache2 restart
</pre></div>


<p>O simplemente eliminaremos el enlace simbólico:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo rm /etc/apache2/mods-enabled/modulo
sudo service apache2 restart
</pre></div>


<h2 class="wp-block-heading">Comprobaciones y logs de errores</h2>



<p>Podemos saber si un módulo se ha instalado correctamente revisando la salida de la función phpinfo() de php, en la sección apache2handler.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="943" height="334" src="https://blog.ahierro.es/wp-content/uploads/2019/07/phpinfo_apache_modules.png" alt="phpinfo Modulos de Apache" class="wp-image-1503" srcset="https://blog.ahierro.es/wp-content/uploads/2019/07/phpinfo_apache_modules.png 943w, https://blog.ahierro.es/wp-content/uploads/2019/07/phpinfo_apache_modules-300x106.png 300w, https://blog.ahierro.es/wp-content/uploads/2019/07/phpinfo_apache_modules-768x272.png 768w" sizes="auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px" /></figure>



<p>Y en caso de experimentar cualquier tipo de problema, el primer lugar dónde consultar qué está ocurriendo son los logs de error de Apache 2, en el archivo  <em>/var/log/apache2/error.log</em>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
cat /var/log/apache2/error.log
</pre></div>


<h2 class="wp-block-heading">Créditos, referencias y artículos relacionados</h2>



<ul class="wp-block-list"><li>Imagen de portada por <a href="https://pixabay.com/users/stockertui-12831137/" target="_blank" rel="noreferrer noopener" aria-label=" (abre en una nueva pestaña)">Wichan Yodsawai</a>.</li><li><a href="https://blog.ahierro.es/servidor-web-en-raspberry-pi-y-ubuntu-mate/">Servidor Web en Raspberry PI y Ubuntu Mate</a>.</li><li><a href="https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/">Como configurar Virtual Hosts en Apache 2 y Ubuntu</a>.</li><li><a href="https://blog.ahierro.es/archivos-y-permisos-de-usuario-en-apache-y-linux/">Archivos y permisos de usuario en Apache 2 y Linux</a>.</li></ul>La entrada <a href="https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/">Habilitar módulos en Apache 2 sobre Ubuntu</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/habilitar-modulos-en-apache-2-sobre-ubuntu/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Programar tareas en Ubuntu con Cron</title>
		<link>https://blog.ahierro.es/programar-tareas-en-ubuntu-con-cron/</link>
					<comments>https://blog.ahierro.es/programar-tareas-en-ubuntu-con-cron/#respond</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Thu, 23 May 2019 19:44:51 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[servicio]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=978</guid>

					<description><![CDATA[<p>Una de las herramientas que sin lugar a dudas todo administrador de sistemas Linux debe controlar a la perfección es Cron. Pero incluso si no somos administradores de sistemas, si trabajamos sobre máquinas corriendo con Linux tarde o temprano llegará el día en el que necesitemos programar la ejecución de una tarea con cierta periodicidad, &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/programar-tareas-en-ubuntu-con-cron/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "Programar tareas en Ubuntu con Cron"</span></a></p>
La entrada <a href="https://blog.ahierro.es/programar-tareas-en-ubuntu-con-cron/">Programar tareas en Ubuntu con Cron</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>Una de las herramientas que sin lugar a dudas todo administrador de sistemas Linux debe controlar a la perfección es Cron. Pero incluso si no somos administradores de sistemas, si trabajamos sobre máquinas corriendo con Linux tarde o temprano llegará el día en el que necesitemos programar la ejecución de una tarea con cierta periodicidad, y entonces deberemos hacer uso de Cron (o alguna IDE que trabaje sobre Cron).</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="650" height="438" src="https://blog.ahierro.es/wp-content/uploads/2019/05/cron_programar_tareas.png" alt="Programar tareas en Linux con Cron" class="wp-image-979" srcset="https://blog.ahierro.es/wp-content/uploads/2019/05/cron_programar_tareas.png 650w, https://blog.ahierro.es/wp-content/uploads/2019/05/cron_programar_tareas-300x202.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<span id="more-978"></span>



<p>A pesar de que Cron tiene un funcionamiento bastante sencillo y está bien documentado en internet, no he querido dejar pasar la oportunidad de aportar mi granito de arena al tema, y aprovechando que estoy preparando una entrada que requiere de la ejecución programada de una tarea he escrito estas líneas.</p>





<p>Además, aunque es más que probable que si ya tienes cierta experiencia con sistemas operativos Linux esta entrada no te desvele nada nuevo (o si, quien sabe), seguro que a más de un lector con menos experiencia en este ámbito le resulta de interés.</p>



<h2 class="wp-block-heading">Cron</h2>



<p>Cron es un demonio concebido para ejecutar tareas previamente programadas de forma periódica.</p>



<p>Y por demonio entendemos un programa que se ejecuta en segundo plano, que carece de interface para interactuar con él y que por norma general se inicia en el arranque del sistema, es el equivalente en Linux de los servicios en Windows.</p>



<p>Y como cualquier demonio o servicio en Linux podemos arrancarlo, pararlo, reiniciarlo o comprobar su estado con el comando service:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo service cron start
sudo service cron stop
sudo service cron restart
sudo service cron status
</pre></div>


<h2 class="wp-block-heading">Crontab</h2>



<p>Crontab es el nombre que se le da a los archivos dónde definimos las tareas programadas y la frecuencia con la que se ejecutarán. El nombre de crontab proviene de las palabras cron table.</p>



<p>Existe un archivo crontab «principal» /etc/crontab, que será gestionado por el administrador del equipo, pero además cada usuario del sistema tiene el suyo propio archivo.</p>



<h3 class="wp-block-heading">Estructura de ficheros crontab</h3>



<p>Los ficheros crontab son simples ficheros de texto dónde especificaremos una tarea por línea, y la estructura de cada línea es la siguiente:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; gutter: false; title: ; notranslate">
# ┌───────────── minutos
# |
# │ ┌───────────── horas
# | |
# │ │ ┌───────────── día del mes
# | | |
# │ │ │ ┌───────────── mes
# | | | |
# │ │ │ │ ┌───────────── día de la semana
# │ │ │ │ │
# │ │ │ │ │
  * * * * * comando
</pre></div>


<p>Como puedes apreciar, en cada línea hay cinco campos reservados a definir la periodicidad, y uno más para hacer lo propio con el comando a ejecutar, todos ellos separados por espacios. Todos los campos deben ser rellenados obligatoriamente. Los rangos de valores posibles para cada campo son:</p>



<ul class="wp-block-list"><li>Campo minutos: 0 &#8211; 59</li><li>Campo horas: 0 &#8211; 23</li><li>Campo día del mes: 0 &#8211; 31</li><li>Campo mes: 1 &#8211; 12</li><li>Campo día de la semana: 0 &#8211; 6, dónde 0 es domingo y 6 sábado.</li></ul>



<h3 class="wp-block-heading">Caracteres especiales en crontab</h3>



<p>Para definir la periodicidad de la tarea, podemos ayudarnos de algunos «modificadores» que nos permitirán ampliar enormemente las posibilidades:</p>



<table class="wp-block-table"><tbody><tr><td><strong>Combinación</strong></td><td><strong>Significado</strong></td><td><strong>Ejemplo</strong></td></tr><tr><td>*</td><td>Todos los valores</td><td>*</td></tr><tr><td>,</td><td>Listado de valores</td><td>2,5,9</td></tr><tr><td>&#8211;</td><td>Rango de valores</td><td>5-9</td></tr><tr><td>/</td><td>Cada</td><td>*/5</td></tr><tr><td>rango/excep.</td><td>Excepto</td><td>0-23/2</td></tr></tbody></table>



<p>Otro carácter imprescindible es la almohadilla (#), que lo utilizaremos al comienzo de una línea para indicar que es un comentario.</p>



<h3 class="wp-block-heading">Ejemplos de tareas programadas</h3>



<p>Para disipar cualquier duda que podamos tener con respecto de los ficheros crontab, lo más sencillo es que veamos algunos ejemplos:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
# Diariamente a las 02:00 am, ejecutamos el script definido
* 2 * * * service /home/user/script.sh

# Cada lunes a las 02:00 am, reiniciamos Apache
* 2 * * 1 service apache2 restart

# Cada 5 minutos, monitoreamos el estado de nuestra web
*/5 * * * * /home/user/checkSiteStatus.sh

# Cada hora, limpiamos la cache
0 * * * * * /home/user/cleanCache.sh

# De lunes a viernes a las 14:00, enviamos un e-mail
0 14 * * 1-5 /home/user/mail.sh

# los días 5,15 y 25 del mes a las 00:00, enviamos un informe
0 0 5,15,25 * * /home/user/sendReport.sh
</pre></div>


<p>Como ves, este sistema es realmente sencillo y versátil, ofreciéndonos muchas opciones para programar la ejecución de nuestras tareas. Si aún así tienes dudas, puedes realizar tus pruebas en la web <a rel="noreferrer noopener" aria-label=" (abre en una nueva pestaña)" href="https://crontab.guru/" target="_blank">Crontab Guru</a>, una herramienta on-line muy útil.</p>





<h2 class="wp-block-heading">Administrar las tareas programadas en Cron</h2>



<p>Ahora que ya tenemos claros los fundamentos, vamos a ver como realizar las tareas más habituales.</p>



<h3 class="wp-block-heading">Agregar una nueva tarea</h3>



<p>Ya hemos explicado que para programar una tarea debemos incluirla en el archivo crontab, y para ello utilizaremos nuestro editor preferido:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo vim /etc/crontab
</pre></div>


<p>Pero además del archivo principal de crontab, cada usuario tiene el suyo propio, de forma que podemos programar tareas sin ser administrador del equipo. Para editar este archivo utilizaremos la orden:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
crontab -e
</pre></div>


<p>Y si tenemos los permisos necesarios, poder editar el archivo crontab de otros usuarios ayudándonos del modificador -u seguido del nombre de usuario:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
crontab -e -u usuario
</pre></div>


<p>Así que ahora solo quedaría agregar las tareas que nos interesen siguiendo las indicaciones que ya hemos visto. Aprovecho para hacer referencia al artículo <a href="https://blog.ahierro.es/comandos-en-vim/">Comandos en Vim </a>por si quéreis echarle un vistazo,</p>



<h3 class="wp-block-heading">Ver las tareas programadas</h3>



<p>En este punto podemos hacer uso de alguno de los múltiples comandos que nos ofrece Linux para visualizar archivos como puede ser el comando more:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
more /etc/crontab
</pre></div>


<p>O en caso de querer ver el archivo crontab de un usuario lo haremos con la orden crontab -l, utilizando o no el modificador -u en función de nuestras necesidades:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
crontab -l
crontab -u usuario -l
</pre></div>


<h3 class="wp-block-heading">Resetear el archivo crontab</h3>



<p>Esta opción bien podría haberla omitido por lo delicada, pero ahí la dejo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
crontab -r
</pre></div>


<p>Ojo que no pide confirmación.</p>



<h2 class="wp-block-heading">Logs en Cron</h2>



<p>Los logs de Cron se almacenan en el archivo /var/log/syslog, pero este archivo contiene otros logs además de los que nos interesan. Si queremos ver exclusivamente los losg de cron podemos lanzar el siguiente comando:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
grep CRON /var/log/syslog
</pre></div>


<p>La información que recibiremos no es muy detallada, pero en caso de tener alguna duda es buen buen lugar para comenzar a investigar.</p>



<h2 class="wp-block-heading">Créditos y referencias</h2>



<ul class="wp-block-list"><li>Imagen principal: <a rel="noreferrer noopener" aria-label="jairojehuel (abre en una nueva pestaña)" href="https://pixabay.com/users/jairojehuel-173776/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=699966" target="_blank">jairojehuel</a></li><li>man crontab en <a rel="noreferrer noopener" aria-label="man7.org crontab (abre en una nueva pestaña)" href="http://man7.org/linux/man-pages/man5/crontab.5.html" target="_blank">man7.org</a></li><li>man cron en <a rel="noreferrer noopener" aria-label="man7.org cron (abre en una nueva pestaña)" href="http://man7.org/linux/man-pages/man8/cron.8.html" target="_blank">man7.org cron</a></li></ul>La entrada <a href="https://blog.ahierro.es/programar-tareas-en-ubuntu-con-cron/">Programar tareas en Ubuntu con Cron</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/programar-tareas-en-ubuntu-con-cron/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Usuarios virtuales en vsftp</title>
		<link>https://blog.ahierro.es/usuarios-virtuales-en-vsftp/</link>
					<comments>https://blog.ahierro.es/usuarios-virtuales-en-vsftp/#comments</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Tue, 07 May 2019 05:46:22 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[vsftp]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=859</guid>

					<description><![CDATA[<p>Ya os había comentado en otra entrada que tres de los motivos por los que valoro tanto vsftp son la versatilidad, la sencillez de configuración y la facilidad para dar respuesta a las dudas en internet. Y una de las características que contribuye a esa versatilidad y que me resulta de las más interesante es &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/usuarios-virtuales-en-vsftp/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "Usuarios virtuales en vsftp"</span></a></p>
La entrada <a href="https://blog.ahierro.es/usuarios-virtuales-en-vsftp/">Usuarios virtuales en vsftp</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>Ya os había comentado en otra entrada que tres de los motivos por los que valoro tanto vsftp son la versatilidad, la sencillez de configuración y la facilidad para dar respuesta a las dudas en internet. Y una de las características que contribuye a esa versatilidad y que me resulta de las más interesante es la posibilidad de crear usuarios virtuales.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="650" height="438" src="https://blog.ahierro.es/wp-content/uploads/2019/05/vsftp_usuarios_virtuales.png" alt="" class="wp-image-875" srcset="https://blog.ahierro.es/wp-content/uploads/2019/05/vsftp_usuarios_virtuales.png 650w, https://blog.ahierro.es/wp-content/uploads/2019/05/vsftp_usuarios_virtuales-300x202.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<span id="more-859"></span>



<p>Esta entrada continua el contenido iniciado en el artículo <a href="https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/">VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu</a>, desde dónde enlazamos más contenido relacionado con la insralación y la configuración de vsftp. </p>



<h2 class="wp-block-heading">Usuarios virtuales vs usuarios de sistema</h2>



<p>La configuración por defecto de vsftp nos permite autentificarnos con las  credenciales de los usuarios que tengamos creados en el sistema, dándonos acceso a las mismas carpetas a las que estos tienen acceso. Pero además nos permite autentificarnos con usuarios virtuales creados especificamente para acceder por ftp a una determinada carpeta. Y lo mejor de todo es que estas dos opciones son totalmente compatible entre si, pudiendo elegir entre:</p>



<ol class="wp-block-list"><li>Habilitar solo el acceso de los usuarios del sistema (por defecto).</li><li>Habilitar solo el acceso de usuarios virtuales.</li><li>Habilitar el acceso de usuarios del sistema y usuarios virtuales.</li></ol>





<h2 class="wp-block-heading">/etc/vsftps.conf</h2>



<p>Para no extendernos demasiado en esta entrada, a continuación veremos el  resultado final del archivo /etc/vsftpd.conf. Si estás interesado en  conocer los detalles de cada línea de configuración puede echarle un  vistazo a la <a rel="noreferrer noopener" href="https://security.appspot.com/vsftpd/vsftpd_conf.html" target="_blank">documentación oficial de vsftp en este enlace</a>. Para facilitar la lectura hemos eliminado todas las líneas de comentarios originales del archivo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
# configuración excluyendo comentarios
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
user_sub_token=$USER
hide_ids=YES
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

# Configuración específica de usuarios virtuales
user_config_dir=/etc/vsftpd/usersConf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
</pre></div>


<h3 class="wp-block-heading">Creación de usuarios virtuales</h3>



<p>Una vez realizada la configuración de vsftp, lo siguiente que haremos será crear los usuarios virtuales. Para ello crearemos un directorio dónde alojar los ficheros de autentificación y acto seguido los propios ficheros, que en este ejemplo serán dos, uno por usuario. Por algún motivo que desconozco no he podido hacer funcionar la autentificación con PAM sin incluir la opción -d en la creación de los ficheros de autentificación, lo que nos limita a contraseñas con un máximo de 8 caracteres, una opción que lamentablemente reduce bastante la seguridad.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo mkdir /etc/vsftpd
sudo htpasswd -c -d /etc/vsftpd/ftpd.passwd ftpUser1
sudo htpasswd -d /etc/vsftpd/ftpd.passwd ftpUser2
</pre></div>


<p>El comando htpasswd nos solicitará que definamos la contraseña y que la confirmemos, y ojo que en el segundo usuario hemos omitido la opción -c, solo es necesario incluirla con el primer usuario, si la incluimos en el segundo o sucesivos truncaremos el fichero y por lo tanto únicamente dejaremos el último usuario que hemos creado.</p>





<h3 class="wp-block-heading">Instalación y Configuración de PAM</h3>



<p>Como adelantabamos en el punto anterior utilizaremos PAM (Pluggable Authentication Modules) para la autentificación de los usuarios, así que si no lo tenemos instalado deberemos hacerlo:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
sudo apt-get update
sudo apt-get install libpam-pwdfilev
</pre></div>


<p>El archivo de configuración de PAM para el servicio vsftp por defecto se encuentra en /etc/pam.d/vsftp, notad que hicimos referencia a él en la configuración de vsftp mediante la directiva pam_service_name. Así que por seguridad realizaremos una copia de seguridad de este archivo y acto seguido lo editaremos de forma que quede así:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
</pre></div>


<p>Como ves, le estamos indicando que utilice el archivo que acabamos de crear con el comando htpasswd para autentificar a los usuarios virtuales.</p>



<h3 class="wp-block-heading">Directorios de usuarios virtuales</h3>



<p>El último paso que nos queda para tener nuestro servicio funcionando es definir cuales serán los directorios a los que tendrán acceso los usuarios. Para realizar esta configuración crearemos un archivo por cada usuario al que estemos concediendo acceso, y para mantenerlos organizados los almacenaremos dentro de un directorio que crearemos a tal efecto, al que ya hemos hecho referencia en /etc/vsftpd.conf mediante la directiva user_config_dir. El nombre de cada archivo debe ser idéntico al nombre de usuario al que hace referencia:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo mkdir /etc/vsftpd/usersConf
sudo vim /etc/vsftpd/usersConf/ftpUser1
sudo vim /etc/vsftpd/usersConf/ftpUser2
</pre></div>


<p>El contenido de cada archivo debe hacer referencia al directorio al que le estamos concediendo acceso de la siguiente manera:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
local_root=/var/www/targetDir
</pre></div>


<h2 class="wp-block-heading">Permisos de escritura</h2>



<p>Un aspecto de gran importancia es configurar correctamente los permisos de escritura del directorio de cada usuario, en caso contrario nos encontraremos con un error cuando intentemos cargar cualquier archivo en nuestro servidor.</p>



<p>En nuestro caso, estamos concediendo acceso a una carpeta de un servidor web, así que daremos por hecho que los permisos están configurados tal y como explicamos en la entrada <a href="https://blog.ahierro.es/archivos-y-permisos-de-usuario-en-apache-y-linux/">Archivos y permisos de usuario en Apache 2 y Linux</a>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo usermod -a -G www-data ftpd
sudo chown ftpd:www-data /var/www/users/ftpUser1
</pre></div>


<h2 class="wp-block-heading">Comprobamos que todo funciona</h2>



<p>Reiniciamos el servidor y comprobamos que todo funciona:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo service vsftpd restart
</pre></div>


<p>Recuerda que si tienes algún problemalor archivos de logs de vsftp están en /var/log/vsftp.log y los logs de autentificación  /var/log/auth.log.</p>La entrada <a href="https://blog.ahierro.es/usuarios-virtuales-en-vsftp/">Usuarios virtuales en vsftp</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/usuarios-virtuales-en-vsftp/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>FTPS o cómo habilitar SSL en vsftp</title>
		<link>https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/</link>
					<comments>https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/#respond</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Tue, 07 May 2019 05:23:28 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[ftps]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[vsftp]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=854</guid>

					<description><![CDATA[<p>El uso del protocolo https en la web es cada día es más habitual, las principales organizaciones que marcan el rumbo de la web, conocedoras de la necesidad de aumentar la seguridad en internet, fomentan su uso hasta el punto de que los principales navegadores del mercado identifican las webs que no cifran el tráfico &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "FTPS o cómo habilitar SSL en vsftp"</span></a></p>
La entrada <a href="https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/">FTPS o cómo habilitar SSL en vsftp</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>El uso del protocolo https en la web es cada día es más habitual, las principales organizaciones que marcan el rumbo de la web, conocedoras de la necesidad de aumentar la seguridad en internet, fomentan su uso hasta el punto de que los principales navegadores del mercado identifican las webs que no cifran el tráfico como no seguras.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="650" height="438" src="https://blog.ahierro.es/wp-content/uploads/2019/05/ftps_o_ssl_en_vsftp.png" alt="" class="wp-image-878" srcset="https://blog.ahierro.es/wp-content/uploads/2019/05/ftps_o_ssl_en_vsftp.png 650w, https://blog.ahierro.es/wp-content/uploads/2019/05/ftps_o_ssl_en_vsftp-300x202.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<span id="more-854"></span>



<p>Lamentablemente, según mi experiencia, esa practica no está tan extendida en los servidores ftp, dónde a día de hoy todavía todavía existen un gran número de ellos que no implementan el protocolo FTPS, haciendo uso de conexiones sin encriptar y por lo tanto menos seguras. Una lástima teniendo en cuenta que no es algo complicado.</p>



<p>Hoy veremos cómo habilitar el protocolo FTPS en nuestro servidor vsftp, ampliando el contenido publicado en el artículo <a href="https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/">VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu</a>. Además, es muy probable que también te interese echarle un vistazo a la entrada <a href="https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/">FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes</a>, pues es una buena introducción si no estás familiarizado con estos protocolos.</p>





<p>Esta configuración está realizada sobre Ubuntu Mate 16.0.4.2 corriendo en una Raspberry PI, pero es perfectamente aplicable a otras distribuciones y versiones de Linux y otros hardwares.</p>



<p>Asumiremos que ya tenemos nuestro servidor vsftp funcionando y que tenemos OpenSSL instalado. Así que el primer paso será crear los certificados SSL pertinentes:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
</pre></div>


<p>A continuación agregamos las siguientes líneas al final del archivo /etc/vsftpd.conf: </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
# Opciones para el certificado SSL
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
</pre></div>


<p>Ya solo nos queda reiniciar el servidor y comprobar que la configuración que hemos aplicado funciona correctamente.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo service vsftpd restart
</pre></div>


<p>Y con estos sencillos pasos hemos terminado, mejorando notablemente la seguridad de nuestro servidor FTP.</p>La entrada <a href="https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/">FTPS o cómo habilitar SSL en vsftp</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu</title>
		<link>https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/</link>
					<comments>https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Tue, 07 May 2019 05:20:29 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[vsftp]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=437</guid>

					<description><![CDATA[<p>Históricamente los clientes y servidores FTP han formado parte del conjunto de herramientas más utilizadas por los desarrolladores web. Con la sofisticación de los entornos de desarrollo y la adopción cada vez mayor de los sistemas de control de versiones su uso ha disminuido ligeramente, pero sigue conservando su estatus de herramienta esencial. Esta entrada &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu"</span></a></p>
La entrada <a href="https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/">VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>Históricamente los clientes y servidores FTP han formado parte del conjunto de herramientas más utilizadas por los desarrolladores web. Con la sofisticación de los entornos de desarrollo y la adopción cada vez mayor de los sistemas de control de versiones su uso ha disminuido ligeramente, pero sigue conservando su estatus de herramienta esencial. </p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="650" height="365" src="https://blog.ahierro.es/wp-content/uploads/2019/05/vsftp.png" alt="servidor ftp raspberry pi y ubuntu" class="wp-image-849" srcset="https://blog.ahierro.es/wp-content/uploads/2019/05/vsftp.png 650w, https://blog.ahierro.es/wp-content/uploads/2019/05/vsftp-300x168.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<span id="more-437"></span>



<p>Esta entrada pertenece a la serie de artículos sobre cómo utilizar una <a href="https://blog.ahierro.es/raspberry-pi-como-herramienta-de-apoyo-para-el-desarrollo-web/">Raspberry PI como herramienta de apoyo para el desarrollo web</a>,  y veremos como instalar y configurar vsftp en Ubuntu,  crear  usuarios virtuales y habilitar el acceso con el protocolo FTPS.</p>



<h2 class="wp-block-heading">vsftp</h2>



<p>Puestos a implementar una solución ftp el primer paso será elegir uno de las muchas posibilidades que existen en el mercado. Si ya hemos descartado el protocolo SFTP, y queremos un servidor FTP o FTPS que nos permita mantener la simplicidad pero ampliando la versatilidad, y que además esté disponible bajo licencia de software libre, vsftp (Very Secure FTP) es una buena opción. </p>



<p>Además otra de las ventajas de Vsftp es que su uso está muy extendido y es fácil resolver cualquier duda con alguna consulta en internet, y entre algunas de sus características podemos destacar: </p>



<ul class="wp-block-list"><li>  Usuarios virtuales</li><li> Configuración avanzada por usuario</li><li> Configuración por IP de origen</li><li> Límites por IP de origen</li><li> Limitación de ancho de banda</li><li> Encriptación sobre SSL </li></ul>



<p>Características más que suficientes para cubrir muchos de los casos que podemos necesitar. </p>





<p>Por otro lado, si leiste el articulo <a href="https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/">FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes</a>, es interesante destacar que es totalmente compatible tener habilitado el acceso SFTP y el acceso FTP y FTPS con Vsftp. Esto nos permitiría por ejemplo utilizar SFTP para los usuarios del sistema y FTPS para una lista de usuarios específicos con unas necesidades distintas.</p>



<h2 class="wp-block-heading"> Instalar vsftp </h2>



<p>Como es habitual la instalación de cualquier programa incluido en los repositorios de una distro es algo muy sencillo.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo apt-get update
sudo apt-get install vsftpd
</pre></div>


<p>Tras la instalación de vsftp el servidor es perfectamente funcional con los usuarios del sistema </p>



<h2 class="wp-block-heading">Configurar vsftp </h2>



<p>La configuración de vsftp ofrece muchas posibilidades y  se realiza en el archivo <em>/etc/vsftpd.conf</em>, puedes ver <a rel="noreferrer noopener" aria-label="opciones de configuración que tiene en este enlace (abre en una nueva pestaña)" href="https://security.appspot.com/vsftpd/vsftpd_conf.html" target="_blank">todas las opciones de configuración que tiene en este enlace</a>.</p>



<p>En cuanto a las configuraciones que vamos a aplicar lo haremos en entradas separadas para facilitar la organización y la lectura y evitar que esto se convierta en un artículo demasiado largo y aburrido. A continuación tienes los enlaces:</p>



<ul class="wp-block-list"><li><a href="https://blog.ahierro.es/usuarios-virtuales-en-vsftp/">Creación y configuración de usuarios virtuales</a></li><li><a href="https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/">Habilitar el acceso por FTPS</a></li></ul>



<h2 class="wp-block-heading">Comprobamos que todo funciona</h2>



<p>Después de aplicar cualquier configuración deberemos probar que funciona correctamente, para ello el primer paso será reiniciar el servidor para aplicar la nueva configuración y acto seguido conectarnos con nuestro cliente ftp favorito.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
sudo service vsftpd restart
</pre></div>


<p>En caso de que tengamos algún tipo de problema podemos revisar los logs de vsftp en /var/log/vsftp.log y los logs de autentificación /var/log/auth.log. Ojo que podemos tener más de un archivo de log por servicio.</p>La entrada <a href="https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/">VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes</title>
		<link>https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/</link>
					<comments>https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/#comments</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Fri, 01 Feb 2019 06:51:39 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[ftps]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">https://blog.ahierro.es/?p=471</guid>

					<description><![CDATA[<p>La curiosidad y la predisposición a probar cosas nuevas suelen ser cualidades bastante habituales entre las personas relacionadas con la tecnología, pero existen ciertas situaciones en las que estamos tan acostumbrados a realizar algunas tareas de una determinada forma que no nos cuestionamos el por qué o si es posible hacerlo mejor con algunos cambios. &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes"</span></a></p>
La entrada <a href="https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/">FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>La curiosidad y la predisposición a probar cosas nuevas suelen ser cualidades bastante habituales entre las personas relacionadas con la tecnología, pero existen ciertas situaciones en las que estamos tan acostumbrados a realizar algunas tareas de una determinada forma que no nos cuestionamos el por qué o si es posible hacerlo mejor con algunos cambios.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="650" height="365" src="https://blog.ahierro.es/wp-content/uploads/2019/01/ftt_sftp_ftps.png" alt="FTP, SFTP y FTPS" class="wp-image-477" srcset="https://blog.ahierro.es/wp-content/uploads/2019/01/ftt_sftp_ftps.png 650w, https://blog.ahierro.es/wp-content/uploads/2019/01/ftt_sftp_ftps-300x168.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<span id="more-471"></span>



<p>El uso del FTP suponía para mi una de esas situaciones, lo utilizo con relativa frecuencia pero nunca me había cuestionado cual era la diferencia entre FTPS y SFTP. Si bien sabía que ambos añadían una capa de encriptación con respecto al protocolo FTP,&nbsp; desconocía por completo que era lo que les distinguía. Así que cuando configuraba una nueva conexión, seleccionaba la opciones que me permitía conectar sin darle mayor importancia.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="474" height="146" src="https://blog.ahierro.es/wp-content/uploads/2019/01/filizilla_ftp_protocol.png" alt="Filezilla, protocolos ftp, ftps y sftp" class="wp-image-475" srcset="https://blog.ahierro.es/wp-content/uploads/2019/01/filizilla_ftp_protocol.png 474w, https://blog.ahierro.es/wp-content/uploads/2019/01/filizilla_ftp_protocol-300x92.png 300w" sizes="auto, (max-width: 474px) 100vw, 474px" /></figure>



<p>El caso es que hace unas semanas instalé un servidor FTP en mi Raspberry. No es el primero que instalo, pero cuando lo he hecho siempre han estado destinados a ámbitos muy concretos, protegidos por una red local y su uso ha sido prácticamente unipersonal,&nbsp; por lo que nunca me preocupé demasiado por los detalles más allá de que me permitieran conectar y hacer mi trabajo.</p>



<p>La diferencia fue que en esta ocasión quise profundizar un poco más, conocer exactamente la diferencia entre los distintos protocolos y aplicar configuraciones más complejas y eso es lo que os cuento en esta y otras entradas que vendrán.</p>



<h3 class="wp-block-heading">FTP</h3>



<p>FTP son siglas de File Transfer Protocol, es un protocolo que lleva con nosotros desde la década de los 70 y fue diseñado para la transferencia de archivos a través de la red con&nbsp; una configuración de cliente-servidor.</p>





<p>Su principal defecto es que carece de capa alguna de seguridad, los datos viajan por la red en texto plano, sin encriptación, de modo que es muy sencillo interceptar no solo los archivos que se transmiten sino también los datos de autentificación. Por otro lado, esta ausencia de encriptación es la responsable de que sea el protocolo de transmisión más rápido de los que veremos en esta entrada, pues no existe consumo de recursos relacionados con la encriptación y el tamaño de los paquetes transmitidos es menor.</p>



<p>Por defecto hace uso del puerto 21 y es el precursor de los otros dos protocolos que vamos a ver en esta entrada.</p>



<h3 class="wp-block-heading">FTPS</h3>



<p>Las siglas FTPS provienen de FTP over SSL y no es más que el protocolo estándar FTP transmitido sobre una conexión segura. Inicialmente la conexión segura hacía referencia únicamente&nbsp; SSL (Secure Sockets Layer), pero con el&nbsp; paso del tiempo y la aparición del protocolo TLS (Transport Layer Security), también soporta este último. Este protocolo hace uso de dos canales diferentes: uno de control y otro de transferencia, y tiene dos variantes bien diferenciadas:</p>



<ul class="wp-block-list"><li><strong>FTP implicito sobre SSL</strong>. Recibe este nombre porque la conexión cifrada es implicita, es decir, ocurre desde un primer instante, sin necesidad de solicitarla, motivo por el cual además está desaconsejada (deprecated). Por defecto utiliza el puerto 990 para el canal de control y el 998 para el de datos, de forma que el puerto 21 permanece libre para poder ofrecer un servicio FTP estandar. En cualquier caso los dos canales viajan encriptados.</li><li><strong>FTP explicito sobre SSL</strong> o también conocido como FTPES. El cliente establece una conexión FTP estándar mediante el puerto 21 con el servidor y una vez conectado se solicita explícitamente la negociación SSL, de ahí el nombre. En función de la configuración del servidor, si el cliente no solicita la encriptación es posible que ocurran dos cosas: que se rechace la conexión o que se establezca una conexión FTP estándar (insegura). Esta variante permite decidir si queremos encriptar los canales de control y transferencia o si por el contrario solo queremos encriptar uno de ellos.</li></ul>



<p>Un aspecto que puede resultar negativo de este protocolo es que por el hecho de utilizar más de un canal puede resultar problemático con algunas configuraciones en los firewalls, así que es posible que si tenemos un firewall en funcionamiento e implementamos un servidor FTPS nos veremos obligados a revisar su configuración.</p>





<h3 class="wp-block-heading">STFP</h3>



<p>SFTP o SSH File Transfer Protocol es un protocolo que «simula» el comportamiento del protocolo FTP pero que realmente poco o nada tiene que ver con él, no es una extensión o una mejora como puede ser FTPS, si no que fue desarrollado desde cero.</p>



<p>Tanto los datos de control como de transferencia se transmiten siempre encriptados y por un único canal, utilizando para ello el puerto 22 al igual que el protocolo SSH (Secure SHell) sobre el que está construido. Posiblemente por este motivo muchos servidores FTP implementan los protocolos FTP Y FTPS pero no SFTP. En su lugar podemos ver implementaciones&nbsp; de servidores SFTP de la mano de los propios servidores de SSH, algunos ejemplos son OpenSSH o LSH.</p>



<p>SFTP ha sido el último protocolo en llegar y cabe destacar que su especificación nunca ha pasado de ser un borrador, es decir, no existe un documento RFC.</p>



<h3 class="wp-block-heading">Conclusión</h3>



<p>Es interesante conocer qué hay detrás de los distintos protocolos de transmisión de ficheros para poder decidir cual es el que mejor se adapta a las necesidades que tengamos en cada momento.</p>



<p>Mi recomendación dependerá del uso que le vayamos a dar, pero siempre que sea posible utilizaría un protocolo que implemente una capa de encriptación y no esté desaconsejado (deprecated), es decir: SFTP o FTPES.</p>



<p>¿Y tú qué opinas al respecto? ¿Qué protocolo prefieres y por qué? ¿Has tenido alguna mala experiencia por utilizar un FTP sin encriptación? Déjanos un comentario contándonos tu experiencia.</p>



<h2 class="wp-block-heading">Créditos, referencias y artículos relacionados</h2>



<ul class="wp-block-list"><li><a href="https://blog.ahierro.es/vsftp-instalar-y-configurar-un-servidor-ftp-en-raspberry-pi-con-ubuntu/">VSFTP instalar y configurar un servidor FTP en una Raspberry Pi con Ubuntu</a></li><li><a href="https://blog.ahierro.es/ftps-o-como-habilitar-ssl-en-vsftp/">FTPS o cómo habilitar SSL en vsftp</a></li><li><a href="https://blog.ahierro.es/usuarios-virtuales-en-vsftp/">Usuarios virtuales en vsftp</a></li></ul>





<p></p>La entrada <a href="https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/">FTP, FTPS y SFTP: diferencias, ventajas e inconvenientes</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/ftp-ftps-y-sftp-diferencias-ventajas-inconvenientes/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Como configurar Virtual Hosts en Apache 2 y Ubuntu</title>
		<link>https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/</link>
					<comments>https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/#comments</comments>
		
		<dc:creator><![CDATA[Andres]]></dc:creator>
		<pubDate>Mon, 24 Dec 2018 06:30:33 +0000</pubDate>
				<category><![CDATA[Servicios]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://www.ahierro.es/?p=288</guid>

					<description><![CDATA[<p>Los más habitual en un entorno de desarrollo, de pruebas o de pre-producción es que tengamos varios proyectos conviviendo en paralelo. Y como ser organizado no es solo una virtud, sino que es una cualidad imprescindible para evitar el caos de cara al futuro, los hosts virtuales de Apache 2 son una buena forma de &#8230; </p>
<p class="link-more"><a href="https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/" class="more-link">Continuar leyendo<span class="screen-reader-text"> "Como configurar Virtual Hosts en Apache 2 y Ubuntu"</span></a></p>
La entrada <a href="https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/">Como configurar Virtual Hosts en Apache 2 y Ubuntu</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></description>
										<content:encoded><![CDATA[<p>Los más habitual en un entorno de desarrollo, de pruebas o de pre-producción es que tengamos varios proyectos conviviendo en paralelo. Y como ser organizado no es solo una virtud, sino que es una cualidad imprescindible para evitar el caos de cara al futuro, los hosts virtuales de Apache 2 son una buena forma de lograrlo.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="650" height="365" src="https://www.ahierro.es/wp-content/uploads/2018/12/apache_virtual_hosts.png" alt="Apache Virtual Hosts" class="wp-image-303" srcset="https://blog.ahierro.es/wp-content/uploads/2018/12/apache_virtual_hosts.png 650w, https://blog.ahierro.es/wp-content/uploads/2018/12/apache_virtual_hosts-300x168.png 300w, https://blog.ahierro.es/wp-content/uploads/2018/12/apache_virtual_hosts-267x150.png 267w" sizes="auto, (max-width: 650px) 100vw, 650px" /></figure>



<span id="more-288"></span>



<p>Los ejemplos de este documento han sido probados tanto sobre Ubuntu Mate 16.0.4.2 y Apache 2.4.18 como sobre XUbuntu 18.04 con la versión 2.4.29 de Apache, aunque funcionarán sobre la mayoría de distribuciones Linux con la versión 2.4 de Apache.</p>



<p>Para el resto del artículo, asumiremos que la ip de la máquina dónde estamos configurando los host virtuales es 192.168.1.10.</p>



<h3 class="wp-block-heading">¿Qué es un virtual host en Apache 2?</h3>



<p>Virtual host es la herramienta que Apache pone a nuestra disposición para poder publicar más de una página web en un mismo servidor Apache, y que además,&nbsp; nos permite mantener configuraciones diferentes para cada host virtual.</p>





<p>Al realizar una petición al servidor web, Apache puede identificar a que site (host virtual) queremos acceden en función de tres variables relacionadas con la solicitud realuzada al servidor:</p>



<ol class="wp-block-list"><li>La IP</li><li>El Host Name</li><li>El puerto</li></ol>



<p>En este artículo distinguiremos los host virtuales por el puerto, pues es lo que utilizo habitualmente en mi entorno de desarrollo por una simple cuestión de comodidad.</p>



<h3 class="wp-block-heading">Nociones de configuración</h3>



<p>Toda la configuración de Apache 2 se encuentra bajo la carpeta <em>/var/apache2</em>. Los archivos de configuración para los virtual hosts se encuentran dentro de dos carpetas en particular:</p>



<ol class="wp-block-list"><li><em>/var/apache2/sites-available</em>. En esta carpeta se encuentran todos los archivos de configuración de los hosts virtuales, cada host se corresponde con un archivo.</li><li><em>/var/apache2/sites-enabled</em>. En esta carpeta se crearán enlaces simbólicos a los archivos de la carpeta sites-available para los host que queramos activar en cada momento.</li></ol>



<p>Con la instalación de Apache, se creará por defecto, el archivo <em>/etc/apache2/sites-available/000-default.conf</em> y su correspondiente enlace simbólico en la carpeta <em>sites-enabled</em> que se encarga de configurar el host virtual por defecto al que accedemos tras instalar Apache.</p>



<h3 class="wp-block-heading">Cómo crear un virtual host</h3>



<p>Crear host virtuales es una tarea relativamente habitual, así que los señores desarrolladores de Apache nos lo han puesto bastante sencillo.</p>



<p>A continuación crearemos un host virtual para alojar un entorno de pruebas de este blog. Para entender mejor el proceso, a pesar de que es sencillo, lo dividiremos en cuatro pasos:</p>



<h4 class="wp-block-heading">Paso 1: Creamos el directorio que alojará nuestra web</h4>



<p>Lo primero será crear el directorio dónde alojaremos los archivos que posteriormente serviremos.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
cd /var/www
sudo mkdir ahierro.es
cd ahierro.es
sudo mkdir public
</pre></div>


<p>La carpeta que serviremos será <em>public</em>, es buena idea guardarse un nivel de directorio para archivos relacionados con el proyecto que no deben ser accesibles desde una url en el navegador. Esto es bastante habitual en muchas aplicaciones y frameworks.</p>



<p>En este paso del proceso es importante dejar correctamente configurados los permisos de acceso a los archivos y carpetas de nuestro host virtual. Para ello os dejo un enlace al artículo <a href="https://blog.ahierro.es/archivos-y-permisos-de-usuario-en-apache-y-linux/">Archivos y permisos de usuario en Apache 2 y Linux</a> por si queréis echarle un vistazo.</p>



<h4 class="wp-block-heading">Paso 2: Creamos el archivo de configuración del nuevo host virtual</h4>



<p>Ahora crearemos el archivo de configuración en <em>/etc/apache2/sites-available</em>, lo más sencillo es hacerlo desde otro que ya exista. Es muy importante que lleve la extensión .conf o el comando a2ensite no funcionará más adelante:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
cd /etc/apache2/sites-available
sudo cp 000-default.conf ahierro.es.conf
</pre></div>


<p>Lo editamos:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo vim ahierro.es.conf
</pre></div>


<p>Inicialmente tenemos algo así:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
&lt;VirtualHost *:80&gt;
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request&#039;s Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with &quot;a2disconf&quot;.
#Include conf-available/serve-cgi-bin.conf
&lt;/VirtualHost&gt;
</pre></div>


<p>Y tras modificarlo debe quedar así:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
&lt;VirtualHost *:80&gt;
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request&#039;s Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost
DocumentRoot /var/www/ahierro.es/public

# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with &quot;a2disconf&quot;.
#Include conf-available/serve-cgi-bin.conf

&lt;Directory /var/www/ahierro.es/public&gt;
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
&lt;/Directory&gt;

&lt;/VirtualHost&gt;
</pre></div>


<p>Como podemos ver en la línea 1 hemos cambiado :80 por :8085, con lo que estamos indicando que a este virtualhost accederemos mediante este puerto. Personalmente suelo comenzar con el puerto 8080, en este ejemplo he especificado el 8085 porque ya tengo otros cinco host virtuales.</p>





<p>En la línea 12 lo único que hemos hecho es actualizar la referencia al directorio raíz para asegurarnos que apunta al lugar adecuado.</p>



<p>Y por último hemos añadido una nueva sección a partir de la línea 30 con unas directrices básicas entre las que hemos habilitado el módulo mod_rewrite, necesario para la re-escritura de urls.</p>



<h4 class="wp-block-heading">Paso 3: Abrimos el puerto adecuado en Apache</h4>



<p>Por defecto Apache solo atiende solicitudes por el puerto 80. Para conseguir que también atienda las que llegan por el puerto 8085, que es el que hemos indicado en nuestro fichero de configuración del virtual host, debemos editar el archivo <em>/etc/apache2/ports.conf</em>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo vim /etc/apache2/ports.conf
</pre></div>


<p>El contenido del fichero es algo así:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80
Listen 8085

&lt;IfModule ssl_module&gt;
Listen 443
&lt;/IfModule&gt;

&lt;IfModule mod_gnutls&gt;
Listen 443
&lt;/IfModule&gt;
</pre></div>


<p>Vemos que la&nbsp; línea 5 hace referencia al puerto 80, nosotros hemos añadido una línea más, la 6, indicándole que escuche también el puerto 8085.</p>



<h4 class="wp-block-heading">Paso 4: Habilitamos el nuevo virtualhost</h4>



<p>Si os habéis fijado hablamos de los directorios <em>sites-available</em> y <em>sites-enabled</em>, pero solo hemos trabajado con el primero. Para crear el enlace simbólico lo haremos con el comando a2ensite:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo a2ensite ahierro.es.conf
</pre></div>


<p>Y por si te lo estás preguntando, si, un ln o un cp servirían de igual manera. Y ahora que el enlace simbólico ya se encuentra en el directorio <em>sites-enabled</em> solo nos queda reiniciar apache:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; gutter: false; title: ; notranslate">
sudo service apache2 restart
</pre></div>


<h4 class="wp-block-heading">Paso 5: Comprobamos que todo funcione correctamente</h4>



<p>Podemos comprobar que todo ha salido bien con dos sencillos pasos</p>



<ol class="wp-block-list"><li>Creamos un archivo <em>index.html</em> y lo guardamos en el directorio público del host virtual que acabamos de crear, en este caso <em>/var/www/ahierro.es/public</em>.</li><li>Accedemos a la ip del servidor seguida de dos puntos y el puerto: <em>http://192.168.1.10:8085/index.html.</em></li></ol>



<p>Si vemos el contenido del archivo index.html es que todo ha salido bien, en caso contrario deberemos buscar el problema en función del mensaje de error obtenido.</p>



<h3 class="wp-block-heading">Conclusión</h3>



<p>Una forma sencilla de organizar nuestros proyectos siempre que no sean demasiados.</p>



<p>Personalmente, en el virtual host por defecto (puerto 80),&nbsp; creo un sencillo fichero con enlaces a todos los hosts virtuales y otros accesos directos que me interesa tener a mano como pueden ser phpmyadmin o phpinfo. Esto suele ahorrarme unos minutos preciados minutos cada día.</p>



<p>Y como siempre me gustaría saber tú opinión,&nbsp; ¿utilizas los virtual host? ¿los identificas por puerto? ¿organizas tus proyectos de otra forma? Deja un comentario y aprendamos juntos.</p>



<h2 class="wp-block-heading">Créditos, referencias y artículos relacionados</h2>



<ul class="wp-block-list"><li><a href="https://blog.ahierro.es/archivos-y-permisos-de-usuario-en-apache-y-linux/">Archivos y permisos de usuario en Apache 2 y Linux</a></li><li><a href="https://blog.ahierro.es/ejecutar-linux-en-windows-10-con-wsl/">Ejecutar Linux en Windows 10 con WSL</a></li><li><a href="https://blog.ahierro.es/servidor-web-en-raspberry-pi-y-ubuntu-mate/">Servidor Web en Raspberry PI y Ubuntu Mate</a></li><li><a href="https://blog.ahierro.es/clonar-una-web-en-un-servidor-local/">Clonar una web en un servidor local</a></li></ul>La entrada <a href="https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/">Como configurar Virtual Hosts en Apache 2 y Ubuntu</a> apareció primero en <a href="https://blog.ahierro.es">blog.ahierro.es, programación, internet, tecnología y otras historias</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.ahierro.es/como-configurar-virtual-hosts-en-apache-y-ubuntu/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
