tags/sysadmin StyXman's glob http://grulicueva.homelinux.net/~mdione/glob//tags/sysadmin/ StyXman's glob ikiwiki 2009-06-29T21:47:08Z ipsec tcpdump firewalls http://grulicueva.homelinux.net/~mdione/glob//posts/ipsec_tcpdump_firewalls/ 2009-06-29T21:47:08Z 2009-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-policykit http://grulicueva.homelinux.net/~mdione/glob//posts/debian-hal-policykit/ 2009-05-27T15:33:17Z 2009-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 &lt;-- (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>&lt;match&gt;</code> tags with a <code>&lt;return&gt;</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>&lt;match action="org.freedesktop.hal.power-management.*"&gt; &lt;!--match group="powerdev"--&gt; &lt;match user="mdione"&gt; &lt;return result="yes"/&gt; &lt;/match&gt; &lt;/match&gt; </code> </pre> <p>Now the previous command suspends the machine allright! Next, removable devices:</p> <pre> <code>&lt;match action="org.freedesktop.hal.storage.mount-removable"&gt; &lt;!--match group="plugdev"--&gt; &lt;match user="mdione"&gt; &lt;return result="yes"/&gt; &lt;/match&gt; &lt;/match&gt; &lt;match action="org.freedesktop.hal.storage.eject"&gt; &lt;!--match group="plugdev"--&gt; &lt;match user="mdione"&gt; &lt;return result="yes"/&gt; &lt;/match&gt; &lt;/match&gt; </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>&lt;match user="mdione"&gt; &lt;match action="..."&gt; &lt;match action="..."&gt; &lt;match action="..."&gt; &lt;/match&gt; </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-lapiz http://grulicueva.homelinux.net/~mdione/glob//posts/recuperando-particiones-con-papel-y-lapiz/ 2009-04-17T17:11:48Z 2009-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> dnsmasq http://grulicueva.homelinux.net/~mdione/glob//posts/dnsmasq/ 2009-01-22T04:24:04Z 2008-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-2 http://grulicueva.homelinux.net/~mdione/glob//posts/trac-me-tiene-los-eggs-llenos-toma-2/ 2009-01-22T04:24:04Z 2008-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-etch http://grulicueva.homelinux.net/~mdione/glob//posts/trac-con-mercurial-en-etch/ 2009-01-22T04:24:04Z 2008-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-ntpdate http://grulicueva.homelinux.net/~mdione/glob//posts/ntp-ntpdate/ 2009-01-22T04:24:04Z 2008-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-3 http://grulicueva.homelinux.net/~mdione/glob//posts/sarge-etch-3/ 2009-01-22T04:24:04Z 2008-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-ssl http://grulicueva.homelinux.net/~mdione/glob//posts/apache-como-wrapper-de-ssl/ 2009-01-22T04:24:04Z 2008-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-II http://grulicueva.homelinux.net/~mdione/glob//posts/dapper-feisty-II/ 2009-01-22T04:24:04Z 2008-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>