sorry, I am not aware of any such thing

Ayer ya casi de las 5 pm ocurrió un “chistoso” incidente. Un developer me solicitó acceso a uno de los servers de development. Todos los servers utilizan ldap como servidor de autenticación, así que si este developer necesitaba acceso, lo que tenía planeado era “agarrar” el ldif de otro ldap server y pasarlo al ldap server que está en development.

Solo para hacer un poco de plática con este developer (que voy a mantener su identidad anónima por el bien de el) entablé la siguiente conversación con el por IM:

(16:41:30) Dan: yo
(16:41:41) Dan: question, do you have an account to either qa or perf?
(16:42:13) developer_anonimo: when you say “an account”, what do you mean
(16:42:35) Dan: username and password to login through ssh to any of the QA or Perf servers
(16:42:42) developer_anonimo: i want to know if this dev box is like SVN or something…
(16:43:01) developer_anonimo: no, i have never got an account created for myself for QA or Perf
(16:43:06) Dan: ok
(16:43:46) developer_anonimo: i am also trying to figure out if thsi is like a SVN repository
(16:44:34) Dan: I would ask to whoever told you that if you need ssh access or if this is accesible by an url
(16:44:41) developer_anonimo: i have svn access for (project_name)
(16:44:50) developer_anonimo: ok, let me tell you what I need to do
(16:45:02) developer_anonimo: I need to view code adn close bugs that have been raised on the User INterface
(16:45:08) developer_anonimo: so, I need to be able tomake changes to the code
(16:45:32) developer_anonimo: my boss asked me to work on this…and X-person with whom I am co-ordinating does not know much about whether or not this is SVN or whatever
(16:47:08) Dan: ah, then ssh access
(16:47:14) developer_anonimo: ok
(16:47:17) developer_anonimo: and what is SSH
(16:47:27) developer_anonimo: sorry, I am not aware of any such thing

Que que?! Le comenté esto a un compañero sysadmin y me dice:

(16:52:27) Jim: oh my!
(16:53:01) Jim: tell him its like “ascii remote desktop”

En fin, un día más de trabajo :)

Red Hat, Fedora Servers Compromised

Pues si, por triste que sea, la noticia lo dice todo.

http://linux.slashdot.org/linux/08/08/22/1341247.shtml

“In an email sent to the fedora-announce mailing list, it has been revealed that both Fedora and Red Hat servers have been compromised. As a result Fedora is changing their package signing key. Red Hat has released a security advisory and a script to detect potentially compromised openssh packages.”

#linux_mx @ irc.freenode.net

Hoy andaba preguntando con los HHH participantes del canal de #linux_mx @ irc.freenode.net cuanto tiempo teníamos en el canal, y parece que andamos cerca de un año ya. En este canal hay mucha mas actividad y plática que en los casi extintos #unixmexico y #linux.mx.

Si, somos bastante irreverentes, pero también hablamos de cosas interesantes (de vez en vez, no se emocionen, no es diario), pero bueno, la invitación aquí está, pasen a darse una vuelta.

Cómo implementar OpenLDAP

Pero para comenzar, empecemos por el principio.
- Que es LDAP?
LDAP (Lightweight Directory Access Protocol) es un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP también es considerado una base de datos (aunque su sistema de almacenamiento puede ser diferente) a la que pueden realizarse consultas.

- Y entonces, que es OpenLDAP?
Se trata de una implementación libre del protocolo que soporta múltiples esquemas por lo que puede utilizarse para conectarse a cualquier otro LDAP.

Tiene su propia licencia, la OpenLDAP Public License. Al ser un protocolo independiente de la plataforma, varias distribuciones Linux y BSD lo incluyen, al igual que AIX, HP-UX, Mac OS X, Solaris, Windows (2000/XP) y z/OS.

OpenLDAP tiene tres componentes principales:

* slapd - demonio LDAP autónomo.
* syncrepl - opción para replicar ldap
* Rutinas de biblioteca de soporte del protocolo LDAP.
* Utilidades, herramientas y clientes.

- Cómo lo instalo y como lo configuro?
Este howto se va a enfocar a como instalar OpenLDAP y cómo configurarlo en CentOS ya que es la distribución que utilizo en mis servidores.

La instalación es trivial

yum install openldap openldap-clients openldap-servers

Esto como superusuario.

Para usuarios novatos siempre resulta útil enterarse de que archivos instaló yum, para dar un vistazo a los paquetes que instaló yum se puede hacer con un

rpm -ql openldap
rpm -ql openldap-clients
rpm -ql openldap-servers

El siguiente paso es crear un directorio en donde OpenLDAP va a guardar su base de datos

mkdir /var/lib/ldap/auth
chown ldap.ldap /var/lib/ldap/auth
chmod 700 /var/lib/ldap/auth

Enseguida se copia el siguiente archivo y se modifica el nombre

cp /usr/share/doc/openldap-servers-2.4.8/DB_CONFIG.example /var/lib/ldap/auth/DB_CONFIG
Se ejecuta el siguiente comando (de nuevo, si)
chmod -R 700 /var/lib/ldap/auth && chown ldap.ldap /var/lib/ldap/auth

Ahora tenemos que crear la contraseña que el usuario administrativo va a utilizar para modificar y conectarse a OpenLDAP, esto se hace con el siguiente comando en la línea de comando:

slappasswd
New password:
Re-enter new password:
{SSHA}xXxXxXxXxXxXxXxXxXxXxXxXxXxXx

Guarda el output de este comando pues se va a tener que agregar en el archivo de configuración de OpenLDAP.

El siguiente paso es editar el archivo de configuración de OpenLDAP el cuál está en
/etc/openlda/slapd.conf

Es preferible que la comunicación entre los hosts y el servidor de LDAP sea a través de un canal seguro, en este caso vamos a utilizar TLS.

En el archivo de configuración (/etc/openldap/slapd.conf) se debe de configurar de la siguiente manera:

TLSCACertificateFile /var/lib/ldap/cert/ca-bundle.crt
TLSCertificateFile /var/lib/ldap/cert/yoda.pem
TLSCertificateKeyFile /var/lib/ldap/cert/yoda.pem

Para que esto funcione, se tiene que hacer lo siguiente

cd /etc/pki/tls/certs
make yoda.pem
{Contesta las línes con la información pertinente}

mkdir -pv /var/lib/ldap/cert
mv /etc/pki/tls/certs/yoda.pem /var/lib/ldap/cert/
mv /etc/pki/tls/certs/ca-bundle.crt /var/lib/ldap/cert
chown -R ldap.ldap /var/lib/ldap/cert
chmod -R 700 /var/lib/ldap/cert

El siguiente paso es configurar el dominio y el usuario que tendra acceso administrativo a esta instancia de OpenLDAP, esto se hace en la siguiente sección:

database bdb
suffix "dc=mi_nombre_de_dominio,dc=com"
rootdn "cn=admin,dc=mi_nombre_de_dominios,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw secret
rootpw {SSHA}xXxXxXxXxXxXxXxXxXxXxXxXxXxXx
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/lib/ldap/auth

Esto debe de ser suficiente para tener una configuración de OpenLDAP completa y segura.

Ahora, para iniciar el servicio
/etc/init.d/ldap start
Configuramos el servicio para que cada que el sistema sea reiniciado ldap inicie
chkconfig --level 345 ldap on

Puesto que configuramos a OpenLDAP para utilizar conexiones seguras, nos debemos de asegurar que el puerto adecuado no está siendo bloqueado por nuestro firewall.

Primero, solo para re-confirmar que OpenLDAP está escuchando en el puerto requerido se puede confirmar con un

netstat -luntp | grep 636
Debes de ver un output como este:

[root@yoda ~]# netstat -luntp| grep 636
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 2450/slapd
tcp 0 0 :::636 :::* LISTEN 2450/slapd
[root@yoda ~]#

Por preferencia personal, recomiendo deshabilitar SELinux, puedes verificar si SELinux está activado con el siguiente comando:

[root@yoda ~]# sestatus
SELinux status: disabled
[root@yoda ~]#

Si tu sistema tiene SELinux activado recomiendo editar el archivo

vim /etc/selinux/config
y modificar la siguiente linea que está como:
SELINUX=enforcing
por
SELINUX=disabled

Una pregunta que puede surgir es, como diantres supe en que puerto está escuchando ldap?

Hay muchas maneras de saber esto:

netstat -a| grep -i ldap
cat /etc/services | grep -i ldap

El siguiente paso es poblar nuestro servidor de OpenLDAP, para hacer esto haremos uso de los migration tools scripts. Estos scripts lo que hacen es crear una serie de OU’s para nuestro servidor de OpenLDAP.

Localiza el archivo migrate_common.ph, edítalo con vim y busca la sección:
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "padl.com";
# Default base
$DEFAULT_BASE = "dc=padl,dc=com";

Y modifícalo para que despliegue los valores de tu dominio.
Una ves modificado este archivo, ejecuta el siguiente perl script de la siguiente manera:

./migrate_base.pl > /tmp/base.ldif

En las líneas comentadas de este perl script vemos que lo que hace es generar “# LDIF entries for base DN”
.
Si te das un minuto para darle un vistazo a /tmp/base.ldif vas a ver que es lo que generó el script migrate_base.pl

La pregunta es “Porque LDIF?” Según la man page de ldif, esto es:

DESCRIPTION
The LDAP Data Interchange Format (LDIF) is used to represent LDAP entries and change
records in text form. LDAP tools, such as ldapadd(1) and ldapsearch(1), read and write
LDIF entry records. ldapmodify(1) reads LDIF change records.

This manual page provides a basic description of LDIF. A formal specification of LDIF is
published in RFC 2849.

Que traducido es (saludos Billy!):

DESCRIPCION
El LDAP Formato de Intercambio de Información (LDIF) es utilizado para representar entradas de LDAP
y modificar campos en modo texto. Las herramientas LDAP, cómo ldapadd(1) y ldapsearch(1), leen y escriben
archivos LDIF. ldapmodify(1) lee cambios a realizarse con LDIF.

Este manual provee una descripción básica de LDIF. La norma formal de LDIF esta publicada en el RFC 2849.

Para importar este ldif (/tmp/base.ldif) lo puedes hacer desde la consola con un:

ldapadd -a -D 'cn=admin, dc=tu_dominio, dc=com' -h localhost -f /tmp/base.ldif

Una vez que tienes poblado tu OpenLDAP server con los OU’s básicos puedes comenzar a agregar entradas. Para fines de probar tu servidor vamos a crear un usuario de prueba:

En tu consola ejecuta el siguiente comando:
vim usuarioTest

dn: cn=usuarioTest, ou=Group, dc=tu_dominio,dc=com
gidNumber: 900
description: Usuario Test
objectClass: top
objectClass: posixGroup
cn: usuarioTest

dn: uid=usuarioTest, dc=tu_dominio,dc=com
sn: usuarioTest
userPassword:: e01ENX1NamFMMitHOElDVlF5ZGVyMlR1RHJRPT0=
loginShell: /bin/bash
uidNumber: 900
gidNumber: 900
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
uid: usuarioTest
cn: Usuatio Test
homeDirectory: /home/usuarioTest

Para agregar a este usuario a tu servidor ldap puedes usar ya sea ldapbrowser o lo puedes hacer desde la consola. Para hacerlo desde la consola puedes hacer un

ldapadd -a -D 'cn=admin, dc=tu_dominio, dc=com' -h localhost -f /tmp/usuarioTest.ldif

Hasta aquí solo hemos hablado de como instalar y configurar OpenLDAP, ahora vamos a ver cuál es la utilidad de usar OpenLDAP como servidor de autenticación.

Por la parte de OpenLDAP no hay nada que hacer si ’solamente’ queremos utilizarlo como un servidor de autenticación, lo que tenemos que hacer ahora son unas pequeñas modificaciones a nuestros hosts (o clientes) para decirles que cuando un usuario trate de logearse al sistema, haga un query al servidor OpenLDAP.

Hay 2 maneras “sencilla” de lograr esto:

1. Utilizando system-config-authentication
2. Utilizando authconfig-tui
3. Modificando los siguientes archivos
- /etc/ldap.conf
- /etc/nsswitch.conf
- /etc/pam.d/system-auth

Para los pasos 1 y 2 puedes ver las siguientes imágenes:

o

O checa el video (y si, lo se, está chafa, pero sirve creo yo)

auth

Para el paso 3 esto es lo que se tiene que modificar

/etc/ldap.conf

# The distinguished name of the search base.
base dc=example,dc=com

por

# The distinguished name of the search base.
base dc=mi_dominio,dc=com

y

uri ldap://127.0.0.1/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5

por

uri ldaps://172.16.11.100/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5

/etc/nsswitch.conf

# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis

passwd: files
shadow: files
group: files

por

# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis

passwd: files ldap
shadow: files ldap
group: files ldap

/etc/pam.d/system-auth

Solo voy a pegar mi archivo system-auth modificado, van a poder ver lo que modifiqué.

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so

account required pam_unix.so broken_shadow
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so

session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so

Y con esto, guardan los archivos y listo! Su host está configurado para utilizar OpenLDAP como servidor de autenticación. Recuerdan esa cuenta de usuarioTest que creamos a la mitad del documento? Bueno, ese usuario NO está creado localmente en nuestro host, pero si hacemos un
id usuarioTest
finger usuarioTest

[root@centos ~]# id usuarioTest
uid=900(usuarioTest) gid=900(usuarioTest) groups=900(usuarioTest)
[root@centos ~]# finger usuarioTest
Login: usuarioTest Name: usuarioTest
Directory: /home/usuarioTest Shell: /bin/bash
Never logged in.
No mail.
No Plan.
[root@centos ~]#

Voial’a! Vemos que la información del usuario está ahí! Esto es porque el host está haciendo un query al servidor OpenLDAP. Ahora, que pasa cuando haces un ssh al host con las credenciales del usuarioTest, deberías poder logearte, a mi me aparece esto:

[dan@centos ~]$ ssh usuarioTest@host_usando_openldap_como_auth_server
usuarioTest@centos’s password:
Last login: Thu Jul 31 11:19:17 2008 from otro.host.de_mi_red.com
Could not chdir to home directory /home/usuarioTest: No such file or directory
-bash-3.1$

Esto es porque el usuario no tiene un directorio en /home en este host, la manera de solucionar esto es

1. Creándo el /home/usuarioTest a mano
o
2. Modificando /etc/pam.d/sshd y agregándo al final una línea como esta:

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

Trata de logearte de nuevo al sistema, y verás algo cómo esto:

[dan@centos ~]$ ssh usuarioTest@host_usando_openldap_como_auth_server
usuarioTest@centos’s password:
Creating directory ‘/home/usuarioTest’.
Last login: Fri Aug 8 08:38:26 2008 from otro.host.de_mi_red.com
[usuarioTest@centos ~]$

Listo! Ahora configura tus demás hosts para que utilicen OpenLDAP como su servidor de autenticación.

Los temas a ver a continuación van a ser

- Limitando al usuario a logearse a determinados hosts
- Configurando OpenLDAP con replicación
- Configurando OpenLDAP para funcionar también como libreta de direcciones

Ejemplos útiles para utilizar OpenLDAP

Al comenzar a escribir mi OpenLDAP-howto-ayuda-guía, inicié por donde la mayoría de los howto’s-guías-documentos comienzan, y esto es por
1. Una definición
2. Hablar de su historía
3. Cómo instalarlo
4. Cómo configurarlo
5. Ejemplos útiles

Para el momento que el lector está por el número 3 ya está cansado y quiere llegar a algo mas substancial y concreto. Entonces lo que yo voy a tratar de hacer en estos párrafos es explicar cómo utilizar un servidor de OpenLDAP como servidor de autenticación.

El ejemplo es el siguiente:

Supongamos que tenemos un conjunto de 20 linux hosts a los cuáles un grupo de usuarios necesita acceso. Si fuera un solo usuario con la necesidad de acceso a todos estos hosts, no resultaría tan “difícil” crear su cuenta de usuario en esos 20 hosts.

Pero que pasa cuando tenemos 30-40 usuarios que necesitan acceso a esos 20 hosts? Aquí es donde podemos hacer uso de OpenLDAP. Cuando creamos la cuenta de un usuario en el servidor OpenLDAP y además configuramos un host para que utilice a OpenLDAP como su servidor de autenticación, no hay necesidad de crear la cuenta del usuario manera local en el host o hosts que el usuario o usuarios quieren accesar. Una imagen dice más que mil palabras:

Esto quiere decir que cuando creámos la cuenta de usuario en OpenLDAP este automáticamente tiene acceso a todos estos hosts (tomando en cuenta que los configuramos para que usen OpenLDAP como su auth-server). Y obvio, cuando eliminamos la cuenta del usuario en OpenLDAP, automáticamente pierde su acceso a todos estos hosts.

Pero que pasa cuando solo quiero darle acceso a un usuario a un determinao host o grupo de hosts? Esto también se puede configurar en OpenLDAP y solo se necesitan modificar 2 líneas más en el host en /etc/ldap.conf.

Supongamos que queremos que el usuarioTest solo puede conectarse a s2.linux, s4.linux y s5.linux, esto se logra cuando modificamos 2 líneas extras en /etc/ldap.conf y cuando en nuestro servidor OpenLDAP agregamos al host en el ou=hosts y le decimos que usuarios tiene permiso para conectarse.

La otra pregunta es: un usuario tiene la posibilidad de cambiar su password cuando está conectado a cualquier host? La respuesta es “si”. Esto se hace modificando el servidor OpenLDAP y agregando unas cuantas líneas, esto para que cuando el usuario este logeado a cualquier host, solo tenga que teclear “passwd” y list, puede cambiar su contraseña.

El último ejemplo es: que pasa cuando mi servidor OpenLDAP deja de funcionar por alguna razón? Bueno, lo primero que va a suceder es que los usuarios no van a poder conectarse a los hosts, al ingresar su username el sistema simplemente se va a congelar, puesto que

1. El usuario ve el mensaje de login:
2. El ususario teclea su nombre de usuario
3. El host recibe esa petición y trata de conectarse a la ip del servidor de OpenLDAP
4. El host no recibe respuesta inmediata del servidor OpenLDAP y se queda “esperando”
5. Después de varios minutos se recibe un “unable to login”

Aquí es donde configurar un segundo servidor OpenLDAP como servidor de replicación es muuuuy útil. También voy a cubrir el tema de cómo configurar un servidor de OpenLDAP con replicación.

Hasta el momento estos son los ejemplos útiles que me vienen a la mente, si alguien tiene en mente algo más que piense que es útil, déjame un comentario y voy a tratar de agregarlo a mi howto-guia-documento.

Downtown Chicago

Downtown Chicago

F2

Después de la emoción del lunes por la mañana, no me podía imaginar que algo más interesante ó emocionante fuera a ocurrir durante el día.

El lunes por la tarde era el último partido de baseball de la temporada de mi chiquillo, me pude salir en punto de las 5 de la oficina para llegar a ver un poco más de la mitad del partido. Lástima, el partido lo perdimos por una carrera, pero mi chiquillo es el “slugger” del equipo; 4 carreras anotadas y 5 carreras impulsadas en 5 turnos al bat, nada mal.

Después de partido, las fotos, las porras, las despedidas, un mini-convivio que duró hasta aprox las 8 de la noche. Ya para este entonces todos estábamos cansados y listos para ir a casa.
Durante todo el día el cielo estuvo nublado, hizo bastante calor y la humedad estaba creo yo al 100%, la temperatura al momento de terminar el partido parece que estaba en los 85F.

Del campo de baseball a la casa serán apróximadamente 15 minutos en carro a una velocidad de 30-45 mhp, así que no nos queda muy lejos; cuando estábamos a 3-4 minutos de llegar a la casa, el cielo se puso negro, negro, negro, comenzó a soplar muchísimo viento y a llover tremendamente. En la mañana había escuchado el pronóstico del tiempo y habían dicho que para en la noche había la posibilidad de “fuertes tormentas”. En el mismo momento que la lluvía y el viento comenzó, escuche la sirena de alerta de tornado de la ciudad donde vivo (o debería llamarle pueblillo?, es una ciudad pequeña) y dije “chispas! a ver si llego a la casa”, en menos de un minuto la visibilidad era casi 0, la lluvia tupía duro sobre el parabrisas y el viento hacía imposible ver mas alla de un par de metros de frente. En ese momento prendí el radio para ver que decían y para sorpresa mía el anuncio era “las sirenas de alerta de tornado están activadas en los siguientes lugares, X, X, X, XXX, inmediatamente busquen refugio y alejense de los árboles”, diantres! es donde yo vivo!!!
Mi temor en ese momento fue que un arbol nos fuera a caer encima, los árboles se mecían cual pajas de debiluchas cuando les pega una brisa. La otra cosa que me impresionaba en ese momento no se si eran los relámpagos y el sonido de ellos, en mi vida había escuchado algo así, tantas veces y tan cerca :-/

Mi otra preocupación es que mi esposa venía en el otro carro, lo único “bueno” es que no viene sola, venía con mi cuñada, pude comunicarme por teléfono con ella y le dije que se estacionara enfrente de una gasolinera que está cerca de nuestra casa y no se moviera hasta que la tormenta bajara de intensidad.

De alguna manera lográmos llegar a la casa, me enfile en el “driveway”, osease el caminito que lleva a la cochera y estacioné el carro exactamente frente a las escaleras de la casa, no sabía si quedarme dentro del carro o correr dentro de la casa, de cualquier manera, parecía que estábamos en medio de lo mas fuerte de la tormenta. Agarré a Josué y le dije “no me sueltes!”, corrimos los 30-40 pasos que hay entre donde dejé estacionado el carro hacía la puerta de la casa, con bastante nerviosismo saqué las llaves y trataba de abrir la puerta, diantres! tristes llaves! Porque no dejan de temblar en mis manos! Ah no, lo que está temblando son mis manos :)

Ya dentro de la casa nos sentámos en un rincón de la casa, Josué y yo teníamos una botella de agua y una lámpara, ese era nuestro kit de supervivencia. Después de unos 10-15 minutos la tormenta comenzó a bajar de intensidad. Desde el momento que llegamos a la casa estábamos sin electricidad, así que todo estába a obscuras, para este momento ya eran aproximadamente las 9:15 - 9:20 de la noche, no me acuerdo exactamente de la hora. Mi esposa y mi cuñada llegaron a la casa aprox a las 9:45, temblorosas y mojadas.

Di una mini vuelta al jardín y vi que varias ramas de tamaño considerable habían caído de los árboles que tenemos, pero a nuestros vecinos les fue peor, árboles arrancados de raíz, carros volteados, postes de luz por el suelo.

Después de pasar la noche sin electricidad y después de haber recibido otra tormenta a las 12:20 am, el martes por la mañana sali a dar una vuelta más para ver los daños. No me gusta exagerar pero nuestra zona parecía zona de desastre. Cuando iba manejando rumbo a la estación del tren para ir al trabajo, la escena era la misma, árboles caídos por todos lados, arrancados de raiz, postes de luz por el suelo y no había electricidad por ningún lado. Por la tarde el anuncio fue oficial, un tornado de nivel F2 fue lo que impacto el pueblillo/ciudad donde vivo. :-/
Cuando iba en el carro pude tomar unas cuantas fotos, aquí se las dejo para que las vean porque como dicen, una imagen dice más que mil palabras.

La del lunes & tcpdump

Los escritores de nuestro sitio utilizan un MT (Movable Type) que está más manoseado que un jitomate en un puesto de verduras en mercado público.
El problema? nuestros escritores no podían “logearse” a MT (que acá entre nosotros lo llamaos de cariño “ncms).
Paso 1. trato de ir al url para desplegar la página de login — todo parece estár bien puesto que me aparece el diálogo donde me pide que ingrese mi nombre de usuario y contraseña.
Al ver que la página de login si despliega me muestro un tanto incrédulo al reporte de que “nadie puede logearse”

Paso 2. Ingreso mi nombre de usuario y contraseña para verificar que todo está bien, clikeo “login” y mi browser solo comienza a esperar .. esperar … esperar …. esperar ….. esperar …… esperar …….

Ok, ok, puede que haya algo mal, inicio una sesion ssh al servidor, todo ok.

Paso 3. Checo que apache esté funcionando con el famoso ps aux | grep httpd, todo ok … mhhhh

Paso 4. A ver los logs, tail -f /var/log/httpd/access_log y /var/log/httpd/error_log … todo se ve bien! … mmmhhhh

Paso 5. Recargo la página de inicio de “ncms” mientras veo los logs, ahí aparece mi ip, ok, hasta aquí bien, ingreso mi username & password, veo la petición en access_log y ah! un error en error_log, veamos, se queja de que está llamando un script

Paso 5. Verifico que el script está donde MT cree que está y si, efectivamente ahí está, verifico permisos, apache tiene permisos para ver el script … mmmmmhhh, curioso, muy curioso …

Paso 6. No puedo descartar que otro usuario haya hecho algo (aunque solo somos 2 los que tenemos acceso al server) y comienzo a checar /var/log/secure, /var/log/messages, /var/log/kernel mmhhh, todo bien por aquí …

Paso 7. Porque diantres MT manda ese error cuando le doy click a “login”

Paso 8. Checo que la conexión a la base de datos está bien, desde le host donde está instalado MT hago un simple mysql -u usuario -p -h db_host, me pide la contraseña, todo bien, ya estándo conectado a la BD le digo un use cms; ok, todo bien, show tables; todo bien, mmmhhh curioso!!!

Paso 9. Ya tengo más de 4 terminales abiertas a estas alturas solo para este pequeño problema (esto sin contar las veintitantas ventanas que deje abiertas de toda la actividad de la semana pasada, aquí es donde tener 2 pantallas planas de 21″ es realmente bueno), pero bueno, lo que hago es un tail -f /var/log/mysql/query-log mientras le doy click a “login” … nada raro por estos rumbos

Paso 10. Para estas alturas estoy pensando en reiniciar apache pero esto sería una salida rápida a mi problema y posiblement eno solucione nada, puesto que apache, sus config files, mt y todo lo demás se ve bien.

Paso 11. Recargo la página de “login” de ncms y digo “ok, voy a poner un nombre de usuario y contraseña inválida”, lo hago, click en “login” … aahhh!!! error inmediato! La página no se queda esperando y esperando! mmhhh? Porque con credenciáles inválidas regresa un error inmediato y con credenciales válidas se queda en la lela?

A estas alturas ya más de 5 personas están fastidiando y preguntando “que pasa con MT?!” … Y para colmo de los colmos, un developer me dice “oye, sabes que pasa con la versión de DEVELOPMENT de MT?” … 2 minutos después de regañarlo y decirle que me deje de fastidiar preguntándome que pasa con DEV MT, voy al url de nuestra versión de development de MT y curiosamente DEV MT tiene exactamente el mismo problema que PROD MT …. mmmhhhh, hora de usar tcpdump para ver que pasan en las tripas de la conexión.

Un simple
[root@MT SERVER ~]# tcpdump -ni ‘any’ port 80
me dice que al momento de hacer click al botón de login el servidor trata de “contactar” a 204.9.177.33 …. mmhhh, esa ip NO es de mi network block, ok … veamos …

[root@server1 ~]# ping 204.9.177.33
PING 204.9.177.33 (204.9.177.39) 56(84) bytes of data.

espero … espero …. espero …… espero ……..

Nada! De quién diantres es esa ip?

whois 204.9.177.33
[Querying whois.arin.net]
[whois.arin.net]

OrgName: SIX APART LTD
OrgID: SAL-48
Address: 548 Fourth St

City: San Francisco
StateProv: CA
PostalCode: 94107
Country: US

Paso 12. Ok, si MT insiste en ir a esa ip, lo más “decente” es bloquearle el acceso, cómo hacemos esto? Con un simple :
iptables -I OUTPUT -d 204.9.177.33 -j REJECT

Paso 13. Voial’a! Al hacer click al botón de login de MT puedo logearme al sistema sin ningún problema.

Paso 14. Parece que MT tiene una “opción de phone home” .. para que? no se, eso se lo dejo a los developers. Pero la moraleja? Cuando todo lo demás falla, tcpdump es una herramienta muuuy útil.

Splish Splash @ Millenium Park - Downtown Chicago

Mas en http://xti.informatux.net
Mas en http://xti.informatux.net

Cuando la vida va rapido, mas vale fijarse en donde pisa uno, no sea que se resbale y caiga.

Blogeando desde las 7:30 am en sabado :-/

Debe de haber algo mal con esto. Blogeando desde tan temprano, y en sabado! Resulta que la clase en el gimnasio al que asiste mi esposa es los sabados a las 8 am, diantres! Me tengo que levantar para llevarla al gimnasio, la ventaja de todo esto? Aqui a la vuelta hay un Starbucks, entonces despues de dejarla en el gym, me doy una vuelta rapido por el auto lavado, le doy su aspirada y lavada al carro (no me tardo mas de 15 minutos) y estoy de regreso en el starbucks con un cafe y blogeando. Una vez que la cafeina comienza a hacer efecto mis dedos no pueden detenerse de teclear, la inspiraci’on de la cafeina ha llegado!

Next Page »