últimoartículo

Chuletas, chuletas y más chuletas

19.12.2006

ChuletasEl Diccionario de la Real Academia de la Lengua Española define CHULETA (3ª acepción) como entre estudiantes, nota o papelito que se lleva oculto para consultarlo disimuladamente en los exámenes.

He visto muchos tipos de chuleta como estudiante y como docente… pero nunca olvidaré una en forma de bolígrafo.

Hace tiempo nuestro amigo eMe publicó varios artículos dedicado a este tema:

Ahora que no se encuentra entre nosotros este fantástico diseñador, tomo su testigo para continuar publicando una relación de chuletas que he descubierto en Smashing Magazine:

Actionscript

Ajax

Apache

ASCII Character Codes

ASP

C# and VB.NET

CSS

CVS

C++

Django

Firefox

Google

HTML/XHTML

Java

JavaScript

LaTeX

Microformats

Misc

MySQL

Oracle

Perl

Photoshop/Gimp

PHP

Python

Regular Expressions

Ruby

Unix/Linux

Weblog

Windows

XML

Pensé que sería buena idea bajarse todos los pdf’s y subirlos comprimidos para facilitar la descarga ¿No? ;)

artículosanteriores


Algo sobre lsof

15.09.2006

unix

lsof es una herramienta de Linux/Unix que debe su nombre a “lists open files”. Y bueno, eso es lo que hace: listar los ficheros abiertos en un sistema de este tipo. Como sabemos, todo en Linux/Unix son ficheros (un socket es un fichero, una unidad de DVD es un fichero, …), por lo tanto la información que nos puede proporcionar este comando es enormemente útil.

Veamos con algunos ejemplos como empezar a sacarle partido:

1) Listar todas las conexiones abiertas en nuestro host.

lsof -i

2) Listar las conexiones al puerto donde corre el servidor apache en modo no seguro.

lsof -i :80

3) Listar las conexiones desde nuestro host al host 10.2.1.1:

lsof -i@10.2.1.1

4) Listar puertos en escucha

lsof -i | grep “LISTEN”

5) Listar los procesos, conexiones y ficheros abiertos por el usuario user

lsof -u user

6) Listar todos los ficheros abiertos por el procesos syslogd

lsof -c syslogd

7) Listar los ficheros abiertos por un proceso con PID 1001

lsof -p 1001

Hay una versión GUI en http://www.geocities.co.jp/SiliconValley/1596/en/jlsof.html

Más información en netadmintools o man lsof.

Usuarios de Linux y Windows

12.09.2006

Ricardo Galli, el gurú de Meneame.net ha publicado un dato interesante. En contra de lo podríamos pensar, la mayoría de los usuarios de Meneame no usan Linux, sino Windows. Nada que ver con el mito existente de que todos los usuarios de esta estupenda web son “linuxeros“.

Distribución Sistemas Operativos (Meneame.net)

El navegador que usan mayoritariamente los usuarios de Meneame es el Mozilla.

Distribución Navegadores (Meneame.net)

Los usuarios de BdW usan los sistemas operativos siguientes:

Windows XP 77.7 %
Windows 2000 9.6 %
Windows 98 4.2 %
Linux 4 %
WinNT 5.2 1.1 %
Mac OS X 1.1 %
Windows Me 1.1 %
MacPPC 0.2 %
Windows NT4 0.2 %
Mac OS 0.1 %
Windows 95 0.1 %

Y emplean los navegadores siguientes:

Internet Explorer 67.9 %
Mozilla 27.9 %
Opera 2.1 %
Netscape 1.6 %
Konqueror 0.3 %

… y es que todavía le queda mucho que decir a Mr. Gates.

Ejecutar comandos shell mediante php

10.09.2006

Más de una vez hemos deseado ejecutar algún comando de la shell en unix en nuestra cuenta de hospedaje, pero desafortunadamente nuestro proveedor no nos ha habiblitado ningún acceso ssh. Es posible ejecutar comandos shell con el siguiente código:

Creamos un fichero llamado exec.php con el siguiente contenido:

<?php
exec($_GET[’cmd’],$salida);
foreach($salida as $line) { echo "$line<br>"; }
?>

Para ejecutar cualquier comando lo haremos de la siguiente forma:

http://tudominio/exec.php?cmd=ls

y obtendremos la lista de ficheros en el directorio actual.
Una buena aplicación puede ser hacer una copia de seguridad de nuestra web en un .tar.gz y descargarla vía web.

http://tudominio/exec.php?cmd=tar -cvzpf copia.tar.gz *

Con esto obtendremos un fichero comprimido llamado copia.tar.gz, conteniendo toda la copia de seguridad de nuestra web el cual podremos descargar sencillamente.

El resto es simplemente ejecutar comandos, rutas y demás ;)

Ahora bien, tened cuidado donde lo subís por supuesto que esté protegido con contraseña para limitar el acceso sólo a nosotros mismos.

Comunidad WIFI Global: FON

01.08.2006

Fon.es¿Qué es FON?

FON es una iniciativa del empresario Martin Varsavsky, quien la define como la mayor Comunidad WiFi del mundo, abierta a todo el que quiera unirse a ellos y donde sus usuarios pueden conectarse a Internet sin cables en cualquier rincón del mundo.

Todo comenzó con una idea simple: disfrutar de tecnología WiFi en todas partes a través de la infraestructura WiFi generada por los propios usuarios miembros de la Comunidad FON.

Para unirte a ellos sólo necesitas registrarte gratis, tener conexión de banda ancha y descargar en tu router que tiene incorporado un software que ellos han desarrollado, para convertirlo en un Router Social FON. Si no tienes un router compatible con el software de FON, puedes comprar uno subvencionado en su tienda (precios muy económicos)

Linus, Alien y Bill¿Qué significa ser FONero?

Los FONeros comparten su WiFi con la Comunidad FON a través del Router Social FON y eligen qué quieren a cambio: conexión WiFi gratis en todos los puntos de acceso FON o dinero.

Si eliges conexión gratis, eres un Linus. Si prefieres quedarte con el 50% de los beneficios netos que genere tu Router Social FON, eres un Bill. ¿Cómo se generan estos beneficios? A través de los Aliens, que pagan por conectarse a tu punto de acceso FON.

Los Aliens son usuarios que no comparten su WiFi, así que cuando detectan tu señal WiFi de FON y se conectan les aparece un Portal de Acceso FON con un sistema de pagos seguro para comprar bonos de conexión.

Problemas

Hasta ahora todo perfecto, pero… ¿dónde está el truco? Pues fácil, la gran mayoría de nuestras operadoras no nos permiten compartir nuestra conexión WIFI y por lo tanto todo se va al garete. Al parecer, la empresa está intentando crear contratos con las operadoras para eliminar esta clausula que recae sobre su maravillosa idea.
En el momento que llegue el Wimax, algo parecido va a ocurrir, pero por supuesto, controlado por las grandes operadoradoras, por lo que dejará de ser algo barato y se convertirá en un negocio.

Toda la información aquí expuesta ha sido obtenida de la página oficial de FON en España.

¿Qué opináis sobre el tema?

Comandos Linux

20.07.2006

Esto es una introducción al uso de comandos en linux.

DIAGNÓSTICO DE SISTEMA
Para diagnosticar el estado de un Linux de manera rápida:
uname -a : nos dice la version de kernel, procesador, y nombre de sistema.
uptime: nos muestra el tiempo que lleva encendido y promedio de carga.
df : nos muestra la ocupación del disco duro.
free : nos muestra el uso de la memoria.
df -h: nos muestra el estado del disco.
ps -aux. : nos muestra los procesos en curso.
netstat -a : nos muestra las conexiones de red actuales.

REFERENCIA DE COMANDOS UNIX-LINUX

Comando

ls
Descripción: =list. listar contenido de directorios.
Ejemplos: ls, ls -l, ls -fl, ls –color

cp
Descripción: =copy. copiar ficheros/directorios.
Ejemplos:cp -rfp directorio /tmp, cp archivo archivo_nuevo

rm
Descripción: =remove. borrar ficheros/directorios.
Ejemplos: rm -f fichero, rm -rf directorio, rm -i fichero

mkdir
Descripción: =make dir. crear directorios.
Ejemplos: mkdir directorio

rmdir
Descripción: =remove dir. borrar directorios, deben estar vacios.
Ejemplos: rmdir directorio

(siguiente pagina para ver el resto de comandos)

Fallo de Seguridad en Ubuntu

13.03.2006

Hace unas horas se dió una alerta de un fallo de seguridad en Ubuntu que permite que cualquier usuario del sistema pueda conocer las claves del resto de usuarios (root incluido), simplemente accediendo al fichero /var/log/installer/cdebconf/questions.dat. Al parecer dicho fichero es creado durante la instalación del sistema y se trata de un registro de las contestaciones a las preguntas del instalador.
Fuente: Ubuntu Forums

Una charla sobre Linux

24.12.2005

Aviso, está en inglés, pero se entiende bastante bien. He encontrado un post en el que dos amigos charlan sobre qué distribución de Linux escoger. Se da un repaso en general a lo que existe hoy en día. Interesante.

Proyectos para paquetes en Linux

12.11.2005

Los sistemas de gestión de paquetes de Linux actuales (rpm, dpkg, etc) presentan algunos incovenientes:

- Normalmente se conciben para determinadas arquitecturas únicamente, por lo que si nuestra arquitectura no es una de ellas podemos encontrarnos esperando indefinidamente a que se genere el paquete o salga una distribuciñon binaria. La solución pasa finalmente por hacer uso del código fuente y ya está (que aunque a mi es lo que más me gusta, no es el final deseado cuando hablamos de sistemas de gestión de paquetes).

- Los paquetes contienen scripts que automatizan la instalación, con lo cual si nos encontramos con que la instalación tiene un bug el proceso para solucionarlo llega a ser costoso y si la instalación falla entonces el problema se amplifica puesto que la desinstalación puede ser un infierno.

Han surgido un par de sistemas de gestión de paquetes que vienen a paliar algunos problemas como los que he comentado:

- Portage, de la distribución de Linux Gentoo. Imaginemos que queremos instalar un nuevo paquete. Esto se hace con el comando “emerge nombre_paquete”. Este comando hace que Portage se descarge el código fuente así como las aplicaciones y/o librerias con las que tenga dependencias. Una vez descargado todo ya está, se compila desde los fuentes. Se puede personalizar la instalación “tocando” la variable CFLAGS.

- Conary Software Provisioning System, desarrollado por rPath (formada por ex-Ingenieros de RedHat). Es utilizada en las distribuciones rPath y Foresight. Lo más destacado es que hace uso de un sistema de repositorios que mantiene versiones de instalación de software en el sistema

Mass virtual hosts

14.10.2005

Hace nos días he tenido la necesidad de configurar Apache para que implemente lo que se denomina mass virtual hosts. Se trata de economizar código en el fichero httpd.conf ante la existencia de muchos virtual hosts con propiedades casi idénticas.
En el caso al que me enfrenté se trataba de configurar muchos virtual hosts en los que lo que cambiaba era el document root y el nombre del host. Supongamos que todos los nombres de host se componen de la siguiente forma host.nombre_usuario y que todos los directorios donde se almacenan los datos web se definen por el camino /datos_web/nombre_usuario. Evidentemente lo que cambia es el nombre de usuario.
Para conseguir implementar esto sin repetir una y otra vez el mismo código para cada virtual host tenemos cuatro opciones:

- Mediante el módulo mod_vhost_alias. La directiva utilizada es VirtualDocumentRoot

- Mediante el módulo mod_rewrite. Las directivas son las propias de este módulo (RewriteCond, RewriteMap, RewriteRule, etc).

- Hacer uso de un módulo externo desarrollado por terceros.

- Armarse de valor y desarrollar un módulo o tocar el código existente de los módulos estandard de Apache.

Reconozco que soy un enamorado del mod_rewrite y lo implementé con éste. Se trata tan solo de crear un virtual host en el que incluyamos el siguiente código (para el ejemplo que hemos propuesto):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^host.(.*)
RewriteRule ^(.*)$ /datos_web/%1$2 [L]

Hay que tener en cuenta que ni mod_vhost_alias ni mod_rewrite establecen el valor de la variable DOCUMENT_ROOT utilizada desde PHP entre otros, pero realmente se puede encontrar solución a esto. Si se trata de una referencia a una página que se compone mediante DOCUMENT_ROOT, la redirección anterior salvará este obstáculo y en otros casos, como por ejemplo includes, podemos hacer uso de una mezcla de recursos utilizando un .htaccess por cada directorio de datos web.

Más info y ejemplos en apache.org

Windows 2003 Server vs. Red Hat Linux

12.10.2005

Según nos cuenta Microsoft, Windows 2003 Server ofrece un 15% más de fiabilidad que Red Hat Linux.

Veritest ha analizado y demostrado con configuraciones de hardware idénticas que la infraestructura de servidor de Windows 2003 Server es más fiable que Linux, ofreciendo al usuario final un mejor tiempo de parada de servicio.

Microsoft solicitó a Veritest , una división de Lionbridge Technologies, Inc., que midiera el tiempo que tardaba un grupo de profesionales en ejecutar varias tareas asociadas con servidores y servicios para usuarios finales con entornos Windows y Linux, en una PyMe simulada.

Veritest monitoreó de cerca los procesos y herramientas involucradas en este estudio para comparar y evaluar los atrasos del servicio. Las conclusiones fueron las siguientes:

• Windows 2003 Server tuvo un retraso promedio de 4:20:19 mientras el de Red Hat Enterprise Linux AS 3.0 fue de 4:59:44. Los resultados más bajos son mejores.
• Windows Server 2003 terminó más trabajo (280 tareas y eventos completos) que el entorno de Red Hat Enterprise Linux AS 3.0 (248 tareas y eventos completos) en menos tiempo (18:44:14 vs. 27:48:05).

El documento en pdf procedente de VeriTest lo podéis descargar aquí

Increible no? Comentamos el tema?

Fuente: Microsoft Server System

Seguridad en mysql

12.09.2005

Seguridad0Encontré esta página en la que se nos muestran una serie de medidas básicas (algunas de ellas difíciles de llevar a cabo) para elevar la seguridad de los accesos a nuestras BD mysql. Esta página contiene enlaces en inglés que amplian lo expuesto.
Espero que sea de utilidad.

NdisWrapper, Wifi fácil en Linux

22.08.2005

Todos sabemos que uno de los mayores problemas de Linux ha sido siempre la falta de drivers específicos para todo el hardware disponible. La falta de compromiso de los fabricantes de nuevos drivers (justificada en parte por el escaso porcentaje de usuarios de Linux) ha dejado en sombras a muchos usuarios de Linux, hasta el punto de que es normal preguntarse al elegir un nuevo componente para nuestro ordenador si podremos “echarlo a andar” en Linux.

La verdad es que siempre, con más o menos esfuerzo, se consiguen solucionar la mayoría de los problemas. El avanzado desarrollo del kernel en este sentido y la adaptación por parte de las distintas distros de los drivers que se desarrollan paralela y altruistamente para estos componentes facilita las cosas.

Distinto es el caso de las tarjetas de red wireless. La tecnología Wi-fi lleva tan poco tiempo en el mercado que es muy normal que no encontremos drivers para todos los modelos. La mayoría de los fabricantes únicamente ofrece drivers para las últimas versiones de Windows (Win2000 o WinXP). En este sistema operativo, la mayoría de los drivers de las tarjetas usan llamadas al protocolo NDIS de Microsoft. Es decir, que crean drivers que se comunican con el sistema operativo de una forma genérica dictada por este protocolo. Aquí entra en juego la utilidad NdisWrapper.

Como su propio nombre indica, NdisWrapper lo que hace es mapear los drivers NDIS de WinXP/Win2000 de cada fabricante a un módulo genérico en el kernel de Linux. Es decir, que NdisWrapper usa los drivers propietarios en Windows de cada tarjeta y transforma sus llamadas al protocolo NDIS a llamadas a un módulo wireless cargado en el kernel de Linux. Con esta utilidad conseguiremos hacer funcionar sin ningún problema casi cualquier tarjeta wireless, pero además más dispositivos que usan el NDIS. El proyecto tiene un sistema de documentación basado en wiki estupendo. Aún así, paso a resumir los pasos para utilizar NdisWrapper:

  1. Requisitos previos. Fuentes del kernel de Linux. Y que sea nuevecito (>2.4.26 o >2.6.6), ein?.
  2. Instalar NdisWrapper. Las típicas opciones ya conocidas por todos para instalar programas en Linux. Por si acaso, aquí os dejo algunos enlaces al respecto:

  3. Instalar los drivers de WinXP Si usas directamente los que ya tienes en el CD, te puedes saltar los primeros 2 pasos. Recomendable no hacerlo.

    • Identificar nuestra tarjeta de red:
      $ lspci
      y apuntar su código PCI ejecutando:
      $ lspci -n
      donde concuerde el Bus ID (algo así como 0000:00:0x.0). En mi caso el código para una Conceptronic PCI es 168c:0013.
    • Identificar ese PCI ID en ésta lista y bajar los drivers. Descomprimirlos a un directorio.
    • Instalar los drivers con NdisWrapper. Desde el directorio con todos los archivos (.inf, .bin, .sys …), ejecutar
      $ ndiswrapper -i nombre_del_driver.inf

    Si todo ha funcionado, el driver está cargado. Ejecutando
    $ ndiswrapper -l
    Nos deben de salir las tarjetas cuyos drivers Win hayamos instalado en NdisWrapper (pueden ser más de una). Si la tarjeta está físicamente instalada, debería decir algo como
    Installed ndis drivers:
    xxxx driver present, hardware present

  4. Insertar el módulo genérico NdisWrapper en el kernel. Tranquilos que suena raro pero es muy fácil:
    $ modprobe ndiswrapper
    Y ya está! Si no ha fallado, ya tenemos nuestra tarjeta reconocida e instalada. Sólo queda rematar la faena.
  5. Configurar la tarjeta. Tiramos de ifconfig (parámetros de red - nivel IP) y iwconfig (parámetros wireless - nivel de enlace). O usamos las herramientas de nuestro Gnome, KDE… Este apartado (genérico, por otra parte) puede bien merecerse otro post.

Bueno, puede parecer difícil, pero os aseguro que es bien fácil. Además hay muchísimas tarjetas que así funcionan mejor aún que con el driver específico (para Linux) del fabricante. Espero que ésto ayude a más de uno a probar! Si tenéis cualquier duda, no dudéis en consultar en los comentarios. Aún así, las FAQs y la documentación de NdisWrapper son excelentes. Y para mi amigo Edu, comentarle que con NdisWrapper se puede usar WPA ;P

Automatizar aplicaciones interactivas

17.08.2005

Hace poco he descubierto expect. Expect es una herramienta para automatizar aplicaciones interactivas como telnet, ftp, passwd, fsck, rlogin, tip, etc.

Tuve la necesidad de comprobar el funcionamiento de un servicio en Linux. Para ello atacaba los puertos que utilizaba este servicio mediante telnet y le enviaba una cadena. Prueba realizada manualmente y todo OK. Pero cuando quiero introducir en el cron esta tarea mediante un script, telnet no se comporta como nos gustaría. No llegaba a admitir la cadena, cortaba la conexión tras realizar el telnet.

¿Qué hacer? Supongo que habrá varias soluciones pero descubrí expect y ciertamente es muy potente y útil.
Éste es el código que emplee para conectar a un puerto y enviar la cadena “HELLO” al servidor:

#!/usr/bin/expect -f

proc conecta {puerto1} {
spawn telnet
expect “*telnet*”
send “open 10.10.10.11 $puerto1n”
expect {”‘^]’n” exp_continue}
send “HELLO\n”
}

set puerto [lindex $argv 0]
conecta $puerto

Todo esto se introduce en un fichero con extensión exp, supongamos telnet.exp y se asignan permisos de ejecución.
Para ejecutarlo: ./telnet.exp puerto, donde puerto es el valor que le pasamos como parámetro.

Lo importante es saber que se puede automatizar todo. El software de expect incluye numerosos ejemplos que nos ayudan a entender su funcionamiento. De primeras echa un poco para atrás pero en seguida se descubre que no es para tanto y que tiene mucha utilidad.

Más info:

Expect Home Page

Algunos ejemplos

man expect

10 consejos para la seguridad en linux

24.06.2005

Un enlace con consejos muy conocidos pero que no está de mal recordar.

NTP (Network Time Protocol) en Linux

22.06.2005

¿A quien no le pasado alguna vez que va a mirar la fecha y hora del servidor y se encuentra con la sorpresa de que están muy lejos de ser datos reales? El tiempo en los servidores es fundamental, sobre todo porque esa información queda reflejada en los distintos logs que tengamos en el sistema.
Una buena solución es hacer uso de NTP (Network Time Protocol). El funcionamiento es simple: existe una serie de servidores de hora en Internet en los cuales se confía totalmente en cuanto a la fecha y hora que tienen; tendríamos que conectar mediante NTP nuestro servidor o servidores con alguno de éstos comentados anteriormente y ya está. Bueno ya está no. Se suelen crear niveles de acceso a los servidores mediante NTP. Por ejemplo en mi caso tengo que cada servidor toma el tiempo de una máquina en la red que a su vez lo toma de un pool de servidores confiables existentes en Internet.

¿Cómo hago que mi servidor tome el tiempo de otro?

0.-Descargar el software de http://ntp.isc.org/bin/view/Main/SoftwareDownloads.

1.- Ejecuto la sentencia siguiente para sincronizar:

ntpdate ip_servidor
, donde ip_servidor es la IP del servidor que me dará el tiempo

Se suele ejecutar dos-tres veces antes de pasar al siguiente paso.

2.- Configuro el servicio.

Edito el fichero /etc/ntp.conf y añado como mínimo la siguiente entrada:

server ip_servidor

3.- Inicio el servicio.

service ntpd start

¿Cómo comprobar que la sincronización es correcta?

El comando ntpq -p me permite observar si todo va bien fijándome en la columna st. Si este valor es 16 no existe conexión.

Más info en:

http://www.ntp.org
http://www.tldp.org/HOWTO/TimePrecision-HOWTO/ntp.html#ntp.ntp

La Junta de Andalucía dispuesta a potenciar Linux

16.06.2005

Hace ya tiempo la Junta de Extremadura y Andalucía se embarcaron en el proyecto de crear una distribución Linux fácil de utilizar e instalar, para ello partieron de la ya conocida Debian a la que le añadieron software propio para facilitar dichas tareas, dando lugar a las distribuciones LinEx (Extremadura) y Guadalinex (Andalucía).

La nueva versión de Guadalinex parece prometer, una de sus innovaciones es la de partir de la distribución Ubuntu en vez de Debian, con las ventajas que ello conlleva (menor ciclo entre versiones, incorporación de últimos entornos gráficos Gnome/KDE, etc.). Otro punto fuerte es el de haber contratado la Junta una consultoria para hacer Guadalinex más accesible, abriendo de esta forma Linux a usuarios que hasta el momento lo tenían dificil. Se puede consultar la noticia y comentarios aquí.

Apache 1 versus 2

13.06.2005

Para aquellos que aún no hayan dado el salto a la 2 aquí hay una comparación de rendimiento entre ambas versiones de apache.
Yo personalmente todavía prefiero continuar con la 1.3

Tratamiento de imágenes con ImageMagick

12.06.2005

ImageMagick es una herramienta ideal para modificar imágenes desde la línea de comandos de nuestro GNU/LINUX. También hay por ahí una versión para Windows. Si no lo tienes instalado puedes descargarlo e informarte en ImageMagick.org.
Tiene una serie de comandos, entre los cuales destacan convert y mogrify, el primero convierte una imagen y la guarda como otro fichero y el segundo modifica la imagen con las opciones deseadas.

Un simple ejemplo:

# mogrify -resize 150 -quality 35 *.jpg

Aquí estaríamos modificando todos los ficheros con extensión jpg que se encuentren en un directorio dándoles un tamaño de 150 pixels y una calidad de 35, algo bastante rápido cuando necesitamos hacerlo con muchas imágenes.

Podéis consultar todos los comandos y el modo de usarlos en la web oficial de ImageMagick, pero también he visto otra guía con muy buena pinta en StarLinux que podréis consultar aquí.

Usando ésta librería que generalmente suelen tener instalado los servidores Web, podréis modificar imágenes sin tener que bajarlas a vuestro pc y luego subirlas de nuevo.

Análisis de rendimiento en Linux

10.06.2005

He encontrado un enlace, en inglés, que muestra conceptos básicos sobre el análisis de rendimiento de un Linux: nos muestra como determinar si un servidor está un poco corto de memoria, de CPU, etc. haciendo uso de la lectura de una serie de comandos del SO como vmstat, iostat o netstat. Es sencillito pero es un buen punto de partida.