jueves, noviembre 08, 2012

Me mudo

Después de haber intentado darle vida al blog este 2012 y haber visto con alegría cómo el número de visitas crecía exponencialmente, me mudo a http://unamiradaentrebytes.wordpress.com/ debido a lo pesado que se me hace manejar el interfaz de blogger para añadir código a los artículos.

Estoy a un click de distancia. Pásate a verme.

martes, septiembre 18, 2012

Acceder al puerto serie en Livebox2

Desnudando al Livebox2

ACTUALIZADO 08/Oct/2012: con qué adaptador conectarse al puerto serie


Para acceder al puerto serie de un Livebox2 lo primero que hay que hacer es, obviamente, desmontar la tapa del router. Para ello desmontamos las 4 patitas de goma que lleva el router.
Patas de goma del Livebox2
Una vez quitadas las gomas aparecen unos tornillos Torx-10:
Tornillos Torx-10 para acceder al Livebox2
Y sólo queda desencajar la tapa de arriba que no presenta ninguna resistencia. Si hay resistencia, asegúrate de haber quitado los 4 tornillos previamente.

Haciendo el implante al Livebox2

Para acceder al puerto serie del Livebox2 hay que soldar unos pines (o un puerto DB9 mediante cables) a los 4 contactos (realmente sólo hacen falta 3 si usas un adaptador USB ya que está alimentado a través de éste). Éstos se encuentran al lado del botón de RESET que podemos encontrar en la parte posterior del router.
Contactos del puerto serie, botón de RESET y puerto USB del Livebox2 vistos desde el otro lado

 Una vez soldados los pines, cada uno de ellos corresponde respectivamente con:

Pines del puerto serie del Livebox2

 Accediendo por terminal serie al Livebox2


 Los parámetros del programa de terminal con el que vayas a conectarte al Livebox2 son los siguientes:

  • Velocidad: 57600bps 
  • Bits: 8 
  • Paridad: No 
  • Bits de parada: 1 
  • Control de flujo: en mi equipo con mi adaptador serial/USB ambos a OFF


Y con ésto, pulsando unas pocas veces la tecla Intro debería aparecerte el terminal solicitándote el Login.

Dependiendo de la versión de firmware que tengas (que la tuya será FAST3yyy_691288 si ha estado conectado al ADSL de Orange a partir de agosto de 2011) podrás acceder con root/1234 si es una versión anterior o no podrás acceder (todavía).

En el próximo post mostraré los pasos a dar para hacer un downgrade y así poder acceder al router por telnet, activar opciones ocultas (que permanecen aunque actualicen el firmware) y poder modificar lo que queráis del sistema operativo (válido hasta que te actualicen el firmware).

Si tienes alguna duda o comentario, por favor, no dudes en dejarlo.

Actualización: con qué hardware conectarse al livebox

Para conectarse al livebox hace falta un puerto serie TTL. Los que hemos utilizado toda la vida no nos valen ya que utilizan 10V de tensión cuando el puerto serie del Livebox2 funciona en niveles TTL (3,3V). Aquí tienes una foto del mío.
Livebox con pines soldados y adaptador USB-TTL


Lo más fácil es comprar uno hecho (por ejemplo éste de dx), pero también podrías hacértelo (hay esquemas online) o modificar uno que tengas con chip MAX232 por un MAX2323. Si quieres profundizar en el tema, mira esta página de openwrt.

sábado, julio 14, 2012

Muuuuu!!! Easter Egg

xir@naranjito:~$ apt-get
[...]
See the apt-get(8), sources.list(5) and apt.conf(5) manual
pages for more information and options.
This APT has Super Cow Powers.
xir@naranjito:~$ apt-get moo
(__)
(oo)
/------\/
/ | ||
* /\---/\
~~ ~~

...."Have you mooed today?"...
xir@naranjito:~$ aptitude -v moo
There really are no Easter Eggs in this program.
xir@naranjito:~$ aptitude -vv moo
Didn't I already tell you that there are no Easter Eggs in this program?
xir@naranjito:~$ aptitude -vvv moo
Stop it!
xir@naranjito:~$ aptitude -vvvv moo
Okay, okay, if I give you an Easter Egg, will you go away?
xir@naranjito:~$ aptitude -vvvvv moo
All right, you win.

/----\
-------/ \
/ \
/ |
-----------------/ --------\
----------------------------------------------

xir@naranjito:~$ aptitude -vvvvvv moo
What is it? It's an elephant being eaten by a snake, of course.

"Hackear" un BMW en menos de 3 minutos... y robarlo

Cómo "hackean" los BMW generando una nueva llave y se llevan el coche en menos de tres minutos ha sido mudado con el resto del blog a mi nuevo blog "
Una Mirada Entre Bytes" en http://unamiradaentrebytes.wordpress.com/

lunes, julio 09, 2012

Escanear documentos desde un navegador web

Por qué instalar un escaner en red

Hoy estaba haciendo un curso sobre copywriting y tenía que imprimir unas hojas. Tengo una impresora multifunción Canon Pixma MP190 que es un infierno configurar en las distribuciones "nuevas" porque los drivers son antiguos y dependen de libcupsys2 en lugar de libcups2. Así que he aprovechado una placa Alix que tengo en casa funcionando y he decidido instalar ahí la impresora para poder imprimir desde cualquiera de los ordenadores de casa (estoy pensando incluso en echar echando una mirada a imprimir desde los móviles).

El caso es que, una vez configurada la impresora, he pensado en añadir el escaner. He encontrado varios hilos útiles. Me he decidido a seguir éste, pero me parecía excesivo (por recursos y para lo que lo voy a utilizar) instalar un apache sólo para gestionar el scanner, así que mi siguiente pensamiento ha sido: "voy a usar nginx". ERROR. Nginx no soporta CGIs. Así que instalaré la siguiente opción que me haga perder menos tiempo: lighttpd.

Instalación de los componentes necesarios

Como siempre en nuestros sistemas GNU/Linux (Debian way), el modo fácil:

apt-get install sane-utils netpbm lighttpd

Configurando el sistema

Lo primero que tendremos que verificar es que el escaner es detectado. Para ello ejecutamos:

sudo scanimage -L

Debe devolver algo como:

device `pixma:04A91734_62836D' is a CANON Canon PIXMA MP190 multi-function peripheral

Cualquier tipo de error deberá ser subsanado previamente a continuar con este procedimiento. lighttpd necesita una pequeña configuración. Editamos el fichero /etc/lighttpd/lighttpd.conf y añadiremos en el bloque de los server_modules la línea:

"mod_cgi",

como la ves, con comillas y coma.

El otro bloque lo deberás añadir en tu vhost o al final de tu fichero si no tienes hosts virtuales:

$HTTP["url"] =~ "/escaner/" {
    cgi.assign = ( ".cgi" => "/bin/bash" )
    }

Descargamos el paquete,  descomprimimos y asignamos permisos. Es un zip.


Asignamos los permisos necesarios al usuario (a mí me ha funcionado con éstos):

drwxr-xr-x 2 www-data scanner  4096 2007-08-18 22:51 images
-rwxr-xr-x 1 www-data scanner  9091 2012-07-09 07:16 index.cgi
-rwxr-xr-x 1 www-data scanner   378 2008-01-26 19:54 print.cgi
drwxr-xr-x 2 www-data scanner  4096 2012-07-09 07:16 scans

Para poder acceder al escaner, he añadido con visudo la siguiente línea al fichero sudoers:

www-data ALL=NOPASSWD: /usr/bin/scanimage

He creado un index.html que redirige a index.cgi para evitar poner los cgi como index-file. El contenido del fichero no lo puedo añadir debido a limitaciones de Blogspot, pero es un REFRESH sin más a index.cgi

La web ya me funcionaba pero me devolvía un error y no mostraba el escaneado. En este punto, si no funciona "tal cual", debemos verificar que los parámetros que le pasa al escaner son válidos con el nuestro.
La línea original es:

scanimage --resolution $QUALITY $SIZE --brightness $BRIGHTNESS --mode $MODE --format=ppm > /tmp/scan_file.ppm

La comparamos con los parámetros que acepta nuestro escaner. 

scanimage --help

Nos devuelve la ayuda general y una específica para nuestro escaner. Esos serán los parámetros que acepte:

Options specific to device `pixma:04A91734_62836D':
  Scan mode:
    --resolution auto||75|150|300|600dpi [75]
        Sets the resolution of the scanned image.
    --mode auto|Color|Gray [Color]
        Selects the scan mode (e.g., lineart, monochrome, or color).
    --source Flatbed [Flatbed]
        Selects the scan source (such as a document-feeder).
    --button-controlled[=(yes|no)] [no]
        When enabled, scan process will not start immediately. To proceed,
        press "SCAN" button (for MP150) or "COLOR" button (for other models).
        To cancel, press "GRAY" button.
  Gamma:
    --custom-gamma[=(auto|yes|no)] [yes]
        Determines whether a builtin or a custom gamma-table should be used.
    --gamma-table auto|0..255,...
        Gamma-correction table.  In color mode this option equally affects the
        red, green, and blue channels simultaneously (i.e., it is an intensity
        gamma table).
  Geometry:
    -l auto|0..216.069mm [0]
        Top-left x position of scan area.
    -t auto|0..297.011mm [0]
        Top-left y position of scan area.
    -x auto|0..216.069mm [216.069]
        Width of scan-area.
    -y auto|0..297.011mm [297.011]
        Height of scan-area.
  Buttons:
    --button-update
        Update button state
    --button-1  [0]
        Button 1
    --button-2  [0]
        Button 2

Type ``scanimage --help -d DEVICE'' to get list of all options for DEVICE.

List of available devices:
    pixma:04A91734

Como ves, en mi escaner, no está soportado el parámetro Brightness, así que lo elimino de la línea incluida en el cgi y elimino en el resto del script las opciones de Brightness en el menú. Podemos añadir otras opciones que ofrezca nuestro escaner.

Yo lo voy a dejar aquí de momento. Adjunto un screenshot de la prueba que he hecho con un pendrive y una púa en mi nuevo webscanner.


Se me ocurre que puede serme útil si me dejo un documento en casa que necesito y mi chica lo puede poner en el escaner. Accediendo por la VPN al servidor web, podría disponer del documento en mi móvil en un momento.

Deja un comentario con otras utilidades que le encuentres u otras ideas de uso con pequeñas modificaciones.

jueves, julio 05, 2012

tlhIngbuntu: ¿otro sabor de Ubuntu?

Cuando creía que lo había visto (casi) todo, vuelvo a sorprenderme con los grados de frikismo de algunas ¿personas?

miércoles, julio 04, 2012

Enhorabuena a tus derechos online.

 ACTA rejected

 Como continuación de mi aventura de ayer, hoy me han escrito dos de los eurodiputados que me respondieron ayer indicándome, no sólo que ellos habían votado en contra de ACTA sino también los resultados:
  • 39 votos a favor
  • 478 votos en contra
  • 165 abstenciones
Como bien dice “ACTA has today been consigned to history". Ésto no quiere decir que no se vaya a legislar sobre los derechos de autor, pero de una manera racional. 

Enhorabuena a tus derechos online. Ésta vez no han sido aniquilados.

martes, julio 03, 2012

4 de julio, dia de la Independencia... de Europa

Mañana, día 4 de julio de 2012, se vota la "ACTA". Una ley que bajo la bandera de la legitimidad de los derechos de autor y las patentes espera poder recortar libertades fundamentales de los ciudadanos europeos en favor de las grandes corporaciones americanas. Como muchos otros ciudadanos consternados con esta aberración hacia nuestros derechos, he escrito a los eurodiputados (puedes enviar tu email a ésta lista de correo para que les llegue:  europarl-all@falkvinge.net ) pidiéndoles que voten en contra de dicha ley. Mi email:
------------------------------------------------------------------------------------------------------------------------------------


Dear Member of the European Parliament.

As an European citizen, I urge to reject the ACTA treaty on july 2-5.

ACTA is no designed in Europe for Europeans' benefit nor problems nor
economy nor freedom... It only benefits to big American corporations'
interests killing Europeans' freedoms for their benefit. It tries to
lockout any and all reforms of copyright and patent structures which
could benefit European culture and innovation. It has been designed to
prevent next (and actual) generation of entrepreneurs from developing
new and better productos and services which displace old bussiness
leaders from their position. They spend efforts in keeping this
position in stead of developing new ideas which has no benefit for
Europeans.

Europe is living a critical moment where we must look for our best
options and interests which are not foreign ones. We must stop steping
on our rights and civil liberties for foregin benefits. We'd like (and
need) to have political representatives which take care of us as
Americans do trying to build this kind of treaties worldwide.

As new powerfull countries begin to arrive in Asia we need to be as
competitive as we can and this laws are amputating our legs to run
this race.

Hope you listen to our voices.
Best regards.
Ivan Eguiguren
Spain

P.S.: I have understood that some MEPs have voiced concerns that mails
like this one would be part of an automated process, and even regarded
it as a form of attack, in that sense. I want to underscore that this
mail is not part of an automated process.

I am not an attack – I am a European voter, pleading for my
representatives to represent me against US businesses. (For the
technically inclined, the mail headers will show that the identical
copies you may have received of this sample letter were all sent
manually, one by one, by different people.)

------------------------------------------------------------------------------------------------------------

Lo he enviado  a las 8:23am y hasta ahora, 11:41am me han respondido 3 eurodiputados (mejor dicho, me han respondido de sus oficinas) para indicarme que votarán en contra. Éstos son:
  • Nigel Farage
  • Mojca Kleva
  • Auke Zijlstra
  • Helmut Scholz

Realmente espero que lo cumplan porque a mí me han alegrado el día y, de no hacerlo, mañana mi tristeza será doble. EDITO: en contra de lo que opinaba (realmente pensaba que ni me contestarían), me está gustando mucho que expliquen sus posiciones en sus correos. Scholz, por ejemplo, indica que está en contra de ACTA, que no de los derechos de autor, y que considera que deben tratarse independientemente "las falsificaciones" de bienes, medicinas y esperar las opiniones del sector creativo en el entorno digital. También que se debe llegar a un acuerdo con China, Brasil o India para aunar las diferentes legislaciones. Mojca Kleva indica que ACTA indica correctamente el problema pero da respuestas equivocadas. Por otra parte, de Nigel Farage destaco que indica que ACTA eleva la cuestiones de infracciones de derechos de autor, patentes y marcas registradas de la ley civil a la ley criminal en 39 paises.

IPv6 con ebtables

El problema


Al ejecutar:
ebtables -t broute -A BROUTING -i $CLIENT_IFACE -p ipv6 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP
Devuelve el error:
for ip filtering the protocol must be specified as IPv4

La solución


ebtables -t broute -A BROUTING -i $CLIENT_IFACE -p ipv6 --ip6-proto tcp --ip6-dport 80 -j redirect --redirect-target DROP

martes, junio 26, 2012

Particiones VMWare: cómo montarlas directamente en tu distribución habitual

Intro

En el trabajo utilizo (de momento) máquinas virtuales sobre VMWare Server. Estas máquinas ofrecen varias opciones al crearlas entre ellas elegir si particionas el disco virtual en ficheros de 2GB o en un sólo fichero. Esta seguna manera es lo que en inglés llaman "flat disk". Podremos montar un "flat disk" de vmware en nuestra máquina física de una manera muy simple.

Descubriendo nuestro disco de VMWare

Primero averiguamos qué particiones y de qué tipo existen en su interior:

# fdisk -l disco-flat.vmdk 
last_lba(): I don't know how to handle files with mode 8180
You must set cylinders. You can do this from the extra functions menu. 
Disk disco-flat.vmdk: 0 MB, 0 bytes 255 heads, 63 sectors/track, 0 
cylinders Units = cylinders of 16065 * 512 = 8225280 bytes 
Device Boot Start End Blocks Id System
disco-flat.vmdk1 * 1 457 3668992 83 Linux
Partition 1 does not end on cylinder boundary.
disco-flat.vmdk2 458 523 522241 5 Extended
Partition 2 does not end on cylinder boundary.
disco-flat.vmdk5 458 523 522240 82 Linux swap / Solaris


En este caso, encontramos que la primera partición es de tipo Linux (83).

Montando el disco de VMWare en un directorio

Montamos las particiones:  

kpartx -av disco-flat.vmdk

Ésto montará las particiones que contenga el disco virtual y mostrará algo parecido a:
add map loop0p1 : 0 7337984 linear /dev/loop0 2048 
add map loop0p5 : 0 1044480 linear /dev/loop0 7342080 

loop0p1 indica el dispositivo (/dev/loop0) y la partición (p1).
La primera partición era la que contenía el sistema de ficheros Linux (83), así que será esa la que montemos. Creamos un directorio donde montarla:

# mkdir -p /mnt/flatdisk-image 


Y montamos la partición:

# mount /dev/mapper/loop1p1 /mnt/flatdisk-image

Si no ha aparecido ningún error tendrás montado el sistema de ficheros en /mnt/flatdisk-image:  

# ls /mnt/flatdisk-image 
bin dev home lib media opt root sbin srv tmp var boot etc initrd.img lost+found mnt proc run selinux sys usr vmlinuz 
Ya puedes trastear con los ficheros.

Desmontando las particiones del disco de VMWare


Desmontar es tan fácil como (en este orden):
# umount /mnt/flatdisk-image # kpartx -d disco-flat.vmdk Con eso ya tendríamos el disco desmontado limpiamente con los cambios hechos.

martes, junio 19, 2012

Curiosidades de IPv4 (a estas alturas)

El otro día, por error, tecleando una IP, me ocurrió ésto:
ping 192.168.1
PING 192.168.1 (192.168.0.1) 56(84) bytes of data.

Coincidió que estaba en una red 192.168.0.0/24, así que me quedé bocas 8-O
¿Cómo había averiguado que estaba en esa red? ¿Sería como en IPv6, que obvia los 0 intermedios? ¿Y cómo sabía que era el tercer octeto y no el segundo el que era 0? Bueno, no era 192.168..1, así que no funcionaba como IPv6.

Ayer, viendo un blog que me recomendó un colega (http://elladodelmal.com), me encontré con más curiosidades. He aquí mis pruebas:
root@sqa-test:~/virtual_files# ping 0
PING 0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.048 ms
^C
--- 0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.048/0.048/0.048/0.000 ms

root@sqa-test:~/virtual_files# ping 10.230.770
PING 10.230.770 (10.230.3.2) 56(84) bytes of data.
64 bytes from 10.230.3.2: icmp_req=1 ttl=128 time=1.08 ms
^C
--- 10.230.770 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.083/1.083/1.083/0.000 ms

Dicen que ésto viene de inet_aton():
http://linux.die.net/man/3/inet_aton
a.b.c.d

Each of the four numeric parts specifies a byte of the address; the bytes are assigned in left-to-right order to produce the binary address.

a.b.c

Parts a and b specify the first two bytes of the binary address. Part c is interpreted as a 16-bit value that defines the rightmost two bytes of the binary address. This notation is suitable for specifying (outmoded) Class B network addresses.

a.b

Part a specifies the first byte of the binary address. Part b is interpreted as a 24-bit value that defines the rightmost three bytes of the binary address. This notation is suitable for specifying (outmoded) Class C network addresses.

a

The value a is interpreted as a 32-bit value that is stored directly into the binary address without any byte rearrangement.

El pequeño Pepito Grillo me dice que no pruebe, pero ¿servirá para saltarse filtros y firewalls? ;)

lunes, agosto 01, 2011

livebox2 de Orange (I)

EDITADO: Atención. Ahora hay que hacer un downgrade para que esto funcione.

Esta semana hemos migrado el ADSL de movistar a orange. ¿Por qué? Porque estaba cansado de recibir llamadas comerciales aún habíendo llamado a "atención al cliente" para que no las volviesen a realizar. 5 dias después de esa llamada nos llaman para preguntarnos si estámos satisfechos con cómo han solucionado el problema: "Me estás llamando, ¿no? entonces no estoy satisfech@". A partir de ese dia recibíamos 2 llamadas diarias :-/

El caso es que, como decía, nos pusieron un router livebox2. A mí me parecía una patata vistosa de plástico, acostumbrado a configurar como he querido siempre los routers de telefónica. Lo primero de todo es que está documentado cómo acceder al router para configurar lo que cualquier usuario normal querría: la wifi (así me evito reconfigurarla en todos los clientes), NAT, IPs, etc, cosa que siempre ha habido que andar indagando (en mayor o menor medida) para otros routers.

Por todas partes lo encuentras. Para acceso web: "admin/admin", para telnet: "root/1234". Pero estos accesos no muestran todas las opciones... en un principio.

Por casualidad, buscando otra cosa, me encontré en elhacker.net un post que indicaba que había una aplicación para Android que permitia "abrir menús ocultos" en el livebox. Accedí y también había una aplicación para windoze. Parecía que lo habían creado en seguridad-wireless.net, pero en ninguno de los dos foros encontré los fuentes para poder portarlo a gnu/linux, así que me decidí por la versión windoze en una máquina virtual y un wireshark escuchando cualquier conexión a la IP del router.

Tras lanzar la aplicación y finalizar en la máquina virtual , detengo la captura. Hace peticiones telnet. Tras un "Follow TCP Stream" veo toda la conexión, login y comandos hasta el exit. Va a ser fácil pasarlo a python. Además así, quien lo quiera ejecutar (en cualquier SO) sabrá lo que está ejecutando.
File name: livebox.tgz File size:604 Bytes

Al hacer login con el usuario que lo hace el script encontraremos el curioso comando shell que nos abrirá una sh en el router (no el cli que nos atiende nada más conectarnos).

jueves, junio 04, 2009

Lighttpd en Centos 5.2

Para instalar Lighttpd en CentOS 5.2 hay que instalar primero ciertos paquetes de desarrollo:
yum install bzip2-devel zlib-devel pcre-devel


Buscamos cuál es la última versión disponible y la descargamos de http://www.lighttpd.net/download

Desempaquetamos en función del fichero descargado:
tar zxvf lighttpd-1.4.22.tgz

o
tar jxvf lighttpd-1.4.22.tar.bz2

Después ejecutamos configure:
./configure --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --with-opens


Tras esto compilamos:
make


E instalamos:
su -
make install


Con esto ya tendríamos Lighttpd instalado en nuestro sistema. Ahora vamos con la configuración básica.

Creamos un usuario:
adduser -s /sbin/nologin lighttpd

Creamos un directorio y fichero de configuración:
mkdir /etc/lighttpd
cd /etc/lighttpd
vi lighttpd.conf


Dentro del fichero metemos:
server.modules = (
"mod_rewrite",
"mod_redirect",
"mod_alias",
"mod_access",
"mod_auth",
"mod_status",
"mod_fastcgi",
"mod_cgi",
"mod_compress",
"mod_accesslog" )
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
mimetype.assign = (
".rpm" => "application/x-rpm",
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".asc" => "text/plain",
".c" => "text/plain",
".cpp" => "text/plain",
".log" => "text/plain",
".conf" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".bz2" => "application/x-bzip",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar"
)
########## BASE CONFIG - EDIT BELOW #########################
server.tag = "lighttpd (RedHat)"
accesslog.filename = "/var/log/lighttpd/access_log"
server.errorlog = "/var/log/lighttpd/error_log"
server.document-root = "/var/www/html/"
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
server.port = 80
##### Poner direccion IP si solo queremos que escuche en un interfaz#####
#server.bind = "202.54.xxx.xxx"
server.error-handler-404 = "/errorr404.php"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "lighttpd"
server.groupname = "lighttpd"
compress.cache-dir = "/tmp/lighttpd/cache/compress/"
compress.filetype = ("text/plain", "text/html")
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}


Creamos el fichero /etc/sysconfig/lighttpd con los parámetros de arranque:
LIGHTTPD_CONF_PATH=/etc/lighttpd/lighttpd.conf


Creamos un fichero de arranque /etc/init.d/lighttpd:
#!/bin/sh
#
# lighttpd Startup script for the lighttpd server
#
# chkconfig: - 85 15
# description: Lighttpd web server
#
# processname: lighttpd
# config: /etc/lighttpd/lighttpd.conf
# config: /etc/sysconfig/lighttpd
# pidfile: /var/run/lighttpd.pid
#
# Source function library
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/lighttpd ]; then
. /etc/sysconfig/lighttpd
fi
if [ -z "$LIGHTTPD_CONF_PATH" ]; then
LIGHTTPD_CONF_PATH="/etc/lighttpd/lighttpd.conf"
fi
prog="lighttpd"
lighttpd="/usr/sbin/lighttpd"
RETVAL=0
start() {
echo -n $"Starting $prog: "
daemon $lighttpd -f $LIGHTTPD_CONF_PATH
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc $lighttpd
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
reload() {
echo -n $"Reloading $prog: "
killproc $lighttpd -HUP
RETVAL=$?
echo
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
fi
;;
reload)
reload;;
status)
status $lighttpd
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
RETVAL=1
esac
exit $RETVAL


Creamos los directorios necesarios y asignamos permisos:
mkdir -p /var/log/lighttpd
mkdir -p /tmp/lighttpd/cache/compress/
chown lighttpd:lighttpd /var/log/lighttpd
chown lighttpd:lighttpd /tmp/lighttpd/cache/compress/
chmod 755 /etc/init.d/lighttpd


Si está arrancado paramos el apache:
chkconfig httpd off
/etc/init.d/httpd stop

Y arrancamos el Lighhtpd
chkconfig --add lighttpd
chkconfig lighttpd on
/etc/init.d/lighttpd start

jueves, marzo 27, 2008

Public Server Version

Siempre se me olvida. Cada vez que tengo que configurar un servidor Apache no recuerdo las directivas para evitar que cuando aparezca un mensaje de error devuelva cosas como:



Por defecto, en cualquier servidor, decir su versión y sus plugins es un problema de seguridad pues le das los datos a quién esté al otro lado para que busque vulnerabilidades específicas para tu sistema. Por eso lo primero que debemos hacer es deshabilitar en la configuración.

En Apache 2.0 y posteriores es tan simple como añadir estas dos directivas (o asignarles este valos en caso de tener otro) en /etc/apache2/apache2.conf:
ServerTokens Prod
ServerSignature Off

Al hacer esto lo que veremos será:



En postfix ocurre algo parecido.Si hacemos telnet al puerto 25 de una máquina con el postfix sin configurar aparece algo del estilo:
xir@naranjito:~$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 naranjito.uax.es ESMTP Postfix (Ubuntu)


Para que no aparezca el servidor (Postfix) ni el sistema operativo (Ubuntu), es tan simple como modificar la línea del /etc/postfix/main.cf con la directiva smtpd_banner y modificar lo que aparece después del =. Por ejemplo:
smtpd_banner = ESMTP server
que mostraría:
xir@naranjito:~$ !telnet
telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ESMTP server


De manera que sólo veríamos una respuesta "inocua".

lunes, marzo 24, 2008

Buscando trabajo (Recopilando datos I)

Una empresa con una buena política de seguridad (aún no conozco ninguna) controla y filtra los datos que salen al exterior respecto a la arquitectura interna de su red. Tiene una buena política de incentivación del personal para evitar en todo lo posible la "fuga de cerebros" y así que no salga información respecto al funcionamiento interno de esa empresa.

La propia incentivación motiva que la empresa crezca, aumente la cantidad de clientes y, por consiguiente, que necesiten más personal. En ese momento ponen un anuncio del tipo:

Se necesita administrador senior con conocimientos avanzados de Apache, Postfix, PIX de Cisco y Ironport.


Después de tanta política, de tanto esfuerzo y dinero en mantener al personal motivado y que no se marchen a otra empresa, ¿qué servidor de correo crees que utilizan en esta empresa? ¿Qué servidor web? ¿Qué firewall? ¿Qué antispam?

¿Cómo se puede utilizar esto? Imaginemos que aparece un bug en apache. Utilizamos el buscador que tienen las propias páginas de búsqueda de trabajo online para buscar eso precisamente: la palabra apache. Por ejemplo buscar "apache" en infojobs.es nos devuelve 295 entradas. mysql 555 entradas, etc.

También la búsqueda la podemos hacer a la inversa. Ya tenemos objetivo, así que pinchamos en el enlace "Buscar empresas" y si en ese momento están buscando a gente...

lunes, febrero 25, 2008

Salidos


Ha sido curioso irme a dar de alta en un foro y en el registro "sexo" dejarlo sin especificar. El mensaje de error da que pensar qué panda de salid@s administran ese foro.

sábado, febrero 23, 2008

Seguro que no (III)

¿Quieres saber qué hay dentro? ¿Quieres saber qué direccionamiento interno tenemos? Puedes Podías hacerlo únicamente bajándote del DNS la zona completa. En el DNS de la DMZ e Internet estaban TODAS las entradas, tanto públicas como internas.

Y yo me pregunto: ¿para qué?

Y tú te preguntas: "¿para qué?"

jueves, febrero 21, 2008

No sabemos qué SO usa Dios

Me ha llamado la atención una entrevista que se publicó el 19 de febrero de 2007 en la que la monja apodada "the geeky sister" quien lleva la web del vaticano decía:

"no sabemos qué sistema operativo usa Dios, pero que en el Vaticano usan Linux."

miércoles, febrero 20, 2008

Seguro que no (I)

Aunque siempre me ha gustado llamado la atención la seguridad. Donde trabajo ahora la seguridad es algo que se sabe que existe... igual que sabemos que existen otras galaxias, vamos, de muuuuuy lejos.

Estoy de acuerdo con quien piensa que soy demasiado paranoico cuando, por ejemplo, les digo a los de redes que las vlanes no es como separar las redes físicamente. Su respuesta fué que nunca había oido que hubiese fallos de seguridad en 802.1q. Seguidamente ha hecho una búsqueda en google
y resulta que hay dos formas de saltarse las vlans.

Quizás sea demasiado paranoico cuando, a pesar de estar acostumbrado a bloquear mi ordenador siempre que me levanto de mi sitio, cierro la puerta del despacho con llave a pesar de que conozco a todos los que trabajan allí... por si me he dejado la consola sin bloquear (todos somos humanos).

Quizás sea demasiado paranoico cuando me niego a meter las claves de root de mis máquinas en una aplicación para que evalúe la carga que tienen para poder virtualizarlas. Para que dicha aplicación se pueda conectar tengo que reconfigurar el sshd para que pueda conectarse con contraseña y sin clave pública/privada, así como modificar las iptables de esas máquinas para que la aplicación pueda conectarse. Pero me hace gracia indigna cuando me dicen que "es que la seguridad es un impedimento".

Tras un kitkat

Hablando hoy con un compañero que se iba a otra empresa me he dado cuenta de que tengo un montón de cosas que decir todavía en este sitio.

jueves, agosto 30, 2007

DRM, OOXML o el precio de la libertad

Desde el inicio de las civilizaciones el ser más estúpido que pobla el tercer planeta del Sistema Solar ha tenido ansias de poder. Desde un segundo después tuvo ansia de bienes y estuvo dispuesto a vender parte de su libertad a quien tuviese con qué comprarla para que el comprador tuviese poder.

Al día de hoy siguen siendo igual de estúpidas las cosas. Nos cargamos el planeta con coches de gasolina porque las petroleras tienen demasiado dinero para que cambiemos a combustibles menos nocivos con el medio ambiente. La gente vende su autoestima, dignidad y principios por un puñado de papeles tintados, y el problema es que no lo hacemos uno de nosotros, de la plebe, con lo que el impacto de una persona entre todos los habitantes de La Tierra sería mínimo. El problema es que lo hacen los que hemos elegido para que tomen decisiones en nuetro nombre. Sería estúpido que nos intentasen comprar a nosotros... como acabo de decir no tendría impacto alguno para conseguir sus fines.

¿Soluciones? Me viene a la cabeza cada vez con más fuerza la frase de Bender -Futurama-: "matar a todos los humanos".

Otra vez más apoyando la libertad y cada día más sorprendido y aburrido de la estupidez humana y el poder del dinero (como con el caso del ooxml en el que pagan por el voto afirmativo)


Echa una ciberfirma

martes, agosto 14, 2007

Friendo huevos

Este fin de semana estuve comentando con conocidos las temperaturas que alcanzaba la xbox 360 que hasta se podía freir un huevo en ellas. Se rieron con cierta incredulidad. Esto va por ellos:

miércoles, julio 11, 2007

¿Friki? No sé, pero con un par de coj**es

De google se puede esperar casi cualquier cosa, en especial de sus mapas. De los de la luna, del que se recomienda altamente hacer zoom al máximo,

Pero si has utilizado alguna vez google maps para buscar algo habrás visto que puedes encontrar cosas muy curiosas. Esta es la más curiosa que he visto.

martes, julio 10, 2007

Iphone

Altamente destacable el "review" del iphone de Arstechnica.


Y muy especialmente destacables las pruebas de durabilidad que NO haríamos ninguno en caso de conseguir un iPhone.

sábado, mayo 26, 2007

Usa la cabeza

Por primera vez no voy a hablar de la inutilidad de los programadores o los usuarios. Simplemente os voy a mostrar un "geek" técnico.

Boost Car Remote With Skull - For more funny movies, click here

viernes, mayo 25, 2007

Un problema empresarial

Hoy iba en el coche pensando que hoy en día el gran problema de la seguridad empresarial tiene distintos nombres pero una misma cara: pendrive, boli usb, memoria usb, lápiz usb, etc...

Este tipo de memoria está a unos precios muuuuy asequibles para unas cantidades de almacenamiento importantes. Esto las pone al alcence de todo el mundo, muy portátiles y de fácil acceso a nuestro puesto de trabajo en cualquier bolsillo.

En esta memoria podemos albergar tanto datos personales como programas. Los programas son ficheros ejecutables... al igual que los virus. Podemos intercambiar ficheros infectados de casa con el trabajo y del trabajo con casa. Lo primero es un problema tan importante y costoso como un usuario enganchado a la red que en vez de trabajar utiliza los recursos de la empresa para navegar. Un usuario con un pendrive con un virus puede suponer que tengamos, desde que dedicar recursos humanos para paliar el problema hasta uso del ancho de banda de la red así como llegar a paralizarnos las comunicaciones, saturarnos discos duros o hacernos perder ficheros... y todo porque un usuario desaprehensivo se ha traido el pendrive infectado de casa para poder oir en la oficina su música.

Entre las formas que se me ocurren de evitarlo estaría el deshabilitar los puertos USB que no se usen habitualmente (ahora que los ratones y teclados suelen ser USB). Se podría hacer a nivel de BIOS (si lo permite) o a nivel de sistema operativo (también si lo permite). Seguro que hay algún programa de "seguridad" de estos que permiten controlar TODO lo que hace el usuario que permiten controlar si se debe o no permitir el acceso a un pendrive.

Pero lo que nunca habría esperado trabajando en una empresa de "seguridad" (sí, entre comillas) en la que al firmar el contrato te dicen que se controla el acceso a la web y que el correo corporativo es únicamente para trabajar y podrán acceder a leerlo en cualquier momento; en una empresa que alardea de ser una de las más "punteras" >XDDDDDDDDDDDDD en seguridad ¡¡¡del mundo!!! la solución que han elegido para evitar esto es ¡¡¡unidades compartidas!!! Sí, como lo leéis. Al loguearse en la red corporativa se ejecuta un script que, entre otras cosas, te "mapea" unas unidades compartidas, en especial una en F:

Cuando introduces una unidad de almacenamiento masivo se detecta y se asigna a F: que, como está siendo utilizada por la unidad compartida, no se puede acceder a ella.

Sólo con desconectar la unidad de red (que se puede) ya puedes acceder a tu pendrive.

Ten cuidado... esto es tecnología de seguridad puntera a nivel mundial.

La leche que les han dado.

sábado, mayo 05, 2007

HD-DVD

Leo en Kirptópolis que han sacado la clave para visiualizar los HD-DVD y se plantean llevara juicio los más de 800.000 sitios web que la publican. Me hallamado la atención este video al respecto.

jueves, abril 19, 2007

Foreando

Pues en un foro de "manualidades electrónicas" encuentro la típica pregunta "estúpida" que es estúpida por estar mal redactada (bastante mal) y el que enrevesa lo que se puede enteder para dejar al "preguntador" en ridículo.

P-Hola,

Alguien sabe de donde puedo encontrar donde esta la circuiteria de Neve o en su defecto de cualquier otro equipo.

Saludos

R-Normalmente dentro del aparato.

martes, abril 17, 2007

¿Eres el jefe? Pues chitón

Me hizo mucha gracia oir el otro día a un compañero dicíendole a nuestro jefe: "¿Qué se te ha ocurrido una idea? Pues olvídala, que si es buena ya volverá".

Y es que nos vuelve locos con sus "pensadas".

La verdad es que cada día pienso que esto me gusta menos :(

sábado, abril 07, 2007

De crontab y partir el tiempo

Siempre me lío cuando intento configurar el cron para que haga algo, por ejemplo, cada cuarto de hora. La opción de 0,15,30,45 no me vale. Ya lo sabéis quienes me conocéis: demasiado simple. Así que tiro a por */n. Pues nunca sé si n es el número de minutos de intervalo, o el número por el que tengo que dividir los 60 minutos de una hora para que me dé un cuarto de hora, es decir, no sé si en este caso tendría que poner 15 para que se realice la tarea cada 15 minutos o tendría que poner 4 porque 60/4=15.

Cada vez que tengo que hacerlo me toca mirarme 3 o cuatro búsquedas (por confirmar) y ya estoy harto. Así que, a modo de nota personal, pero esperando que os sea útil a alguien más la solución es:

habría que poner ada cuánto tiempo queremos que se ejecute la tarea. En nuestro caso anterior: */15

"La gente generalmente confunde lo que leen en los periódicos con las noticias."
Abbott Liebling (1904-1963) Periodista estadounidense.

jueves, marzo 29, 2007

Cánon o la presunta culpabilidad

No voy a repetir o que he dicho mil veces y pensamos todos, así que, si crees que nos están estafando al cobrarnos el canon, pincha en la foto y firma.

Cazadores de zombies

Como si de literatura de miedo (aunque a mí nunca me pareció que lo diese) se tratase por el título, estoy hablando de una gente que se dedica a hacer más "seguro" Internet. Llevan un control del número de máquinas zombies y C&C (sus controladores) hay por Internet (aunque no se pueda controlar relamente ese número). Parece que hay grandes variaciones en poco tiempo. Como ejemplo, desde primeros de marzo hasta hoy se ha triplicado en este mes el número de máquinas zombies. ¿Qué significa eso? Significa que dentro de poco vamos a tener que descartar el servicio de correo electrónico porque no va a ser viable por la cantidad de "mierdas" que se envían en relación a los correos lícitos.

Otro dato que me ha llamado la atención: con la salida del SP2 de Microsoft, el número de zombies bajó de 10000~15000 a 5000 nuevos zombies diarios. Impresionante, ¿verdad?

Aquí encontraréis gráficas, datos y documentación al respecto:
http://www.shadowserver.org

viernes, marzo 23, 2007

Dilbert

Todos los días leo la tira de Dilbert. Muchas veces veo reflejadas situaciones de mi empresa. Una que se da habitualmente es esta aunque hay muchísimas. Tantas que he pensado que Scott Adams trabaja aquí. He abierto la libreta de direcciones y... no, no está. ¿Cómo sabrá lo que ocurre aquí dentro?

miércoles, marzo 07, 2007

Código ofuscado

Resulta que tenía que optimizar un script, cuando de repente me encuentro:
# Creamos el fichero temporal $ficheroDestino.
# Si ya existia, lo borramos para asegurarnos de que todo el contenido es nuevo.

if [ -f $rutaDestino ];
then
rm $rutaDestino
else
echo "" | tee $rutaDestino
fi

Y yo me pregunto:
1) ¿por qué si no existe lo creamos y porqué si existe lo borramos? ¿No sería más coherente, si lo borras, crearlo después?
Versión 1.1:
if [ -f $rutaDestino ];
then
rm $rutaDestino
fi
echo "" | tee $rutaDestino

2) ¿dónde ha visto "echo "" | tee $rutaDestino"? ¿Por qué la gente es tan enrevesada? ¿echo != echo ""? ¿| + tee != >?
Versión 1.2:
if [ -f $rutaDestino ];
then
rm $rutaDestino
fi
touch $rutaDestino


3) ¿Se puede ser más enrevesado aún? Probemos (se aceptan propuestas en los comentarios):
# Comprobamos si no existe el fichero y si existe dev null y escribimos fin de linea (con comillas-comillas ¿?¿?¿?)

( [ ! -f $rutaDestino ] && [ -c /dev/null ] && echo "" | tee $rutaDestino > /dev/null 2>&1 ) || ( [ -f $rutaDestino ] && [ -c /dev/null ] && rm $rutaDestino && echo "" | tee $rutaDestino > /dev/null 2>&1 )

4) ¿Los agujeros negros existen? ¿existe /dev/null?
Versión 2.0:
# Si existe el fichero lo vaciamos
# Si no existe el fichero, lo creamos vacio para asegurarnos que el contenido es nuevo

cat /dev/null > $rutaDestino


Redios... y estos tios desarrollan software.

sábado, febrero 10, 2007

Navegar y explorar no es lo mismo

Leo en el mundo:
"Además, incluye un explorador de Internet, un diccionario mandarín-inglés y una aplicación de calendario para la gestión de citas."

¿Qué coños es un explorador de Internet? Mal vamos cuando empezamos así.

Además, explorar y navegar no es lo mismo. ¿Acaso puedes navegar la cultura indígena o la jungla? Puedes navegar por Internet pero no explorarlo.

¿Por qué lo utilizan como si fuesen sinónimos? Claro que no son los únicos inútiles dejados llevar por la mierda que usan.

sábado, diciembre 30, 2006

RIP for free

Existen en los kioskos algunas revistas de "seguridad". Muchas de ellas me parecen de auténticos lamers[1].

Hay una revista que murió, que me gustaba, ante todo, la orientación práctica que tenía. Había algunas cosas que, literalmente, apestaban (como un curso de Visual Basic) pero había otras cosas realmente interesantes. Tras su muerte han sacado los PDF (no escaneado, sino el original) para descarga pública gratuita. Os dejo el script para bajaros las revistas:

for i in `seq 1 30` ; do 
wget http://trucosdebian.info/HXC/hxc${i}.pdf
done


Aviso: la nº 6 está incompleta

[1]De la wikipedia: Una persona que alardean de pirata informático, crackers o hackers y solo intenta utilizar programas de fácil manejo realizados por auténticos hackers, sin obtener los resultados que pretendía; incluso llegando a perjudicarse a el mismo.

La chica nueva

Como ya comentaba en el post anterior, han reestructurado el servicio para poder ajustar al presupuesto mi sueldo. Describo el servicio y después la solución: "dos personas por turno que cubrirán las 365 tardes del año". ¡¡¡Genial!!! ¡¡¡Podré tener 6 meses de vacaciones para estar en la playa!!!

Pues eso acabó en trabajar las tardes de lunes a viernes, y los fines de semana y festivos turnarnos las guardias entre todos. Bueno, ahora somos 3 pero tenían que buscar a mi compañero. Yo dije que si iba a ser su responsable quería seleccionarlo yo. Al final las prisas han hecho estragos. Sólo puede entrevistarla una vez ya seleccionada para conocer su nivel. Vamos a obviar su CV, que no lo hubiese cojido pues lo más destacado es que impartió un curso de GNU/Linux ¡¡¡con Mandrake!!!

Éstas fueron mis preguntas:
XiR- ¿Has configurado Apache 2?
Nueva- Sí
X-¿con hosts virtuales?
N-No
X-¿Bases de datos?
N-Oracle
X-¿Has tocado Postgres?
N-No
X-¿Debian?
N-Me la he instalado en casa pero no me funciona
"¿que no te funciona? ¿qué significa no me funciona?"-pensé. Supongo que no podía evitar poner caras.
X-¿Cisco?
N-No
X-¿Postfix?
N-No
Bueno, parece que voy a tener trabajo... sigo con las preguntas:
X-¿Tienes ordenador en casa?
N-Sí
X-¿Cuantos?
Me miró extrañada como pensando: ¿alguien puede tener más de uno?
N-Uno
X-¿Con qué sistema operativo?
N-Está particionado con Windows y Debian (la que no me funciona) y en un vmware tengo una Mandrake
X-¿Tienes PDA?
N-No, pero sí la quiero
X-¿La reflashearías con otro sistema operativo?
N-No
X-¿Tienes consola: Xbox, PS1, PS2?
N-No
X-¿Sabrías cómo se "hackea" alguna de ellas?
N-No.
X-¿Sabes quién Larry Wall?
N-No, ¿quién?
X-Quién desarrollo Perl. ¿Y Alan Cox?
N-No
X-¿Richard Stallman?
N-No
X-¿la Free Software Foundation?
N-No
X-Bien, no tengo más preguntas. Gracias por venir.
N-No te preocupes. Aprendo rápido.

Lo que me preocupaba, realmente, no es que aprenda rápido o lento ya que parecía tener muy buena actitud al respecto. Lo que realmente me preocupaba es que ¡¡¡no le gusta la informática!!!

La empresa y tú

Como ya comentaba en un post anterior, se acabó mi etapa laboral después de 3 años a cargo de la Intranet, DMZ y seguridad de un ministerio. Ha sido un gran paso en mi carrera y llegó el momento de buscar trabajo. Es cuando te replanteas si el CV que tenías te seguirá valiendo y sólo tendrás que añadir esa entrada.

Utilicé Infojobs principalmente, porque ya tenía el CV introducido de hacía unos años. Cuando me dí de alta en otros portales de búsqueda de trabajo y ¡¡¡ví lo pesado que es rellenar todos esos campos!!! Así que me dejé llevar por lo fácil. Aún así estuve de entrevistas durante 15 días con una media de 1,10 entrevistas al día.

El caso es que quería salir de Madrid e irme a vivir a la playa, al sur. Buscando mi tipo de trabajo en Málaga me dí cuenta que por cada uno que encontraba y en el que requerían mucha menos experiencia que la mía (a demás de un sueldo bastante inferior), encontraba 20 para mí (en principio) en Madrid.

Al final seguí en mi compañía aunque en otro cliente y descarté otra empresa que, aunque su proyecto me gustaba mucho, el salario ofrecido era menor. "Si en mi empresa estoy bien y quieres que me vaya contigo, no me dés lo que ya tengo sino que motivame de alguna manera a cambiar", pensé. Así que, si me cambiaba y no era a Málaga, tendrían que "pagarme" una buena razón. Además, parece que no sepan lo de "más vale malo conocido..." (aunque en mi caso no era malo).

Descarté la oferta pero siempre dejando claro que la pega era económica y que lo demás me había gustado. Y así, a los 15 días de haber empezado el nuevo proyecto, me volvieron a llamar contándome que habían reestructurado el servicio para poder pagar lo que pedía.

Así que tras intentar dejar zanjado todos los "miniproyectos" que había empezado, salí de allí con varios amigos hechos y el buen recuerdo de la compañía. De hecho me quedé la tarjeta de acceso al edificio como recuerdo (con permiso suyo) que desactivarán. XD

He descubierto que tratar con profesionales es un placer. Cuando les dices que te ofrecen más en otro sitio y lo entienden como una regla del mercado (que ellos mismos han creado) y no como una ofensa personal... realmente debería ser siempre así, aunque no lo es.

Me duele dejar la compañía porque estaba contento de estar en ella pero trabajamos para vivir (no vivimos para trabajar, Sergio) y necesitamos motivaciones y dinero para alcanzar nuestros sueños (nuestras motivaciones privadas).

Todo esto viene a cuento de un email que he recibido de Miguel en el que me decía que este post en Josep on technology le había recordado a mí.

El día que encuentre una oferta del tipo: "buscamos a ingeniero informático que sepa de Linux, redes y Futurama" me va a faltar tiempo para enviar el CV.

martes, diciembre 19, 2006

Criptionando

Tras comunicar que había implantado una política de copia remota de un export de Oracle los domingos, mi compañero Jorge d.l.C. (que te vaya bien en tu nuevo proyecto) me respondió esto:
Create or replace procedure Buenos_dias
Declare
Saludo:=’Hola Ivan’;
Begin
Dbms_output.put_line(‘lo de copiarlo sólo los domingos ¿es por algo?’);
Exception
when no_data_found
Dbms_output.put_line(‘el remitente pasa de mi cara y no responde’);
when others
Dbms_output.put_line(‘SORRY NEN, yo que sabía’);
End;

Así que, ante su pregunta, tuve que responderle:
6f50 7172 6575 4c20 7561 6172 7020 6569
736e 2061 7571 2065 6e75 2061 6c61 6420
6169 7620 2061 2061 6573 2072 756d 6863
206f 7563 6e61 6f64 7320 2065 6168 6167
6520 7473 206f 6f63 206e 616c 2073 6564
616d 2073 4242 4444 0a2e


Y, el muy "colgado" volvió al ataque:
JUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Pero ya me lo sabía ….

...y es que algunos no tienen solución

domingo, diciembre 03, 2006

Seguro, pero con cabeza

No me parece curioso que en mi nuevo trabajo le den mucha importancia a la seguridad. Es parte de nuestra labor. Llega hasta tal punto que no permiten permitían a los servidores enviar correos. Esto que a algunos os parecerá correcto no es lo ideal, ya que puedes aprovechar la circunstancia para permitir que el servidor os envíe información sobre las tareas automatizadas o, como ya indiqué en el anterior post hay herramientas que utilizan el correo para realizar su labor.

Pero una vez superada la pega, me sigue dando vueltas por la cabeza que segurizan los servicios, pero NO utilizan iptables. Me parece un gran error, ya que configurar TODOS los servicios correctamente supone muchísima concentración y casi más conocimiento ya que cada servicio es un mundo. Además hay servicios que abren puertos para comunicarse consigo mismo y que no se pueden cerrar pues el programa deja de funcionar. Con iptables no existe ese problema porque tu decides cuáles son las máquinas de origen y destino entre otra muchísimas cosas.

Como diría el anuncio: "Empty your mind. Be formless, shapeless. Like iptables. You put iptables into a bottle and it takes care of the bottle hole. You put in a teapot, it becomes the teapot handle. Iptables lets packets flow, or it can crash 'em. Be iptables, my friend!"

domingo, noviembre 26, 2006

Bitacorea o cuenta

Logwatch: analizador de logs modular que se ejecuta cada noche y envía por correo los resultados.

Me gustaría haber podido contar antes cuánto me reí cuando pensaba que en mi anterior trabajo, aunque no estaban realmente cualificados, al menos podrían mantener lo que había: el día a día.

Recibí uno de los últimos días allí un mail de mi ahora ex-jefe diciendo a sus chicos: "Hay que revisar todos los días los logwatch".

Pensé: "creía que el único que los ojeaba era yo. Me alegra ver que han aprendido algo". Plantar una semillita de conociemiento siempre te hacer sentir orgulloso. Seguía el mail: "Hay que asegurarse que llegan 53. Si hay menos, es que alguna máquina tiene problemas. No hace falta leerlos, aunque eso sería la ostia".

Para eso ponte un cron que te envíe un correo diciendo como cuando iban nuestros padres al colegio: "Presente para servirle a Ud. a Dios y a España" y no pierdas horas y horas de proceso en sacar unas estadísticas que ni siquiera piensas mirar.

Por cierto, el orgullo me desapareció de un garrulazo*.

*Acción realizada por un garrulo.

lunes, octubre 30, 2006

Resurrección

Por fín llega a su fín otra etapa laboral de mi vida y ¡¡me vuelve a parecer tan difícil hacer tu trabajo lo mejor posible cuando tiene una fecha de caducidad tu responsabilidad!! Además, aunque lo intentes hacer bien, los fallos que has tenido durante 3 años no son comparables con los que tienes los últimos días, pero no porque sean peores o más graves, sino porque la gente piensa que "pasas".

Da igual si haces oidos sordos al pequeño demonio (daemon) que te recuerda que "sólo te quedan un par de semanas" y luchas agarrando al angelito y atándotelo a la oreja para que te repita constantemente que "debes ser profesional". Cualquier fallo será mal visto.

En cualquier caso sé que lo estoy haciendo tan bien (o tan mal) como antes, pero ahora como ven que se acerca el día en que no puedan pedirme que les solucione X o Y...

Así que estamos de entrevista en entrevista a ver quién me encandila para seguir viviendo en Madrid (puajjjjj). ¡¡¡Maldito$ din€ro$!!!

miércoles, septiembre 27, 2006

Un BOFH aburrido

Aburrido estoy de mis usuarios y programadores, así que, harto de tener que inventarme excusas he encontrado quien las invente por mi. Excusas del tipo:

-Melting hard drives
-BNC (brain not connected)
-no "any" key on keyboard
-NOTICE: alloc: /dev/null: filesystem full
-We already sent around a notice about that.
-had to use hammer to free stuck disk drive heads.
-techtonic stress
-Interference between the keyboard and the chair.
-Suspicious pointer corrupted virtual machine
-pseudo-user on a pseudo-terminal
-Feature not yet implemented
-Maintenance window broken
-Recursive traversal of loopback mount points
-Internet shut down due to maintenance

Y es que toparte con gente que no sabe todo lo que debería te da cierta ventaja a la hora de inventarte excusas. ¿Necesitas un BOFH-excusador? No tienes más que instalar los paquetes fortunes y fortunes-bofh-excuses.

Esto me recuerda a una vez que se había colgado un PC. El típo estaba dado la vuelta hablando por el móvil y yo reinicié a "botonazo" el PC. Arrancó perfectamente. Cuando me preguntó qué le ocurría le dije que "es que había un conflicto con los punteros a IPs, pero que ya lo he arreglado. Quizás vuelva a pasar".

viernes, septiembre 08, 2006

Mayusculeador/Minusculeador

Para pasar todos los nombres de ficheros de un directorio de mayúsculas a minúsculas o viceversa.
Admite 2 tipos de parámetros:
-por defecto pasa de mayúsuclas a minúsculas; para pasar de minúsculas a mayúsculas: -r
-el directorio sobre el que actuar (directorio actual si no se indica nada).

#!/bin/bash
###################################
#
# Copyleft Ivan Eguiguren
# September the 8th, 2006
#
###################################

[ -d "$1" ] && cd $1
[ -d "$2" ] && cd $2
[ "$1" == "-r" ] && MAY=1
[ "$2" == "-r" ] && MAY=1
ls > /tmp/listado1
if [ $MAY ] ; then
tr 'a-z' 'A-Z' < /tmp/listado1 > /tmp/listado2
else
tr 'A-Z' 'a-z' < /tmp/listado1 > /tmp/listado2
fi
join -i -a1 -a2 -o 1.1 2.1 /tmp/listado1 /tmp/listado2 > /tmp/listado3
sed -e 's/^/mv /' /tmp/listado3 > /tmp/listado4
chmod 755 /tmp/listado4
/tmp/listado4
sleep 4
rm /tmp/listado[1-4]

viernes, julio 21, 2006

Sin palabras

From: "Usuario lelo"
To: "Avisos aplicaciones Java"

Asunto: Avería en la impresora de Color del Vicesecretario general técnico.

Ruego toméis nota para llamar al departamento técnico por avería en la impresora de color del Vicesecretario General Técnico despacho nº 123. Muchas gracias


Mensaje directo, escueto y a ¿una dirección aleatoria? Pero ¿cómo se puede ser tan memo?

jueves, junio 15, 2006

Casualidades

Ruiz wrote:

>> Nos comentan una incidencia que se produce en la Aplicación de Consulta
>> de Centros Universitarios (http://tproperez/centrosweb/). Al parecer no
>> se puede acceder desde la calle aunque el acceso desde Vitruvio o desde
>> el CCU no da ningún problema.

Hola:

Pues no sabes qué alegría me das, porque si pudiesen acceder con esa URL
estaría algo mal configurado. Aquí tienes la URL correcta:


Si es que se inventan las cosas y encima ¡¡¡quieren que les funcione!!!

viernes, abril 07, 2006

Integración de SPF en Spamassassin

Introducción.
Spamassassin es un filtro de correo escrito en Perl para identificar spam utilizando multitud de tests heurísticos en las cabeceras de un correo y en el cuerpo del mensaje. Es software libre.

Cómo funciona Spamassassin.
Cuando nuestro servidor de correo recibe un mensaje, se lo envía al demonio de Spamassassin, quien procede a ejecutar una serie de tests sobre él. Cada uno de ellos añade o quita unas pocas milésimas de puntuación a dicho correo. Si la puntuación que asigna un test es positiva, es que tiene cierto parecido con el spam; por contra, si esa puntuación es negativa, es que tiene parecido con correo válido. Así, una vez pasados todos los tests se suman todas las puntuaciones para hallar la puntuación total de dicho correo. Si esa puntuación está por encima de un margen, el mensaje podrá ser marcado como spam, si pasa por encima de un segundo límite, será directamente descartado.

Tanto las puntuaciones como los límites más arriba citados pueden ser configurados y modificados a nuestro antojo.

Cómo funciona SPF
SPF nos permite comprobar mediante una consulta DNS si un servidor está autorizado para enviar correo de un dominio determinado. Para ello el administrador del DNS del dominio remitente debe haber configurado la/s entrada/s correspondiente/s en el servidor DNS de ese dominio. Igualmente el receptor debe haber configurado el servidor que recibe el correo para hacer la consulta DNS. SPF no evita el Spam, sólo asegura que un correo viene de donde dice venir.

Porqué integrar SPF dentro de Spamassassin
Una buena razón es que en lugar de recibir un correo y aceptarlo o directamente descartarlo por su razón SPF, le asignemos una puntuación más y lo tratemos como un test más dentro de SPF.

Cómo integrar SPF dentro de Spamassassin

A partir de la versión 3.0 de Spamassassin es bastante sencillo, ya que viene integrado dentro de Spamassassin. Aún así, habrá que activarlo e instalar el módulo Perl que nos dará la funcionalidad SPF. Para ello instalamos el módulo Perl Mail::SPF::Query. Procedemos a activar el SPF en el Spamassassin, para ello descomentamos en el fichero
/etc/mail/spamassassin/init.pre (path válido para RedHat) la línea:

loadplugin Mail::SpamAssassin::Plugin::SPF

Ahora reiniciando el Spamassassin tendríamos ya el SPF incrustado en el Spamassassin. Sólo nos queda ajustarlo a nuestro gusto. Para ello modificamos las puntuaciones de los tests SPF en
/etc/mail/spamassassin/local.cf añadiendo una línea del tipo:
score SPF_FAIL 5


Reiniciamos de nuevo Spamassassin para que coja los cambios y ya lo tenemos activado.

viernes, marzo 24, 2006

Adivina adivinanza

Programador:

>
> Hola, podeis actualizar las páginas que tenemos en el ftp de producción.
>
> Son las siguientes paginas:
> -Grundtvig2D2b.jsp
> -Grundtvig2D2bm.jsp
> -ariona.jsp
>
> Muchas gracias
> Un saludo

Impresionante. Yo entendí tanto como vosotros:
Hola.

No están sueltas en el ftp de preproducción. Decídme si están en alguna
carpeta en cual. Tampoco sé a qué servidor de producción (y aplicación) hay que subirlo. Por favor, seguid el procedimiento establecido.

Procedimiento que detallamos en una web para deleite de los programadores y tranquilidad nuestra y que no haya listos que manden este tipo de correos. Continúo:
Concluyendo, si lo de arriba es una pregunta a pesar de no tener
interrogantes (vienen de serie en los teclados), la respuesta sería "No".

Final:
Hola,

Las páginas están en el servidor de preproduccionweb.intranet.local, dentro de la carpeta "aplices", para ello hemos utilizado el usuario despliegue. ¿Puedes subir dichas páginas a aplices.moc.com para actualizarlas?

Un saludo


¡¡¡Qué paciencia!!! Pero da sus frutos...

lunes, marzo 13, 2006

Documental sobre el inicio del SPAM

http://atdp.de/spam.avi

Pringao-not HOWTO

Esto es lo que se puede leer en el departamento de bases de datos de mi centro de trabajo.

Lista de precios de servicios (sujetos a modificación, ganas y momento)

Matar algo.................................................................................2€
Crear algo..................................................................................3€
Paquete completo de creación de algo.................................10€
Consultas de “Solo un momentito, de 5 minutos, etc.”........3€
Consultas de “me puedes mirar esto” ...................................5€
Consultas de “me podrías mirar ” ..........................................5€
Consultas de “bueno, ya que estoy aquí” ..............................5€
Consultas de “chicas me podéis mirar esto” .........................3€

Se añadirán suplementos específicos de 2€ a aquellas coletillas como:
"Pues yo no he hecho nada"
"Pues ayer estaba igual"
"Habéis cambiado la versión"
"Pues me da un error de BD"

Todos estos precios en monetario también pueden ser cambiados por emolumentos en especias.
Las más apreciadas en este grupo son:
Cajas de: bombones, pastas y cualquier dulce
Tampoco hacemos asco a cualquier tipo de producto de nuestro país que tenga que ver con el cerdo ibérico de pata negra, tanto sea jamón, lomo embuchado o chorizo.
Los quesos nos gustan todos.
En cuestión de bebidas rogamos que antes nos pregunten porque según que día y hora nuestros cuerpos necesitan diferentes tipos de caldos.

Firmado: El grupo de SBA.

P.D.
Se ruega no regateen ni nos pidan cambio, quedarán mucho mejor si directamente introducen los precios redondeados al alza en nuestra hucha(el servicio se prestará antes y mucho mejor además de la consiguiente sonrisa con la que serán obsequiados nuestros clientes).
Se hacen ofertas a grupos y por temporada.


Amén.

miércoles, marzo 08, 2006

Organización de archivos

Ahí va un script para eliminar de un directorio los archivos más antiguos de X dias y rotar los demás en función de si un fichero o directorio ocupa más de Y megas

#!/bin/bash

#Variables

# Dias que conservamos los ficheros
DAZE=15
# Longitud del fichero
LONG=30
DIR=/logs/
FILE=fichero
SERV=/etc/init.d/servicio

FICH=${DIR}$FILE

#Comprobamos si FICHERO ocupa mas de LONG MB
if [ `du -cms $FICH | tail -1 | cut -f1` -ge $LONG ] ; then

#Paramos el servicio SERV

$SERV stop

#Esperamos 2 minutos (pura precaucion para que el servidor pare)
sleep 120;

# Movemos el fichero

mv $FICH ${FICH}$(date +%d%m%y)

cat /dev/null > $FICH

$SERV start

#Eliminamos los ficheros más antiguos de DAZE dias
rm -f $(find $DIR -ctime +$DAZE)

fi

I+D

Seres sedentarios. Eso es lo que produce esta sociedad. Seres que se pasan el día delante del ordenador o la televsión. Ahora un ratito a un juego, ahora un ratito una serie, ahora un ratito organizando las fotos, otro ratito leyendo el correo...

He tenido "LA IDEA". Utilizar una alfombra de esas de baile para maneja el ordenador, para leer el correo, para organizar las fotos...

Ups...creo que debe estar hasta patentada... no he dicho nada, no he dicho nada.

http://research.microsoft.com/vibe/projects/stepUI.aspx

martes, febrero 21, 2006

Instalar crontab dentro de un chroot

Después de pegarme con el chroot me he topado con un problema: que el usuario chrooteado pueda programar su cron. La solución es bastante simple. Al crear el chroot, debemos meter el comando crontab y un editor de texto (en mi caso el vi).

Desde la raiz del chroot-jail ponemos como root:


# mkdir tmp
# chmod 4777 tmp
# mkdir -p var/spool/cron/
# touch var/spool/cron/nombreusuario
# chgrp nombreusuario var/spool/cron/nombreusuario
# touch etc/cron.deny
# ln -s /var/chroot/nombreusuario/var/spool/cron/nombreusuario /var/spool/nombreusuario



El usuario tendrá que crear un fichero, por ejemplo cron-usuario, y pasárselo de parámetro al comando crontab:


$ crontab cron-usuario



Así, con crontab -l podrá comprobar como esos trabajos quedan listos para que los ejecute cron a la hora prevista.

jueves, febrero 16, 2006

Configuración de una máquina para chroot de usuarios

Creamos una shell:


[root@potito ~]# cd /bin

[root@potito bin]# vi chrootbash

#!/bin/bash

/usr/bin/sudo /usr/sbin/chroot /var/chroot/$USER /bin/bash


Y le damos permisos de ejecución:


[root@potito bin]# chmod +x /bin/chrootbash


Nos aseguramos de que existe el directorio donde vamos a crear los “homes” de los usuarios:


[root@potito bin]# ls -ld /var/chroot

ls: /var/chroot: No existe el fichero o el directorio


Así que lo creamos:


[root@potito bin]# mkdir /var/chroot/


Creamos los usuarios con:


[root@potito bin]# useradd -s /bin/chrootbash -d /var/chroot/usuario usuario


y le asignamos un password:


[root@potito bin]# passwd usuario

Changing password for user usuario.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.


Creamos el árbol de directorios que va a ver:


[root@potito bin]# cd /var/chroot/usuario

[root@potito usuario]# mkdir bin etc dev home lib usr usr/bin

[root@potito usuario]# cd ..

[root@potito chroot]# chown -R usuario:usuario usuario


Y copiamos la línea del fichero passwd del usuario:


[root@potito chroot]# grep usuario /etc/passwd > usuario/etc/passwd

[root@potito chroot]# grep usuario /etc/group > /etc/group


Instalamos los programas a los que queremos que tenga acceso en la cuenta de usuario y las librerías que utilicen:


[root@potito chroot]# cp /bin/bash /var/chroot/usuario/bin/

[root@potito chroot]# ldd /bin/bash

libtermcap.so.2 => /lib/libtermcap.so.2 (0x00689000)

libdl.so.2 => /lib/libdl.so.2 (0x005f8000)

libc.so.6 => /lib/tls/libc.so.6 (0x004cd000)

/lib/ld-linux.so.2 (0x004b4000)

[root@potito chroot]# mkdir usuario/lib/tls

[root@potito chroot]# cp /lib/libtermcap.so.2 /lib/libdl.so.2 /lib/ld-linux.so.2 usuario/lib/

[root@potito chroot]# cp /lib/tls/libc.so.6 usuario/lib/tls/libc.so.6

[root@potito chroot]# cd usuario

[root@potito usuario]# cp /lib/libnsl.so.1 /lib/libnss_nisplus.so.2 /lib/libnss_nis.so.2 /var/chroot/usuario/lib/

[root@potito usuario]# mkdir lib/security

[root@potito usuario]# cp /lib/security/pam_rootok.so /lib/security/pam_warn.so /lib/security/pam_unix.so lib/security/

[root@potito usuario]# mkdir usr/lib

[root@potito usuario]# cp /usr/lib/libcrack.so.2 usr/lib/

[root@potito usuario]# mkdir etc/pam.d

[root@potito usuario]# cp /etc/pam.d/su /etc/pam.d/other etc/pam.d/

[root@potito usuario]# cp /bin/ls /bin/cp /bin/rm /bin/mkdir /bin/rmdir bin/

[root@potito usuario]# ldd /bin/ls /bin/cp /bin/rm /bin/mkdir /bin/rmdir | grep -v ':' | cut -f1 -d'(' | grep -v '=>' | sort | uniq > /tmp/libs

[root@potito usuario]# ldd /bin/ls /bin/cp /bin/rm /bin/mkdir /bin/rmdir | grep -v ':' | cut -f1 -d'(' | grep '=>' | cut -f2 -d'>' | sort | uniq >> /tmp/libs

[root@potito usuario]# for i in `cat /tmp/libs`; do cp $i .$i ; done


Copiamos 'su' y sus librerías:


[root@potito usuario]# cp /bin/su bin/

[root@potito bin]# ldd /bin/su | grep -v ':' | cut -f1 -d'(' | grep '=>' | cut -f2 -d'>' | sort | uniq > /tmp/libs

[root@potito bin]# ldd /bin/su | grep -v ':' | cut -f1 -d'(' | grep -v '=>' | cut -f2 -d'>' | sort | uniq >> /tmp/libs

[root@potito usuario]# for i in `cat /tmp/libs`; do cp -f $i .$i ; done


Editamos sudoers y le autorizamos a hacer sudo poniendo al final del fichero:


[root@potito usuario]# visudo

#chroot

usuario ALL = /usr/sbin/chroot


miércoles, febrero 01, 2006

Re: Utilizando código

Para aprovechar mi trabajo voy a empezar a publicar scripts y truquitos que utilizo en mi dia a dia. El primer script sirve para arrancar, parar y ver el estado de un tomcat, preo es facilmente modificable para manejar cualquier servicio que queráis usar.
#!/bin/bash
#Publicado bajo licencia GPL
#XiR_ @2006

#Declaramos las variables
export LC_ALL=es_ES
export JAVA_HOME=/usr/local/java
export JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=ISO-8859-15 -Duser.language=es -Xms1024m -Xmx2048m"
export ID-TOMCAT=500

#Funcion que intenta parar el tomcat por las buenas y si no lo mata (kill)
#Solo se puede ejecutar por el usuario tomcat (id=500)
matar() {
if [ `/usr/bin/id -u` == $ID-TOMCAT ] ; then
/usr/local/tomcat/bin/shutdown.sh > /dev/null 2>1&
sleep 5
NUM_PROCESOS=`ps -fe | grep tomcat | grep "/usr/local/java/bin/java " | wc -l`
if [ $NUM_PROCESOS -eq 0 ] ; then
echo "Parado correctamente"
else
kill `ps -fe | grep tomcat | grep "/usr/local/java/bin/java " | grep -v grep | cut -c 7-14` > /dev/null 2> /dev/null
sleep 10
kill -9 `ps -fe | grep tomcat | grep "/usr/local/java/bin/java " | grep -v grep | cut -c 7-14` > /dev/null 2> /dev/null
echo "Parado bruscamente"
fi
else
echo "Error: este programa debe ser ejecutado siendo el usuario tomcat."
fi
}

#Funcion que comprueba si se esta ejecutando y si no, lo arranca
#Solo se puede ejecutar por el usuario tomcat (id=500)
arrancar() {
if [ `/usr/bin/id -u` == $ID-TOMCAT ] ; then
ps -fe | grep tomcat | grep "/usr/local/java/bin/java" | grep -v grep > /dev/null 2>&1
if [ $? == "1" ] ; then
/usr/local/tomcat/bin/startup.sh > /dev/null 2>1&
if [ $0 ] ; then echo "Arranque correcto" ; fi
else
echo "Ya esta arrancado. Detengalo antes de intentar arrancarlo."
fi
else
echo "Error: este programa debe ser ejecutado siendo el usuario tomcat."
fi
}

#Funcion que comprueba si se esta ejecutando el tomcat, y de estarlo devuelve su PID
estado() {
sleep 3
ps -fe | grep tomcat | grep "/usr/local/java/bin/java" | grep -v grep > /dev/null 2>&1
if [ $? == 0 ] ; then
PID=`ps -fe | grep tomcat | grep "/usr/local/java/bin/java" | grep -v grep | cut -c 7-14`
echo "Ejecutandose con pid $PID"
else
echo "No ejecutandose"
fi
}


case "$1" in

start)
arrancar
estado
;;
stop)
matar
estado
;;
restart)
estado
matar
sleep 5
arrancar
estado
;;
status)
estado
;;
*)
echo "$0 {start|stop|restart|status}"
;;
esac