<?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>Bosque Viejo &#187; unix</title>
	<atom:link href="http://bosqueviejo.net/tag/unix/feed/" rel="self" type="application/rss+xml" />
	<link>http://bosqueviejo.net</link>
	<description>Sitio web sobre programación, software libre, redes, servidores, ofimática... y todo lo relacionado con la informática que nos rodea</description>
	<lastBuildDate>Tue, 08 May 2012 14:40:56 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cron: programando tareas</title>
		<link>http://bosqueviejo.net/2011/11/25/cron-programando-tareas/</link>
		<comments>http://bosqueviejo.net/2011/11/25/cron-programando-tareas/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 00:15:48 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[administración de sistemas]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[servidores]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=1080</guid>
		<description><![CDATA[ Una de las cosas que siempre me ha gustado de Unix, es lo que siempre reseña Eric S. Raymond a través de la archiconocida filosofía Unix: la interfaz universal son los flujos de texto; y eso posibilita que los comandos se puedan programar en el tiempo y realizar tareas no atendidas que nos faciliten la vida.
La programación de tareas en Unix (y sistemas similares como BSD, Solaris, HP-UX, AIX, Linux, MacOS X, etc.) se basa en un pequeño programa que permanece como demonio en nuestro sistema y mantiene una tabla de ejecución de comandos basados en tiempo y con una granularidad de un minuto. Es decir, no se puede programar una tarea con una exactitud mayor de un minuto (por ejemplo, no se podría decir que algo se ejecute cada 20 ó 30 segundos).
La tabla de tareas programadas (crontab)
En cualquier sistema, si escribimos como cualquier usuario la orden: crontab -e; entraremos inmediatamente en un editor en el que nos debería de mostrar información de la tabla de tareas programadas, o un fichero con un comentario indicando el formato&#8230; o en el peor de los casos, un fichero vacío.
Rellenar este fichero es tener en cuenta que los datos debe de [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/reloj-150x150.jpg" alt="" title="reloj" width="150" height="150" class="alignleft size-thumbnail wp-image-1081" /> Una de las cosas que siempre me ha gustado de Unix, es lo que siempre reseña Eric S. Raymond a través de la archiconocida <a href="http://bosqueviejo.net/2008/09/22/filosofia-unix/">filosofía Unix</a>: <em>la interfaz universal son los flujos de texto</em>; y eso posibilita que los comandos se puedan programar en el tiempo y realizar tareas no atendidas que nos faciliten la vida.<span id="more-1080"></span></p>
<p>La programación de tareas en Unix (y sistemas similares como BSD, Solaris, HP-UX, AIX, Linux, MacOS X, etc.) se basa en un pequeño programa que permanece como <em>demonio</em> en nuestro sistema y mantiene una tabla de ejecución de comandos basados en tiempo y con una granularidad de un minuto. Es decir, no se puede programar una tarea con una exactitud mayor de un minuto (por ejemplo, no se podría decir que algo se ejecute cada 20 ó 30 segundos).</p>
<h3>La tabla de tareas programadas (crontab)</h3>
<p>En cualquier sistema, si escribimos como cualquier usuario la orden: <tt>crontab -e</tt>; entraremos inmediatamente en un editor en el que nos debería de mostrar información de la tabla de tareas programadas, o un fichero con un comentario indicando el formato&#8230; o en el peor de los casos, un fichero vacío.</p>
<p>Rellenar este fichero es tener en cuenta que los datos debe de estar separados por uno o más espacios, significando cada campo:</p>
<ul>
<li><strong>minutos</strong>: el minuto en el que se va a ejecutar el cron.</li>
<li><strong>hora</strong>: la hora en la que se va a ejecutar el cron.</li>
<li><strong>día del mes</strong>: día del mes en el que se va a ejecutar el cron.</li>
<li><strong>mes</strong>: mes en el que se va a ejecutar el cron.</li>
<li><strong>día de la semana</strong>: día de la semana en que se ejecutará el cron. Este será en formato numérico de 0-7, siendo domingo tanto el cero como el siete.</li>
<li><strong>comando</strong>: el comando a ejecutar.</li>
</ul>
<p>Si se configura lo siguiente:</p>
<pre>
0    5    *    *    *    /home/yo/mi_comando
*/5  *    *    *    *    /home/yo/mi_otro_comando
0,30 *    *    *    *    /home/yo/otro_comando_mas
0    0    *    *    7    /home/yo/dominguete
</pre>
<p>La primera línea le dice al sistema que se ejecute cuando sean las 5:00h de cada día, y ejecutará <tt>mi_comando</tt>. La segunda línea hace que <tt>mi_otro_comando</tt> se ejecute cada 5 minutos. La tercera línea indica que <tt>otro_comando_mas</tt> debe de ejecutarse en el minuto 00 y 30 de cada hora. Por último, la línea cuatro, hace que la ejecución de <tt>dominguete</tt> se haga solo el domingo y a las 0:00h.</p>
<h3>Cron para administradores</h3>
<p>Si estás programando una tarea para que se ejecute de forma recurrente en el sistema, que además requiere de unos permisos especiales o específicos para que se ejecute, es decir, necesita ser un usuario específico o <em>root</em>, entonces debe de programarse dicha tarea en la tabla de <tt>crontab</tt> del sistema, donde, además de especificar el tiempo, se puede especificar el usuario que la llevará a cabo.</p>
<p>Esto se configura en el fichero <tt>/etc/crontab</tt> (o en los ficheros fraccionados que puedes encontrar en la mayoría de sistemas en <tt>/etc/crontab.d</tt>). El usuario aparece como campo antes del comando. Solo hay que indicar el nombre del usuario y listo.</p>
<h3>Cron para usuarios</h3>
<p>Si tienes un usuario en el sistema y quieres hacer algo como que se ejecute <tt>fetchmail</tt> cada 15 minutos y rescate el correo de tus cuentas de correo en tu propia cuenta del servidor, tan solo tienes que ejecutar el comando de edición de <tt>crontab -e</tt>, y poner en el fichero algo como esto:</p>
<pre>
*/15  *    *    *    *     fetchmail
</pre>
<p>Con esto, tendremos asegurada la ejecución cada 15 minutos del comando (justamente en los minutos 0, 15, 30 y 45 de cada hora).</p>
<h3>Cosas a tener en cuenta</h3>
<p>Algunas preguntas que nos pueden asaltar son:</p>
<ul>
<li><strong>¿Cómo puedo ver los cron que tengo configurados sin editarlos?</strong> estos y otros comandos puedes revisarlos a través de <tt>man crontab</tt>, pero a modo de reseña rápida, sería: <tt>crontab -l</tt></li>
<li><strong>Si pongo */7 en la primera hora se ejecuta el cron en los minutos 0, 7, 14, 21, 28, 35, 42, 49, 56, ¿y en la siguiente hora?</strong> Pues en los mismos minutos. El sistema de cron no asegura que algo se ejecute con una distancia exacta de tiempo, de hecho, la sintaxis lo revela, si el minuto es divisible por 7, se ejecuta, sino no.</li>
</ul>
<p>Si tienes más preguntas del estilo, agrégalas como comentario y las incluiré en este apartado.</p>
<h3>Bonus Track: el comando at</h3>
<p>Antes de dar por finalizado el artículo&#8230; vamos a pensar, ¿qué pasa si quiero programar una tarea para que se ejecute hoy a las 1:30h&#8230; pero solo hoy? &#8230; o incluso, ¿si quiero que se ejecute dentro de 2 horas? Pues para eso empleamos el comando <tt>at</tt>.</p>
<p>Por ejemplo, si queremos que se ejecute a las 18:30h del mismo día por la tarde, basta con decir:</p>
<pre>
$ at 18:30
at> fetchmail
at> <EOT>
job 1 at Fri Nov 25 18:30:00 2011
</pre>
<p>Ten presente que se debe de presionar Ctrl+D para finalizar (&lt;EOT&gt;). Podemos ver el comando en la cola con el comando <tt>atq</tt>, o incluso eliminarlo con el comando <tt>atrm</tt>.</p>
<p>Para programar un comando dentro de 2 horas, sería:</p>
<pre>
$ at now + 2 hours
at> fetchmail
at> <EOT>
job 1 at Fri Nov 25 9:05:00 2011
</pre>
<p>Con lo que el comando se ejecutaría en dos horas, a contar desde que se lanzó el comando.</p>
<p>También se permite programar la tarea lanzando la ejecución de un fichero de comandos (shell script), así como una gran flexibilidad de configuración horaria. Todo está aquí: <tt>man at</tt>.</p>
<h3>Conclusiones</h3>
<p>La programación de tareas es algo trivial en un equipo informático, para los usuarios de GNU/Linux, sobretodo, cuando quieres que el  equipo se apague a una determinada hora, convierta un fichero por la noche cuando ya no usas el equipo y pueda ser <em>saturado</em> sin problemas, o quieras programar limpieza de ficheros de forma periódica, descarga de noticias, etc, etc. es más fácil hacerlo con estos programadores que tener que hacerlo a mano.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/11/25/cron-programando-tareas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adiós a Dennis Ritchie</title>
		<link>http://bosqueviejo.net/2011/10/13/adios-a-dennis-ritchie/</link>
		<comments>http://bosqueviejo.net/2011/10/13/adios-a-dennis-ritchie/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 09:11:08 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[dennis ritchie]]></category>
		<category><![CDATA[lenguaje c]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=975</guid>
		<description><![CDATA[ ¿Qué podemos decir?, en poco tiempo, hemos perdido a dos figuras bastante importantes dentro del mundo de la informática. Si hace unos días nos encontrábamos de lleno, sobretodo al entrar en la web de Apple, con la muerte de Steve Jobbs, ahora nos llega la noticia de la defunción de otro de los grandes de la informática, Dennis Ritchie.
Dennis Ritchie ha sido una persona muy influyente dentro del mundo de la informática, ya que trabajó en el cenit de la misma, en una de las empresas que comenzó a cambiarlo todo, gracias a su potencial humano (Ritchie, Kernighan y Thompson en un principio y otros como Stroustrup después), con desarrollos como el lenguaje C y el sistema operativo Unix.
Recordando una entrada de Genbeta del verano, podemos decir que, Si no fuera por Dennis Ritchie y por Ken Thompson, UNIX jamás hubiera existido, tampoco hubiera existido por tanto BSD, o Solaris o Minix y mucho menos Linux, tampoco existiría Mac OS X. Y si no fuera especialmente por Dennis Ritchie, no existiría C, no existirían muchos conceptos que en su día rompieron esquemas a través de su innovadora visión y se convirtieron en al ABC de la teoría de los [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/dennis_ritchie-150x150.jpg" alt="" title="Dennis Ritchie" width="150" height="150" class="alignleft size-thumbnail wp-image-980" /> ¿Qué podemos decir?, en poco tiempo, hemos perdido a dos figuras bastante importantes dentro del mundo de la informática. Si hace unos días nos encontrábamos de lleno, sobretodo al entrar en la web de Apple, con la <a href="http://es.wikipedia.org/wiki/Steve_Jobs">muerte de Steve Jobbs</a>, ahora nos llega la noticia de la defunción de otro de los grandes de la informática, <a href="http://es.wikipedia.org/wiki/Dennis_Ritchie">Dennis Ritchie</a>.</p>
<p>Dennis Ritchie ha sido una persona muy influyente dentro del mundo de la informática, ya que trabajó en el cenit de la misma, en una de las empresas que comenzó a cambiarlo todo, gracias a su potencial humano (Ritchie, Kernighan y Thompson en un principio y otros como Stroustrup después), con desarrollos como el lenguaje C y el sistema operativo Unix.</p>
<p>Recordando una entrada de <a href="http://www.genbetadev.com/desarrolladores/dennis-ritchie-creador-de-c-y-unix">Genbeta</a> del verano, podemos decir que, <em>Si no fuera por Dennis Ritchie y por Ken Thompson, UNIX jamás hubiera existido, tampoco hubiera existido por tanto BSD, o Solaris o Minix y mucho menos Linux, tampoco existiría Mac OS X. Y si no fuera especialmente por Dennis Ritchie, no existiría C, no existirían muchos conceptos que en su día rompieron esquemas a través de su innovadora visión y se convirtieron en al ABC de la teoría de los sistemas operativos por lo que sería complicado que hubieran existido hoy sistemas como Windows, PlayStation, o PCs.</em> Por lo que le debemos mucho a este hombre. ¡Adiós, maestro!</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/10/13/adios-a-dennis-ritchie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Procesos en GNU/Linux</title>
		<link>http://bosqueviejo.net/2010/11/27/procesos-en-gnulinux/</link>
		<comments>http://bosqueviejo.net/2010/11/27/procesos-en-gnulinux/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 00:55:10 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[procesos]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=558</guid>
		<description><![CDATA[Me he dado cuenta de que, hace bastante tiempo que aprendí cómo se gestionan (sobre todo desde la consola) la creación, parada, paso a segundo plano y cambio de prioridad de los procesos de los sistemas tipo Unix, pero, que es algo no tan trivial para la gente que comienza a usar este tipo de entornos, y sobretodo los que vienen de sistemas con Windows. 
Por ello, voy a explicar lo que son los procesos de este tipo de sistemas operativos (sobre todo orientándome en GNU/Linux).
¿Qué es un proceso?
Un proceso es un programa software que se carga en memoria y comienza a ejecutarse de forma secuencial. Un proceso puede, a su vez, según el sistema operativo, contener elementos paralelos de ejecución, como pueden ser hilos (threads). La ejecución de los procesos se puede ver con el comando:
ps xa
En GNU/Linux, cada proceso puede a su vez, lanzar otros procesos hijos. Estos dependerán del padre, de modo que cuando el proceso padre muera, los procesos hijos recibirán la señal de que deben de finalizar su ejecución.
La dependencia de procesos puede verse con el comando:
pstree
Procesos y recepción de Señales
Cada proceso que se ejecuta en el sistema operativo está preparado para recibir una serie [...]]]></description>
			<content:encoded><![CDATA[<p>Me he dado cuenta de que, hace bastante tiempo que aprendí cómo se gestionan (sobre todo desde la consola) la creación, parada, paso a segundo plano y cambio de prioridad de los procesos de los sistemas tipo Unix, pero, que es algo no tan trivial para la gente que comienza a usar este tipo de entornos, y sobretodo los que vienen de sistemas con Windows. </p>
<p>Por ello, voy a explicar lo que son los procesos de este tipo de sistemas operativos (sobre todo orientándome en GNU/Linux).</p>
<h3>¿Qué es un proceso?</h3>
<p>Un proceso es un programa software que se carga en memoria y comienza a ejecutarse de forma secuencial. Un proceso puede, a su vez, según el sistema operativo, contener elementos paralelos de ejecución, como pueden ser hilos (threads). La ejecución de los procesos se puede ver con el comando:</p>
<pre>ps xa</pre>
<p>En GNU/Linux, cada proceso puede a su vez, lanzar otros procesos hijos. Estos dependerán del <em>padre</em>, de modo que cuando el proceso padre <em>muera</em>, los procesos hijos recibirán la señal de que deben de finalizar su ejecución.</p>
<p>La dependencia de procesos puede verse con el comando:</p>
<pre>pstree</pre>
<h3>Procesos y recepción de Señales</h3>
<p>Cada proceso que se ejecuta en el sistema operativo está preparado para recibir una serie de señales y actuar en consecuencia. El comando <em>kill</em> es el empleado de forma cotidiana para enviar de forma manual estas señales.</p>
<p>Las <a href="http://es.wikipedia.org/wiki/Señal_(informática)">señales que se pueden enviar</a>, en resumen, son:</p>
<table>
<tr>
<th>1 &#8211; SIGHUP</th>
<td>Hangup. Se indica al programa que debe de salir. Pero es reprogramable para poder usarse en otros comportamientos, como <em>reload</em>.</td>
</tr>
<tr>
<th>9 &#8211; SIGKILL</th>
<td>Kill. Le dice al sistema operativo que debe de terminar de forma forzosa con ese proceso.</td>
</tr>
<tr>
<th>15 &#8211; SIGTERM</th>
<td>Terminación. Es reprogramable para poder realizar tareas específicas antes de salir.</td>
</tr>
<tr>
<th>19 &#8211; SIGSTOP</th>
<td>Stop. Detiene el proceso, pero sin terminarlo, de modo que se pueda volver a reanudar su ejecución.</td>
</tr>
<tr>
<th>18 &#8211; SIGCONT</th>
<td>Continue. Le dice a un proceso parado que continúe su ejecución.</td>
</tr>
</table>
<p>Si queremos enviar a un proceso una señal específica, por ejemplo, que debe de terminar de inmediato, solo habrá que escribir:</p>
<pre>kill -9 12123</pre>
<p>Esto le dice al sistema operativo que debe de eliminar forzosamente el proceso 12123.</p>
<h3>Estados de los procesos</h3>
<p>Un proceso puede tener estados básicos de:</p>
<table>
<tr>
<th>S &#8211; Sleep</th>
<td>Durmiendo. Quiere decir que está en ejecución, pero en ese momento no se encuentra ejecutándose ningún código dentro de la CPU.</td>
</tr>
<tr>
<th>D &#8211; Sleep</th>
<td>Es igual que el anterior, pero no es posible interrumpirlo.</td>
</tr>
<tr>
<th>T &#8211; Stopped</th>
<td>Parado. Quiere decir que se ha detenido su ejecución.</td>
</tr>
<tr>
<th>R &#8211; Running</th>
<td>En ejecución. Es un proceso que se está ejecutando de forma activa en la CPU.</td>
</tr>
<tr>
<th>Z &#8211; Zombie</th>
<td>Es un proceso que debería de haber <em>muerto</em>, pero aún tiene dependencias que no es posible terminar. Hasta que no se eliminen sus dependencias no desaparecerá.</td>
</tr>
</table>
<p>Un proceso que está en ejecución en primer plano, es decir, en la consola, puede ser detenido mediante la pulsación de ^C (Ctrl+C). Esta comando, envía al proceso activo la señal de SIGTERM.</p>
<p>Si se presiona la combinación de teclas ^Z (Ctrl+Z), se enviará la señal de SIGSTOP. Para volver a retomar el proceso ejecutar el comando <tt>fg</tt>.</p>
<h3>Entorno de ejecución</h3>
<p>Cuando estamos en una consola (un <tt>tty</tt>, <tt>pts</tt> o similar), tenemos a nuestra disposición un intérprete de comandos en el que podemos lanzar procesos en cualquier momento.</p>
<p>Estos procesos pueden detenerse mediante la pulsación de ^C, como habíamos dicho antes, pero también pueden detenerse (con ^Z).</p>
<p>¿Qué sucede cuando se detienen?, básicamente, se genera en un entorno de ejecución un identificador (que es informado entre corchetes, justo antes de la palabra <em>Stopped</em>, en el texto que sale nada más pulsar la combinación de teclas).</p>
<p>Este entorno se puede consultar con el comando <tt>jobs</tt>. Por ejemplo, si ejecutamos el <em>vim</em> y presionamos ^Z, volvemos a la consola con este mensaje:</p>
<pre>[1]+  Stopped                 vim</pre>
<p>Si ejecutamos el comando <tt>jobs</tt>, obtenemos:</p>
<pre>
$ jobs
[1]+  Stopped                 vim
</pre>
<p>A estos comandos podemos acceder directamente por su número, de modo que el comando kill, por ejemplo, se puede emplear de la siguiente forma:</p>
<pre>
$ kill -18 %1

[1]+  Stopped                 vim
</pre>
<p>¿Por qué nos responde eso y no volvemos a vim?, esto es debido a que el entorno vim requiere de una interacción con el usuario, por lo que no puede ser llevado a segundo plano. Si escribimos el comando <tt>bg</tt> (background) obtendremos el mismo resultado, debido a que el comando <tt>bg</tt> es para llevar un proceso detenido a segundo plano.</p>
<p>Si escribimos <tt>fg</tt> (foreground), recuperamos la interfaz de <em>vim</em>. ¿Qué pasa cuando tenemos varios <em>vim</em> parados?, en ese caso, podemos usar como parámetro el número de identificador del <em>vim</em> que queremos reactivar.</p>
<h3>Prioridades</h3>
<p>Hay muchas veces, que queremos que un proceso se ejecute con mayor prioridad que otro proceso que esté en el sistema. Que un proceso tenga prioridad para su ejecución, quiere decir que no tendrá que esperar sobre otro que tenga menos prioridad cuando requiera de la CPU para realizar su ejecución, por lo que, debe de ejecutarse más rápido.</p>
<p>Con esto, no obstante, hay que tener mucho cuidado, ya que otorgarle a un proceso pesado una prioridad muy alta, puede acarrear que el sistema se quede <em>bloqueado</em>, hasta que el proceso libere un poco al programador de tareas.</p>
<p>Las prioridades se otorgan con el comando <tt>nice</tt>. Por ejemplo, si queremos realizar un <em>find</em> con prioridad sobre los demás procesos normales, sabiendo que el número de prioridad por defecto es 10, y que los valores oscilan entre -20 y 19, siendo -20 la prioridad más alta y 19 la más baja, podemos ejecutar:</p>
<pre>
nice -n 5 find -iname mifichero
</pre>
<p>Cuando ejecutamos el comando <tt>ps</tt>, junto al estado del proceso, que ya se vió antes, aparece un segundo caracter, que se refiere a la prioridad siendo:</p>
<table>
<tr>
<th>&lt; &#8211; High priority</th>
<td>La prioridad es menor que cero. Es decir, tiene una prioridad alta.</td>
</tr>
<tr>
<th>N &#8211; Low priority</th>
<td>La prioridad es positiva, prioridad normal o baja.</td>
</tr>
</table>
<h3>Conclusiones</h3>
<p>La importancia de saber cómo manejar los procesos, los estados que pueden tener, cómo se organizan y las prioridades que pueden tener es crucial para un administrador de sistemas, y cualquiera que desee saber, en un momento dado, si la CPU de su equipo comienza a sobre-utilizarse, o incluso de que haya muchos procesos que ocupen la memoria y permanezcan de forma fija en modo parado.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/11/27/procesos-en-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell in a box: administración remota en HTTP</title>
		<link>http://bosqueviejo.net/2010/10/15/shell-in-a-box-administracion-remota-en-http/</link>
		<comments>http://bosqueviejo.net/2010/10/15/shell-in-a-box-administracion-remota-en-http/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 10:50:00 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[administración de sistemas]]></category>
		<category><![CDATA[acceso remoto]]></category>
		<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[seguridad]]></category>
		<category><![CDATA[servidores]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=518</guid>
		<description><![CDATA[La mayoría de los sitemas de tipo Unix (GNU/Linux, BSD, Darwin, Solaris, &#8230;) tienen sistema de acceso vía consola a través de herramientas como telnet o SSH.
Estos elementos de conexión usan unos puertos específicos para la conexión, pero el primero no es nada seguro (todo se transmite en plano, tal y como se ve en pantalla, a través de la red) y el segundo requiere de la apertura de un puerto, que en muchas redes está filtrado o es inaccesible.
Para esto, Markus Gutschke, ha creado un sistema que se aprovecha de las nuevas ventajas de la web (HTTP, HTML y Javascript puro y duro) para realizar una conexión vía HTTP con el servidor y poder abrir una sesión de consola. El proyecto se llama Shell In A Box.
La principal ventaja es que se puede lanzar tal cual, en un puerto como el 8080, y ya está. Funcionando. Pero lo mejor es usar Apache para configurarlo de modo que se quede detrás, y a través de una conexión SSL, para que no sea interceptable lo que se va escribiendo, ya que sino, sería tan inseguro como usar telnet directamente.
El propio código tiene un fichero INSTALL en el que se detalla la [...]]]></description>
			<content:encoded><![CDATA[<p>La mayoría de los sitemas de tipo Unix (GNU/Linux, BSD, Darwin, Solaris, &#8230;) tienen sistema de acceso vía consola a través de herramientas como telnet o SSH.</p>
<p>Estos elementos de conexión usan unos puertos específicos para la conexión, pero el primero no es nada seguro (todo se transmite en plano, tal y como se ve en pantalla, a través de la red) y el segundo requiere de la apertura de un puerto, que en muchas redes está filtrado o es inaccesible.</p>
<p>Para esto, Markus Gutschke, ha creado un sistema que se aprovecha de las nuevas ventajas de la web (HTTP, HTML y Javascript puro y duro) para realizar una conexión vía HTTP con el servidor y poder abrir una sesión de consola. El proyecto se llama <a href="http://code.google.com/p/shellinabox/">Shell In A Box</a>.</p>
<p>La principal ventaja es que se puede lanzar tal cual, en un puerto como el 8080, y ya está. Funcionando. Pero lo mejor es usar Apache para configurarlo de modo que se quede <em>detrás</em>, y a través de una conexión SSL, para que no sea interceptable lo que se va escribiendo, ya que sino, sería tan inseguro como usar <em>telnet</em> directamente.</p>
<p>El propio código tiene un fichero <a href="http://code.google.com/p/shellinabox/source/browse/trunk/INSTALL">INSTALL</a> en el que se detalla la instalación y configuración, ya sea cual sea la forma en la que se desee.</p>
<p>Una curiosidad, es que, además de disponer del modo <em>LOGIN</em>, que es el que tiene más utilidad, ya que se puede disponer de una consola al equipo servidor a través de conexión HTTP, pero también se puede obtener un SSH a otra máquina (o la propia) y la ejecución de un comando específico:</p>
<pre>
shellinabox --service=/:USER:/:top
</pre>
<p>Esto, por ejemplo, abriría una interfaz para visualizar el <em>top</em> de la máquina.</p>
<p>Es una muy buena herramienta que puede facilitar mucho la gestión de servicios (sobre todo de cara al acceso).</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/10/15/shell-in-a-box-administracion-remota-en-http/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Permisos en GNU/Linux</title>
		<link>http://bosqueviejo.net/2010/08/05/permisos-en-gnulinux/</link>
		<comments>http://bosqueviejo.net/2010/08/05/permisos-en-gnulinux/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 16:39:45 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[administración de sistemas]]></category>
		<category><![CDATA[permisos]]></category>
		<category><![CDATA[sistemas operativos]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=481</guid>
		<description><![CDATA[Nota: Realmente, es la declaración de permisos en sistemas Unix, BSD, Solaris, GNU/Linux y derviados, pero pongo el título principal como GNU/Linux, porque realmente es el único entorno en el que doy fe de que todo lo que hay escrito en este artículo funciona al 100%.
El sistema GNU/Linux, al igual que su inspiración Minix, y la raíz de estos sistemas, Unix, se basan en ficheros. Todo es un fichero. Por ello, la seguridad de acceso a este tipo de información es muy importante.
Usuarios y Grupos
Los sistemas *nix, se basan en una estructura basada en grupos y usuarios. Un usuario puede ser una persona que tiene acceso al sistema mediante una contraseña y usa una consola, o puede ser un programa, un sistema servidor o un concepto abstracto (por ejemplo cdrom) en el que se agrupan una serie de ficheros, ejecución de servicios o servidores, etc.
Los grupos son como los usuarios, es decir, pueden tener propiedad sobre un fichero. Esto se hace para limitar o facilitar el acceso a los ficheros a un grupo de usuarios. Cada usuario puede estar en uno o varios grupos, así como cada grupo puede tener uno o varios usuarios.
&#8230; ¿y como se enlaza todo esto?
Los [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Nota</strong>: Realmente, es la declaración de permisos en sistemas Unix, BSD, Solaris, GNU/Linux y derviados, pero pongo el título principal como GNU/Linux, porque realmente es el único entorno en el que doy fe de que todo lo que hay escrito en este artículo funciona al 100%.</p>
<p>El sistema GNU/Linux, al igual que su inspiración Minix, y la raíz de estos sistemas, Unix, se basan en ficheros. Todo es un fichero. Por ello, la seguridad de acceso a este tipo de información es muy importante.</p>
<h3>Usuarios y Grupos</h3>
<p>Los sistemas *nix, se basan en una estructura basada en grupos y usuarios. Un usuario puede ser una persona que tiene acceso al sistema mediante una contraseña y usa una consola, o puede ser un programa, un sistema servidor o un concepto abstracto (por ejemplo cdrom) en el que se agrupan una serie de ficheros, ejecución de servicios o servidores, etc.</p>
<p>Los grupos son como los usuarios, es decir, pueden tener propiedad sobre un fichero. Esto se hace para limitar o facilitar el acceso a los ficheros a un grupo de usuarios. Cada usuario puede estar en uno o varios grupos, así como cada grupo puede tener uno o varios usuarios.</p>
<h3>&#8230; ¿y como se enlaza todo esto?</h3>
<p>Los permisos en los sistemas *nix se basan en tres partes. Cada fichero y directorio tiene permisos específicos para: usuario, grupo y otros. Esto quiere decir que, si el fichero pertenece a un usuario y a un grupo determinado, podemos limitar los permisos para este usuario en particular, para ese grupo y para los demás.</p>
<p>Al realizar <tt>ls -lh</tt> en la consola es cuando se ve esta información en consola:</p>
<pre>
-rwxr-xr-x     1 bombadil  users      2K 12 nov  2009 marubio.jpg
-rw-r--r--     1 bombadil  users     50B  2 nov  2009 marubio.txt
-rwxr-xr-x     1 bombadil  users      5K 12 nov  2009 marubio2.jpg
</pre>
<p>Como se puede ver, la primera columna de la izquierda, hay un guión inicial que indica si es directorio (d) o fichero (-), después, se indican tres letras por tipo de permisos, en este caso sería:</p>
<ul>
<li><tt>rwx</tt>, para el usuario, se dan los permisos de lectura (r), escritura (w) y ejecución (x).</li>
<li><tt>r-x</tt>, para los usuarios que no sean <em>bombadil</em> y pertenezcan al grupo <em>users</em>, se dan los permisos de lectura (r) y ejecución (x).</li>
<li><tt>r-x</tt>, y para los usuarios que no sean <em>bombadil</em>, ni pertenezcan al grupo <em>users</em>, se le dan los permisos de lectura (r) y ejecución (x).</li>
</ul>
<h3>¿Qué es eso de <em>ejecución</em>?</h3>
<p>Básicamente, los permisos varían si se trata de un fichero o de un directorio, ya que la lectura (r) indica que se pueda leer el fichero o ver los ficheros que hay dentro de un directorio, así la escritura (w) indica que se pueda cambiar un fichero o crear ficheros en un directorio.</p>
<p>El permiso más extraño, el de ejecución (x), en caso de un fichero indica que se pueda ejecutar. Es decir, si se trata de un shell script, un programa compilado, o un script de consola de tipo python, etc., que se pueda ejecutar directamente (sino habría que lanzarlo desde algún intérprete.</p>
<p>En el caso de un directorio, indica si se puede acceder al directorio o no. Es curioso porque es casi como el atributo de lectura, solo que si tienes lectura y no escritura, se permite listar el directorio, pero no acceder con el comando chdir (o cd).</p>
<h3>Equivalencia numérica</h3>
<p>Hay mucha gente que esto de rwx le sonará un poco a chino y pensará&#8230; los permisos de tipo rwxr-xr-x son los 755 de toda la vida <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Pues sí, los permisos se pueden dar de forma numérica también, teniendo en cuenta de que son valores octales, se puede dar un valor desde 000 a 777, siendo el primer dígito para el usuario, el segundo para el grupo y el último para los otros. Por tanto:</p>
<pre>
0 -> ---
1 -> --x
2 -> -w-
3 -> -wx
4 -> r--
5 -> r-x
6 -> rw-
7 -> rwx
</pre>
<h3>Permisos especiales</h3>
<p>Además de todo esto, hay dos permisos especiales que tienen unas propiedades bastante curiosas. El primero de ellos es el <em>superuser grant</em>. Este permiso se puede otorgar a programas que se deban de ejecutar como superusuario, pero solo se pueda dar a binarios, los programas de tipo scripting no tienen esta propiedad, ya que, realmente, se ejecutan desde un intérprete que no tendrá este bit de permiso activo.</p>
<p>Como ejemplo, podemos ver el programa <tt>passwd</tt>. Este programa ejecutado desde consola necesita acceder a ficheros como <em>shadow</em> y <em>passwd</em> para poder cambiar la clave del usuario:</p>
<pre>
-rwsr-xr-x 1 root root 39K dic  6  2009 /usr/bin/passwd
</pre>
<p>El segundo permiso especial es el <em>sticky</em>. Este permiso se otorga en especial a los directorios. Cuando un directorio tiene este permiso, quiere decir que cualquier usuario podrá tener acceso al directorio y crear incluso ficheros, pero no podrá modificar y ver nada más que los que sean de su propiedad.</p>
<p>Este atributo es el que se suele usar para el directorio <em>tmp</em> de los sistemas *nix, de servidores multiusuario. Cuando un programa necesita volcar información en este directorio, con este atributo, nos aseguramos que ningún otro usuario puede modificar o ver esta información temporal:</p>
<pre>
drwxrwxrwt 5 root root 12K ago  5 18:32 /tmp
</pre>
<h3>Conclusiones</h3>
<p>Los sistemas *nix tienen sistemas de permisos y usuarios muy simples, comparados con los sistemas de permisos de sistemas con Windows. Esto no quiere decir que sean peores ni mejores, son simples, y por ello flexibles y potentes. Así mismo, en los sistemas GNU/Linux se han implementado unas políticas añadidas de seguridad que no solo permiten el acceso o no a un recurso, sino a nivel de aplicación, el uso de una forma u otra de ese recurso.</p>
<p>No obstante, y sinceramente, el uso llano de estos permisos suele ser suficiente para la mayoría de los casos, no necesitando ninguna capa más que afine el nivel de privilegios, cuyo uso suele ser más complejo.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/08/05/permisos-en-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruleta Rusa en Unix</title>
		<link>http://bosqueviejo.net/2009/12/09/ruleta-rusa-en-unix/</link>
		<comments>http://bosqueviejo.net/2009/12/09/ruleta-rusa-en-unix/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 09:37:36 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[gnu/linux]]></category>
		<category><![CDATA[curiosidad]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=210</guid>
		<description><![CDATA[Navegando por la red he topado con un blog en el que he visto la ruleta rusa de unix.
La idea es jugar, como si de una pistola se tratase, con el comando rm -rf / (lo cual elimina TODOS los ficheros del disco duro y unidades montadas que se tengan -si son accesibles-). El comando toma un número aleatorio y prueba si es divisible por seis. Si es así&#8230; ¡bang!, estás muerto, sino, puede volver a tirar  

[ $[ $RANDOM % 6 ] == 0 ] &#038;&#038; sudo rm -rf / &#124;&#124; sudo echo &#8220;You live&#8221;

Curioso, ¿no?
NOTA: este blog no se hace responsable de los malos usos de los comandos expuestos, de si se elimina toda la información de su disco por un uso irresponsable del mismo, etc. Mi consejo&#8230; no lo uséis&#8230; o al menos, crear una jaula para jugar.
]]></description>
			<content:encoded><![CDATA[<p>Navegando por la red he topado con un <a href="http://juanmunozar.blogspot.com/">blog</a> en el que he visto la <a href="http://juanmunozar.blogspot.com/2008/11/unix-russian-roulette.html">ruleta rusa de unix</a>.</p>
<p>La idea es jugar, como si de una pistola se tratase, con el comando <tt>rm -rf /</tt> (lo cual elimina TODOS los ficheros del disco duro y unidades montadas que se tengan -si son accesibles-). El comando toma un número aleatorio y prueba si es divisible por seis. Si es así&#8230; ¡bang!, estás muerto, sino, puede volver a tirar <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<p class="code">
[ $[ $RANDOM % 6 ] == 0 ] &#038;&#038; sudo rm -rf / || sudo echo &#8220;You live&#8221;
</p>
<p>Curioso, ¿no?</p>
<p><strong>NOTA</strong>: este blog no se hace responsable de los malos usos de los comandos expuestos, de si se elimina toda la información de su disco por un uso irresponsable del mismo, etc. Mi consejo&#8230; no lo uséis&#8230; o al menos, crear una <a href="http://bosqueviejo.net/2009/03/03/debootstrap-probar-sin-ensuciar/">jaula</a> para <em>jugar</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2009/12/09/ruleta-rusa-en-unix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Filosofía Unix</title>
		<link>http://bosqueviejo.net/2008/09/22/filosofia-unix/</link>
		<comments>http://bosqueviejo.net/2008/09/22/filosofia-unix/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 15:13:22 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Opinión]]></category>
		<category><![CDATA[curiosidad]]></category>
		<category><![CDATA[software libre]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/wordpress/?p=17</guid>
		<description><![CDATA[Desde que comencé en GNU/Linux, sobre el 2002, siempre se ha resaltado la filosofía con la que se fundamentó el sistema al que &#8220;copia&#8221;, que es Unix.
La filosofía Unix se basa en algunos apartados básicos que todo buen informático debería de emplear en sus desarrollos, ya sea a nivel de sistemas o gestión. El uso de estas directivas, asegura que el trabajo, cuanto más pase el tiempo, más llevadero será.
Las directivas son, básicamente:

Escribe programas que hagan una sola cosa y la hagan bien: esto quiere decir que los programas deben de ser lo más atómicos posible y que se compruebe mucho su rendimiento y funcionamiento para hacerlo lo mejor posible.
Escribe programas que trabajen juntos: de nada sirve escribir programas que sirvan para una tarea específica y que, después, cuando esa tarea se modifique de cierta forma, haya que reescribir todo el programa. Es mejor dividir el problema en varios programas y después desechar o reescribir solo uno de esos pequeños programas, cuando se necesite, o incluso hacer nuevos.
Escribe programas que manejen flujos de texto, pues esa es la interfaz universal: todo lo que se hace con entrada y salida en formato textual es más fácil de enlazar con otros programas, [...]]]></description>
			<content:encoded><![CDATA[<p>Desde que comencé en GNU/Linux, sobre el 2002, siempre se ha resaltado la filosofía con la que se fundamentó el sistema al que &#8220;copia&#8221;, que es Unix.</p>
<p>La filosofía Unix se basa en algunos apartados básicos que todo buen informático debería de emplear en sus desarrollos, ya sea a nivel de sistemas o gestión. El uso de estas directivas, asegura que el trabajo, cuanto más pase el tiempo, más llevadero será.</p>
<p>Las directivas son, básicamente:</p>
<ul>
<li><strong>Escribe programas que hagan una sola cosa y la hagan bien</strong>: esto quiere decir que los programas deben de ser lo más atómicos posible y que se compruebe mucho su rendimiento y funcionamiento para hacerlo lo mejor posible.</li>
<li><strong>Escribe programas que trabajen juntos</strong>: de nada sirve escribir programas que sirvan para una tarea específica y que, después, cuando esa tarea se modifique de cierta forma, haya que reescribir todo el programa. Es mejor dividir el problema en varios programas y después desechar o reescribir solo uno de esos pequeños programas, cuando se necesite, o incluso hacer nuevos.</li>
<li><strong>Escribe programas que manejen flujos de texto, pues esa es la interfaz universal</strong>: todo lo que se hace con entrada y salida en formato textual es más fácil de enlazar con otros programas, así como reutilizarla en el pasado, presente y futuro.</li>
</ul>
<p>En estos conceptos se basa la mayoría de software libre que existe, por lo que servidores como sendmail o postfix, se basan en pequeños servidores y/o programas que hacen partes de todo un proceso y, mediante sus ficheros de configuración, se pueden enlazar de una u otra forma, así como usar otros programas y/o servidores en lugar de los que vienen por defecto y, así, extender su funcionalidad.</p>
<p>Sobre filosofía Unix, de una forma más extensa, Mike Gancarz, escribe las siguientes líneas:</p>
<ul>
<li>Lo pequeño es hermoso.</li>
<li>Haz que cada programa haga una sola cosa, pero que la haga bien.</li>
<li>Construye un prototipo lo antes posible.</li>
<li>Elige portabilidad sobre eficiencia.</li>
<li>Guarda los datos en archivos de texto plano.</li>
<li>Aprovecha funcionalidades del software.</li>
<li>Usa scripts de shell para aumentar la funcionalidad y portabilidad.</li>
<li>Evita interfaces de usuario captivas.</li>
<li>Haz de cada programa un filtro.</li>
</ul>
<p>Esto no quiere decir que lo realizado sobre interfaces gráficas sea malo, o no respete estas premisas, puesto que muchas de estas interfaces hacen uso de programas que sí respetan al máximo estas premisas y que, favoreciendo la penúltima directiva escrita por Mike, permiten ver los comandos que ejecutan, junto con todos los argumentos.</p>
<p>Concluyendo, pensemos que el trabajo que se realiza día a día, no solo ese software que programamos por amor al arte, debe de sernos de utilidad, no solo en el momento en que nos lo piden para solucionar un problema dado, sino como &#8220;caja de herramientas&#8221; para la solución de miles de problemas que se deban de resolver en un futuro, quizás no muy lejano <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Vía: <a href="http://sushiknights.org/2008/02/la_filosofia_unix.html">La filosofía UNIX</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2008/09/22/filosofia-unix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

