tags/sysadminStyXman's globhttp://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/StyXman's globikiwiki2009-06-29T21:47:08Zipsec tcpdump firewallshttp://grulicueva.homelinux.net/~mdione/glob//posts/ipsec_tcpdump_firewalls/2009-06-29T21:47:08Z2009-06-29T21:39:52Z
<p>La red de la empresa es un quilombo. Tenemos la red de la
oficina por un lado, con los desktops en una red privada y los
servers en una red pública (parte de la red pública del edificio
donde está la oficina). Tenemos dos CoLos, uno en Rotterdam
(Verizon; no me pidan comentarios) y otro en Amsterdam (xs4all;
parece que le da housing a la mitad de .nl). En el primero tenemos
tres rangos públicos y al menos dos privados, y en el otro tenemos
sólo un rango público y unos dos o tres privados, incluyendo un
cross-over entre los dos firewalls para hacer fail-over. En
resumen, 5 redes públicas y vayasabersecuántas privadas
desperdigadas.</p>
<p>Para complicar un poco más las cosas, montamos (bueno, yo no
tuve nada que ver, pero ya trabajaba acá) una VPN entre los dos
CoLos, teniendo ambas puntas en los firewalls (sin contar de que
una punta tenemos dos; uno duerme hasta que el otro se cae).</p>
<p>El último ingrediente de esta sopa: graficamos el tráfico con
MRTG (si, ya sé de Munin, ya lo sugerí, pero son como 80 servers en
total) sacando los datos por SNMP (que, como dicen en todos lados,
de simple tiene sólo el nombre). Pero para el caso es simple: un
cliente corre en el server graficador, en este caso en Rotterdam, y
en el nodo a graficar un servidorcito SNMP; el tráfico es por
UDP.</p>
<p>'Bueno, ¿y dónde está la complicación?', se preguntarán. Les
cuento.</p>
<p>Esta gente (notar cómo cuando se mandan una 'cagada' me despego
:-P) tiene unos firewalls implementados a mano en
<code>bash</code>. No es la típica ristra de reglas
<code>iptables</code>, sino algo un poco más elaborado, con
funcioncitas, pero aún así son 1400 líneas de <code>bash</code> y
otras 630 de configuración (en <code>bash</code> también, obvio; no
hay manera más fácil de hacer configuración de scripts
<code>bash</code> que en <code>bash</code> mismo). Ya les comenté
de <code>shorewall</code> también, pero todo a su tiempo.</p>
<p>Entonces me tocó la tarea de poner a andar el SMNP contra los
firewalls de Amsterdam. Parece una boludez, sobre todo porque el
MRTG tiene scripts con los que crear la configuración
automáticamente leyendo lo que hay disponible por el mismo
protocolo (lo diseñadores tuvieron la decencia de ponerle
'descubribilidad'). Por simple que parezca, no andaba
nipatrásnipadelante. Le dimos quichicientas vueltas y náa.</p>
<p>Lo más raro fue cuando empezamos a usar <code>tcpdump</code> en
las interfaces externas de los firewalls. Filtrando por el puerto
161 (<code>snmp</code>), en el firewall de Amsterdam veíamos el
tráfico entrante pero no el saliente. Eso nos llevó a pensar que el
firewall estaba jodiendo, pero entonces vimos que el tráfico que
generaba el gráfico para el otro firewall, el durmiente, hacía lo
mismo: veíamos el request pero no la respuesta. Pero el gráfico
andaba. Y para complicar las cosas, con IPSec andando no deberíamos
ver el tráfico, pues <code>tcpdump</code> no sabe desencriptar esos
paquetes, sino apenas reconocerlos.</p>
<p>Entonces sospechamos.</p>
<p>Probando el <code>tcpdump</code> en el firewall de la red de
Rotterdam vimos un comportamiento simétrico: no veíamos el request
pero si la respuesta. Y sospechamos mas fuerte.</p>
<p>Mirando con mas fuerza me dí con que los scripts de firewall
tenían un par de bugs: la función que seteaba las excepciones para
el firewall mismo no era llamada nunca y además llamaba a
<code>iptables</code> con parámetros erróneos.</p>
<p>La conclusión a la que llegamos, basada únicamente en lo que
pudimos ver, es que el túnel anda, y que IPSec hace cosas raras con
los paquetes; creemos que cuando los termina de procesar un paquete
lo inyecta en la interfaz por la que entró, y eso es lo que hace
que veamos el tráfico para un lado. Algún día que esté muy aburrido
me voy a poner a ver si esta teoría es cierta.</p>
<p><span class="selflink">sysadmin</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../security/">security</a></p>
debian-hal-policykithttp://grulicueva.homelinux.net/~mdione/glob//posts/debian-hal-policykit/2009-05-27T15:33:17Z2009-05-27T15:25:03Z
<p>Since a couple of <code>hal</code> versions
(<code>0.5.12~git20090406.46dc48-1</code>) in Debian Sid, it
stopped using system groups as the method to grant privileges to
users, and started using something called <code>PolicyKit</code>
instead. Just to remember what are we talking about here, a user in
the <code>powerdevil</code> group used to suspend or hibernate his
machine sucessfully. But now Mr. PL is a not-understood monster and
<a href=
"http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg643465.html">
the package does not give a smooth transition</a>. That's what I'll
try to do here.</p>
<p>To make sure this is the problem, let's try to suspend the
machine simply by calling <code>hal</code> through
<code>d-bus</code>. I use <code>qdbus</code> here, found in the
<code>libqt4-dbus</code> package, because it lets me introspect the
dbus interface, but you could use <code>dbus-send</code>
instead:</p>
<pre>
<code>qdbus --system org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Suspend 0
Error: org.freedesktop.Hal.Device.PermissionDeniedByPolicy
org.freedesktop.hal.power-management.suspend no <-- (action, result)
</code>
</pre>
<p>If we edit the file <code>/etc/PolicyKit/PolicyKit.conf</code>
we'll see the empty default config that comes with the package.
According to <a href="http://grulicueva.homelinux.net/usr/share/doc/policykit-doc/html/PolicyKit.conf.5.html">its
documentation</a>, we just need to add a couple of nested
<code><match></code> tags with a <code><return></code>
inside. The outher <code>match</code> will filter the
<code>hal</code> <code>action</code>, the inner one the group, and
the <code>return</code> will grant access.</p>
<p>... we wish! There's no way to match to a group, only to a user.
Ok, the first shot will use the user, then we'll see if we really
can do it.</p>
<p>How do we discover which action we must use? We can use
<code>polkit-action</code> to see what are the available actions.
In the first case,
<code>org.freedesktop.hal.power-management.*</code> will do.</p>
<pre>
<code><match action="org.freedesktop.hal.power-management.*">
<!--match group="powerdev"-->
<match user="mdione">
<return result="yes"/>
</match>
</match>
</code>
</pre>
<p>Now the previous command suspends the machine allright! Next,
removable devices:</p>
<pre>
<code><match action="org.freedesktop.hal.storage.mount-removable">
<!--match group="plugdev"-->
<match user="mdione">
<return result="yes"/>
</match>
</match>
<match action="org.freedesktop.hal.storage.eject">
<!--match group="plugdev"-->
<match user="mdione">
<return result="yes"/>
</match>
</match>
</code>
</pre>
<p>I added the <code>eject</code> action just in case. All this
works fine for my user, but I really liked the group interface. The
complaining about it was that it was too coarse, and now this way
one can grant specific actions in amore fine grained way, but I
think is too fine grained. Unluckly we cannot (ab)use the
<code>define_admin_auth</code> tag to give a similar functionality,
it doesn't work that way (I don't know what way it works
either).</p>
<p>As a final note, see that I used a per-action approach, where
the outer match points to an action. we could use a per-user
approach, where the outer match points to a user:</p>
<pre>
<code><match user="mdione">
<match action="...">
<match action="...">
<match action="...">
</match>
</code>
</pre>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../debian/">debian</a> <span class=
"selflink">sysadmin</span></p>
recuperando-particiones-con-papel-y-lapizhttp://grulicueva.homelinux.net/~mdione/glob//posts/recuperando-particiones-con-papel-y-lapiz/2009-04-17T17:11:48Z2009-04-17T17:11:48Z
<p>El sábado pasado recibo un mail de un chango del laburo con
subject «ayuuuudaaa urgenteeeeee»[sic]. Me dice que estaba
boludeando el viernes a la noche cuando la máquina se quedó primero
sin sonido y luego se tildaba. Cuando la quizo reiniciar no arrancó
más. «dice algo de disco no booteable...».</p>
<p>El lunes caigo como siempre y me voy a verla. Efectivamente,
decía algo de disco no booteable. Booteo con un <a href=
"http://grml.org/">GRML</a> que tengo en un pendrive y descubro que
el disco no tiene particiones.</p>
<p>Pánico.</p>
<p>El tipo está acá haciendo un posdoc en algo astronómico
(literalmente) y todo su laburo está ahí dentro. No hay backups,
como corresponde, así que me preparo a hacer un rescate de
particiones.</p>
<p>En el mismo pendrive tengo un sistema con <a href=
"http://www.gnu.org/software/parted/">parted</a>. Booteo con eso y
trato de usar el rescue del parted. Naranja. Le pregunto cómo eran
las particiones, etc. Me responde que él sólo instaló un Kubuntu
por defecto. Por defecto Kubuntu crea una partición swap y una ext3
para / y eso es todo, lo cual hacía mas fácil lo que estaba por
venir.</p>
<p>Reninicio en el GRML y con <code>hexdump -C /dev/sda |
more</code> me pongo a ver el contenido del diso a pelo. No es la
primera vez que hago malabares con particiones y MBRs, pero antes
lo hacía con una herramienta que creo que a esta ahora está
discontinuada (El programa se llamaba adecuadamente DiskEdit, de
una empresa que lleva el mismo nobre que un vino y que el apellido
del dueño, cuyo nombre es el mismo que el padre en Family Guy, y
que vienen haciendo Utilities para Windows desde que las hacían
para DOS) y que tenía visores especiales para estos sectores y
también editar FATs y un montón cosas útiles... en el universo
M$.</p>
<p>Primero confirmo que, efectivamente, el primer sector es un MBR
(al menos tiene el signature <code>0x55aa</code> en los últimos dos
bytes), y toda la <a href=
"http://en.wikipedia.org/wiki/Mbr#MBRs_and_disk_partitioning">tabla
de particiones</a> está vacía, pero que en el segundo sector parece
haber una copia. Agarro papel y lápiz, transcribo lo que parece
haber, pero al final resulta que no sólo tengo la mitad de los
datos, sino que es una partición muy chica.</p>
<p>Entonces me propongo buscar la partición ext3 a mano. Para ello
tuve que averiguar cómo es que hace un ext3 para saber que la
partición realmente es una ext3 y no cualquier verdura. Sabía que
que sería con un magic, pero no tenía ni idea. Instalé las fuentes
del 2.6.29 en mi laptop y me puse a mirar el código de ext3.
Después de dar bastante vueltas, incluyendo seguir el código que se
ejecuta cuando <a href=
"http://lxr.linux.no/linux+v2.6.29/fs/super.c#L917">montás</a>
<a href="http://lxr.linux.no/linux+v2.6.29/fs/super.c#L779">un</a>
<a href=
"http://lxr.linux.no/linux+v2.6.29/fs/super.c#L357">filesystem</a>
<a href=
"http://lxr.linux.no/linux+v2.6.29/fs/ext3/super.c#L1546">ext3</a>,
donde <a href=
"http://lxr.linux.no/linux+v2.6.29/fs/ext3/super.c#L1614">podemos
ver que usa</a> un <a href=
"http://lxr.linux.no/linux+v2.6.29/include/linux/magic.h#L16">magic</a>[3]
y <a href=
"http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L454">también</a>
la <a href=
"http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L454">estructura
del superblock del ext3</a>, donde vemos que <a href=
"http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L470">el
offset del magic</a> es 0x38.</p>
<p>Entonces el problema de encontrar un ext3 en un disco se reduce
a buscar un 0x53ef (fucking little endian) en la posición 0x38 de
un sector en el disco. Por suerte <code>more</code> tiene para
buscar, así que me siento a buscar toooodas las ocurrencias de
<code>53 ef</code> esperando que la dirección a la derecha termine
con <code>30</code> y que sean el 9no y el 10mo byte de la línea
(maldito 0 based).</p>
<p>Unos cuantos next después, tengo mi primer candidato. Pinta muy
bien, porque además lo estaba comparando con el mismo dump pero del
pendrive (que tengo formateado en ext2, y por suerte ext2 y ext3
comparten todas estas estructuras), y además pude ver algo que
tenía toda la pinta de ser un <a href=
"http://lxr.linux.no/linux+v2.6.29/include/linux/ext3_fs.h#L499"><code>
uuid</code></a>.</p>
<p>Saco que la dirección del magic es <code>0x80731038</code>. A
eso le resto los <code>0x38</code> y me da que el superblock
empieza en <code>0x80731000</code>, un lindo número redondito.
Pasado a decimal me dá el byte <code>2.155.024.384</code>, unos
2GiB desde del comienzo del disco. ¡Pinta muy bien! El swap podría
estar primero, y ser de unos 2GiB.</p>
<p>Arranco un <code>fdisk /dev/sda</code> y al mostrar la tabla
(aún vacía) de particiones me dice que hay <code>16.065</code>
sectores por cilindro*<code>512</code> bytes por sector=
<code>8.225.280</code> bytes por cilindro. Casi todas las distros
(en realidad creo que todas) particionan los discos por
cilindros[1], por lo que si el sector éste está justo al principio
de un cilindro...</p>
<p>Divido <code>2.155.024.384/8.225.280=...</code></p>
<p>(suspenso)[2]</p>
<p><code>262.000124494...</code></p>
<p>¡Damn! Casi lo tenía... Hmm, ¿y cuánto es lo que sobra?
<code>(262.000124494-262)*8.225.280=...</code> ¡<code>1024</code>!
¿Será que...?</p>
<p>Arranco un <code>strace debugfs -R show_super_stats
/dev/sdb1</code> (la partición en mi pendrive) y veo que
¡efectivamente hace un seek de <code>1024</code> bytes dentro de la
partición para leer el superblock!</p>
<p>This is it. Con el 262 en la cabeza arranco <code>fdisk
/dev/sda</code> y creo dos particiones: un swap en los cilindros
1-261 y una linux del cilindro 262 en adelante. Guardo, salgo,
cruzo los dedos y corro un <code>debugfs -R show_super_stats
/dev/sda1</code>. ¡Fail! ¿Qué pasa? Reinicio y pruebo de nuevo, no
vaya a ser que el kernel no haya leído bien la nueva tabla de
particiones. Tampoco. ¿WTF?</p>
<p>Ah, duh, es <code>sda2</code>. Ok, <code>debugfs -R
show_super_stats /dev/sda2</code>... ¡Anda, el muy HDP anda! No lo
puedo creer. Me la juego: <code>fsck -n /dev/sda2</code>.
«Filesystem is clean» Damn, vamos de nuevo: <code>fsck -n -f
/dev/sda2</code>...</p>
<pre>
<code>Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda2 sarasa sarasa...
</code>
</pre>
<p>¡Intacto! Pero el MBR no tiene un grub, así que hago el habitual
proceso de reinstalar Grub, reinicio...</p>
<p>Bootea perfecto, y termina en un hermoso login. Satisfecho, me
doy unas palmaditas en la espalda, cargo mis cosas y comienzo el
fin de semana.</p>
<p><span class="selflink">sysadmin</span> rescue</p>
<hr />
<p>[1] ... desperdiciando unos 8MiB entre el MBR y la primera
partición</p>
<p>[2] Los perspicaces se darán cuenta al toque que eso no puede ni
a ganchos dar entero.</p>
<p>[3] Son muy graciosos los magics de Reiser. Parece haber
iniciado una moda que ahora usan los AdOlEsCeNtEs.</p>
dnsmasqhttp://grulicueva.homelinux.net/~mdione/glob//posts/dnsmasq/2009-01-22T04:24:04Z2008-09-29T19:25:40Z
<p>Esto capaz es una boludez, pero buéh...</p>
<p>En uno de mis laburos (ahora tengo 3) tenemos un server que da
DHCP y DNS a una red interna, un Debian Etch con
<code>dnsmasq</code>. El punto es que <code>dnsmasq</code>
concentra muy bien estos dos servicios, haciendo muy simple el
poder resolver nombres de máquinas que tomaron su IP dinámicamente
por DHCP. Esto se logra haciendo que el cliente mande un nombre de
máquina, y según el ip que le asigna agrega una entrada de DNS.
Para el entorno donde estoy trabajando esto viene de pelos.</p>
<p>También toma DNS del <code>/etc/hosts</code>. El problema es que
si en la entrada del <code>127.0.0.1</code>, además del típico
<code>localhost</code> y/o <code>localhost.localdomain</code>
(puaj) hay otro nombre de máquina, y está primero, antes que
ninguna otra máquina, esa entrada queda en el DNS. Así, si desde
dentro de la red preguntás por el nombre del servidor, el DNS
responde que <code>127.0.0.1</code>. Parrafraseando a un famoso
personaje de una serie televisiva: “D-oh!”.</p>
<p><span class="selflink">sysadmin</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../dnsmasq/">dnsmasq</a></p>
trac-me-tiene-los-eggs-llenos-toma-2http://grulicueva.homelinux.net/~mdione/glob//posts/trac-me-tiene-los-eggs-llenos-toma-2/2009-01-22T04:24:04Z2008-09-09T00:17:05Z
<p>¿Se acuerdan de <a href=
"http://grulicueva.homelinux.net/~mdione/glob/posts/trac-me-tiene-los-eggs-llenos/">
la primera parte</a>? Bueno, venía aplicando esto varias veces
últimamente (nuevamente tracs y nuevamente plugins). Sé que
<a href="http://john.lenton.com.ar/2008/05/26/easy-install-without-virtualenv-implies-hard-maintenance/">
mi jefe me va a retar</a>, pero la verdad es que lo prefiero así.
Generalizé esa idea y lo hice un script, y para marcar su
diferencia con el <code>easy_install</code>, lo llamé
<code>useful_install</code>:</p>
<pre>
<code>#! /usr/bin/python
__requires__ = 'setuptools==0.6c3'
import sys
path= sys.argv.pop (1)
sys.path.append (path)
sys.argv= [sys.argv[0], '--install-dir', path, '--site-dirs', path ]+sys.argv[1:]
from pkg_resources import load_entry_point
sys.exit(
load_entry_point('setuptools==0.6c3', 'console_scripts', 'easy_install')()
)
</code>
</pre>
<p>Como verán es idéntico al <code>easy_install</code>, salvo que
el primer parámetro es el directorio donde vamos a instalar las
cosas y que hace la magia necesaria de agregarlo al
<code>sys.path</code> y armar los argumentos para <code>e_i</code>.
Además, le podemos pasar más parámetros a voluntad y pasan derecho
al <code>load_entry_point</code> del <code>e_i</code>. Que lo
disfruten.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../trac/">trac</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../python/">python</a>
<span class="selflink">sysadmin</span></p>
trac-con-mercurial-en-etchhttp://grulicueva.homelinux.net/~mdione/glob//posts/trac-con-mercurial-en-etch/2009-01-22T04:24:04Z2008-07-18T01:09:46Z
<p>Desde hace como dos semanas que vengo esporádicamente peleando
con un problema: Tenía que poner a andar el plugin de Mercurial
para Trac. Según <a href=
"http://trac.edgewall.org/wiki/TracMercurial">las instrucciones de
la página</a>, sólo es cuestión de generar un <code>.egg</code>
(<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/posts/trac-me-tiene-los-eggs-llenos/">¿se acuerdan?</a>),
ponerlo en el directorio <code>plugins</code> del environment y ya.
Pero corriendo <code>tracd</code> y entrando con un browser me
daba:</p>
<pre>
<code>TracError: Unsupported version control system "hg"
</code>
</pre>
<p>Mi primer sospechoso era el <code>.egg</code>; creía que no lo
estaba encontrando. Prendiendo el logging en el
<code>trac.ini</code> descubrí que en realidad si lo levantaba.
Siguiendo un par de links encontré una sugerencia de correr todos
los imports que corre el <code>backend.py</code> del plugin.
Finalmente descubrí que la línea:</p>
<pre>
<code>from mercurial.revlog import LookupError
</code>
</pre>
<p><a href=
"http://trac.edgewall.org/ticket/7346#comment:6">fallaba</a>. Se vé
que el Mercurial que viene en Etch (0.9.1-1+etch1) no es del todo
compatible, a pesar que la página del plugin dice que lo es,
inclusive hasta con 0.8. Para "repararlo" simplemente saué las (1)
referencias a <code>LookupError</code>.</p>
<p><a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../trac/">trac</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../mercurial/">mercurial</a> <span class=
"selflink">sysadmin</span></p>
ntp-ntpdatehttp://grulicueva.homelinux.net/~mdione/glob//posts/ntp-ntpdate/2009-01-22T04:24:04Z2008-07-10T20:34:23Z
<p>En la oficina tenemos un server que entrega <code>nfs</code>;
también tenemos mucha gente que compila cosas. Estos dos parámetros
hacen que tener sincronizadas las horas de las máquinas sea una
necesidad. Pra esto se pueden usar los paquetes
<code>ntpdate</code> (para on-time-sync) y <code>ntp</code> (para
keep-in-sync). Hoy estuve revisando bien como interactúan ambos,
sobre todo al momento del booteo. antes una descripción de qué hace
cada uno.</p>
<p><code>ntp</code> se encarga de mantener la hora de la máquina
mas-o-menos sincronizada con la de una fuente externa. Si llega a
haber cierta diferencia, se encarga de ir acomodando la hora de a
poco, para que el sistema no sufra por cambios bruscos. Un problema
que tiene es que si la diferencia con la referencia externa es muy
grande, <code>ntp</code> no es capaz de salvar las diferencias y
entonces ''no hace nada''. <code>ntpdate</code> se encarga
simplemente de setear incondicionalmente la hora local según la
hora que consiga de esta referencia externa. El escenario ideal
sólo haría uso de <code>ntp</code>, pero en general se podría usar
también <code>ntpdate</code> para máquinas con el reloj
para-el-carajo, como parece ser el caso de al menos una de nuestra
máquinas.</p>
<p>El tema es que, por defecto, <code>ntpdate</code> utiliza un
archivo de configuración de <code>ntp</code>, pero a su vez corre
despúes de éste, en cuya condición falla pues el puerto UDP que usa
ya está en uso por <code>ntp</code>. Desinstalando <code>ntp</code>
nos deja sin el archivo de configuración, y en realidad tiene
sentido quedarnos con él.</p>
<p>La solución que encontré es simplemente hacer un symlink al
script de <code>ntpdate</code> en <code>/etc/network/if-up.d</code>
a un nombre anterior al de <code>ntp</code> (por ejemplo,
<code>mntpdate</code>). Voy a ver si en debian/ubuntu me dan pelota
con lo de ponerles mejor orden que simplemente el nombre.</p>
<p><span class="selflink">sysadmin</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../ubuntu/">ubuntu</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../debian/">debian</a></p>
sarge-etch-3http://grulicueva.homelinux.net/~mdione/glob//posts/sarge-etch-3/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Hoy llegué a la oficina con la idea de que algunos
<code>trac</code>s aún no andaban. Resultó que la auth contra LDAP
no estaba lista. Encontré que esta configuración si andaba:</p>
<pre>
<code> AuthLDAPURL ldap://ldap.except.com.ar/ou=People,dc=except,dc=com,dc=ar
Require valid-user
</code>
</pre>
<p>Mientras que esta otra no:</p>
<pre>
<code> AuthLDAPURL ldap://ldap.except.com.ar/ou=People,dc=except,dc=com,dc=ar
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off
Require group cn=except,ou=Group,dc=except,dc=com,dc=ar
</code>
</pre>
<p>Resulta que ahora tenés que avisarle que <a href=
"http://www.linux.com/feature/120050">el grupo lo tiene que buscar
en el LDAP</a>:</p>
<pre>
<code> Require ldap-group cn=except,ou=Group,dc=except,dc=com,dc=ar
</code>
</pre>
<p><span class="selflink">sysadmin</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../apache/">apache</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../ldap/">ldap</a></p>
apache-como-wrapper-de-sslhttp://grulicueva.homelinux.net/~mdione/glob//posts/apache-como-wrapper-de-ssl/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>Hoy me tocó hacer una negrada marca cañón. Resulta que tenemos
un <a href="https://beetroot.except.com.ar/xarope/">Xarope</a>
andando. En la arquitectura de Xarope tenemos un Apache que nos
hace de frontend a todos los sitios Zope que corren en los
DomU's.</p>
<p>El tema es que estaba poniendo a andar en uno de los DomU's un
repo <a href=
"http://www.selenic.com/mercurial/wiki/">Mercurial</a>, el cual
corre detrás de un <a href="http://www.lighttpd.net/">lighty</a>.
Ponerlo a andar no fue muy duro, salvo que no sabía mucho ni de uno
ni del otro. Cuestión que llegué al punto en que podía hacer un
<code>hg clone</code> para bajarme una copia del repo, mas no hacer
un <code>push</code>. Acá es donde se ponía peluda la cosa.</p>
<p>El problema es el siguiente: para que las passwds no anden
volando en cueros tenía que poder acceder al repo por
<code>https</code>. Ahora, repiensen el esquema: tengo un Apache al
que le llegan los pedidos <code>https</code>, el que a través de un
<code>Rewrite</code> forwardea el pedido al Lighttpd corriendo en
otra máquina (virtual, pero no viene al caso). Por razones casi
obvias forwardear de un 443 a un 443 no anda. ¡Pero resulta que si
el forward es al 80 si!</p>
<p>Es decir, el Apache recibe <code>https</code>, y cuando
forwardea el pedido, lo hace en <code>http</code> plano. Esto
responde a mi pregunta "¿Comocatzo vamos a hacer cuando los
usuarios de Zope pidan acceso por <code>https</code>?". La única
contra que le veo a este setup es que el sitio final (sea un Zope o
un repo Mercurial) no sabe si el acceso viene con SSL o no.</p>
<p><span class="selflink">sysadmin</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../lighttpd/">lighttpd</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../apache/">apache</a>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../ssl/">ssl</a> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../mercurial/">mercurial</a>
<a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../xarope/">xarope</a></p>
dapper-feisty-IIhttp://grulicueva.homelinux.net/~mdione/glob//posts/dapper-feisty-II/2009-01-22T04:24:04Z2008-07-04T23:29:16Z
<p>hoy finalmente hicimos el doble salto mortal en nuestras 11
máquinas. he aquí un reporte.</p>
<p>una de las máquinas volvió a tener el hipo de hwdb-client* que
no podían instalarse por lo que comenté en el post anterior. el
tema es que el truco de hacer dpkg -i hwdb-client* no funcionó
poruqe hwdb-client a secas iba a ser removido luego de ser
instalados los otros. para salir del paso, hubo que recurrir a la
fuerza bruta:</p>
<pre>
<code>dpkg --force-depends -P hwdb-client
</code>
</pre>
<p>en otra no anduvo porque no se pudo instalar python-central.
sólo hubo que darle otra vielta por dselect antes de hacer la
manganeta con dpkg. cabe aclarar que si bien todas son *buntus, la
mayoría son ubuntus, hay una que otra kubuntu, y en general cada
una tiene un montón de paquetes instalados para satisfacer las
necesidades de aquellos que alguna vez la usaron.</p>
<p>ya a la cuarta máquina a la que le hacía el upgrade me sabía de
memoria qué hacer cuándo y dónde. se volvió tan aburrido que en un
momento dado estaba upgradeando 5 máquinas a la vez. el vinito del
mediodía le puso un poco de pimienta al asunto.</p>
<p>salvo algunos detalles con una placa de video via k8m890 todo
salió a la perfección. creo que esta pirueta no habría salido si no
fuera por debian y ubuntu. estoy seguro que en alguna otra distro
no debian-based aún estaría renegando.</p>
<p><span class="selflink">sysadmin</span> <a href="http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/../ubuntu/">ubuntu</a></p>