mod_autoindex de apache

mod_autoindex es un módulo de apache que nos permite mostrar un listado de archivos y directorios de un directorio cuando no hay un fichero index predeterminado (o si bien queremos mostrar este listado y obviamos este index).

La documentación de este módulo, puede encontrarse en: http://httpd.apache.org/docs/1.3/mod/mod_autoindex.html

A continuación pongo un ejemplo de un archivo .htaccess que añade una cabecera y un pie al listado, además, añade descripción a los distintos archivos:

Opciones (convertir iconos en parte del link, que coja anchos de las descripciones de forma automática y muestre primero las carpetas y luego ordene por fecha de modo que los archivos más recientes se encuentren al final):

IndexOptions +IconsAreLinks
IndexOptions NameWidth=* DescriptionWidth=*
IndexOptions +FoldersFirst
IndexOrderDefault Ascending Date

Añadir descripciones a los ficheros:

AddDescription "Instrucciones de instalación del programa" LEEME.txt
AddDescription "Aplicación" aplicacion.tar.gz

Añade una cabecera (en lugar de: Index of diretory/)

HeaderName cabecera.html

Añade el pie de página

ReadmeName LEEME.txt

Lo bueno de este sistema es que podemos integrar el diseño de nuestro sitio (y más si usamos CSS) con el listado de archivos predeterminado de apache.

Manejando OpenSSL

Cosillas útiles que dejo aquí para referencias posteriores:

Crear una llave privada RSA de 1024 bits sin cifrar por contraseña (para que sea más fácil trabajar con ella, si se quiere cifrar añadir -des3 y -out llaveprivada.key sin el > llaveprivada.key)

openssl genrsa 1024 > llaveprivada.key

Generar un certificado X509 de 999 días de validez usando la llave privada generada anteriormente

openssl req -new -x509 -days 999 -key llaveprivada.key -out certificado.crt

ó

openssl x509 -req -days 999 -in server.csr -signkey server.key -out server.crt

Crear un .pem a partir de llave y certificado (yo los concateno a mano estos ficheros, aunque se puede hacer con openssl pasando varios parámetros).

cat llaveprivada.key > certificado.pem
cat certificado.crt >> certificado.pem

Pasar de PEM (.PEM) a PKCS12 (.P12)

openssl pkcs12 -export -in certificado.pem -out certificado.p12

Al revés (por si hace falta convertir un p12 a .pem)

openssl pkcs12 -in certificado.p12 -out certificado.pem

Links externos:

Mi odisea con el código de meneame.net

Como conseguir que funcione el codigo de meneame.net en un hosting bastante capado (sin textutils, sin encoding, soporte para idiomas, etc).

Este mini-resumen presupone que sabes tocar mínimamente el código PHP, que has leído la guía de instalación y que sabes que es un sistema de promoción de noticias.

He conseguido después de una hora de andar trasteando (es la primera vez que instalo el software de meneame) que funcione bien e incluso forzar para publicar una noticia.

Leer más

Conflicto: No usar svn + mod_evasive

Cuidado, me he dado cuenta mirando el log de errores de mi apache2, tan contento como estaba con mod_evasive (lo había configurado con muy pocas páginas para que si una araña de spam accedía muy rápido a esta web o bien una araña de M$ que también gasta mucho ancho de banda se les prohibiese el acceso).

Problema: Si usas SVN (mod_dav, mod_svn…) te prohíbe el acceso, el motivo es evidente: Demasiadas peticiones cuando el repositorio es minimamente grande.

Podía leer una línea en el log que decía:

[Tue Oct AA XX:YY:ZZ BBCC] [error] [client X.Y.Z.T] client denied by server configuration: /AAA/BBB/CCC

He probado a quitar el mod_evasive y bingo! ya no hay un 403 PROPFIND (porque no estoy detrás de ningún proxy ni nada).

Si tengo que prescindir de algo, creo que de mod_evasive y ya intentaré configurar en QoS o con iptables lo que necesite o incluso mirando que más opciones tiene el propio mod_evasive.

Es debido a que mod_svn recibe muchas peticiones de un cliente (para sincronizar el repositorio), con lo que si está configurado para permitir pocas paginas por minuto, te bloqueará el acceso.

Desconozco si se puede filtrar por directorio o hacer alguna configuración distinta para donde tengas montado el svn.

Usando mod_rewrite para redireccionar subdominios

En este caso hace algún tiempo, me pidieron un .htaccess que mediante el uso de mod_rewrite permitiera que cualquier subdominio (por ejemplo: http://cualquiercosa.serhost.com) apuntase a una carpeta del dominio (ejemplo: http://serhost.com/pruebas/).

El motivo para hacer esto era que tenían un script que querían que fuese usado por todos los subdominios, imaginémonos un foro y que según el subdominio eligiese una base de datos u otra (para que fuese un foro de una u otra cosa). Las modificaciones al script de un foro (de un phpbb por ejemplo) son bastante reducidas (modificar un poco el config.php y poco más para según el subdominio hacer una u otra cosa).

De este modo la actualización del script en caso de un fallo de seguridad, sólo tendría que hacerse una vez y además no tendrías que tener múltiples copias del mismo script ocupando espacio.

A continuación el como lo hice…

Leer más

Cómo obtener las secuencias de escape para acentos, eñes, etc

Nada más fácil (lo he probado en java), existe un comando de consola que te permite hacerlo: native2ascii.

Hay muchas otras soluciones mejores o peores: (cambiando la codificación, usando buffers de bytes, etc)

Para usar native2ascii, ir a la consola e invocar ese comando, tecleear cualquier texto y pulsar enter, en caso de caracteres acentuados o eñes los cambiará por sus correspondientes secuencias de escape).

https://ant.apache.org/manual/OptionalTasks/native2ascii.html (ya no funciona el enlace)

Como añadir OpenID a tu dominio

Esta es la explicación de como añadí openid a mi dominio sin tener que montar un «servidor de openid», primero: openid es un sistema de identificación global, buscad más información en la wikipedia en inglés. Es útil para que alguien se identifique usando una URL, de modo que se demuestra ser el propietario de dicha URL, la autenticación se realiza en dos pasos: Primero se mete el usuario en el sistema o web que soporta openid en el que te quieres identificar y después tecleas tu contraseña en la web donde se ejecuta el servidor de openid, devolviendo éste una «sesión» a la web donde te querías autenticar (muy a grosso modo es ésto, pero mira una explicación detallada en la web oficial del proyecto: http://www.openid.net)

Leer más