miércoles, 28 de diciembre de 2011

Cherokee, instalación y acceso a la configuración en debian squeeze

   Uno de los últimos trabajos que me han mandado trata sobre este servidor web. Lo he realizado junto con un compañero de clase, José Luis Martín, y he decidido hacer varias entradas sobre este servidor, ya que a nosotros nos costo encontrar información sobre el.


1 - Introducción al servidor web CHEROKEE

    Cherokee es un servidor web ligero multiplataforma, que nace con el objetivo ser una moderna alternativa a pesados y desfasados servidores como Apache.
    Es software libre con licencia GPL y se adapta con facilidad tanto a sistemas con variación de carga de trabajo como autónomos y empotrados.
    Su diseño es un híbrido que combina las características de servidores basados en sockets no bloqueantes con las de servidores basado en hilos, en busca de obtener beneficios de ambos modelos y minimizar los aspectos negativos.
    Básicamente, su funcionamiento es el de un servidor que procesa varias peticiones en cada uno de sus hilos. Estos hilos ni se crean ni se destruyen, se generan cuando arranca el servidor y permanecen vivos hasta que termina su ejecución.
    En su implementación, se ha puesto especial interés en la velocidad, flexibilidad y capacidad de ser empotrado.
    Soporta las siguientes tecnologías entre muchas otras: FastCGI, SCGI, PHP, CGI, SSI, TLS, conexiones seguras cifradas SSL, sitios virtuales, balanceo de carga, Streamming y diversos métodos de autenticación.
    En la página web del proyecto ( http://www.cherokee-project.com/downloads.html ) tenemos siempre disponible la última versión del código fuente comprimido y a través de subversión, listo para ser compilado, y de las últimas versiones compiladas (binarios) para diferentes distribuciones.
    Si optamos por utilizar los binarios (forma más rápida y sencilla) es preferible descargarlos desde la web, ya que la versión que alberga los repositorios de nuestra distribución suele ser más antigua.

 

2 - Instalación del servidor web

    La instalación de cherokee en debian, es un instalación sencilla, como casi todo. Lo primero que tenemos que instalar es MySQL.
# apt-get install mysql-server mysql-client

    Una vez instalado, solo tenemos que instalar cherokee.
# apt-get install cherokee

    Con esto ya podemos ver, si entramos en “http://localhost”, que cherokee esta funcionando.
    Por ultimo, la instalación nos crea la carpeta /etc/cherokee/ , que es donde se encuentra la configuración de cherokee y /var/www/ que es donde esta alojada la pagina por defecto.

3 - Configuración básica del servidor web.

    Cherokee nos ofrece una interfaz web para poder administrarlo. Para poder entrar en dicha pagina, primero tenemos que desde el servidor ejecutar el comando cherokee-admin. Si la administración es desde otra maquina tendríamos que poner la opción -b seguido de la dirección Ip de dicha maquina. En mi caso, lo yo lo estoy haciendo desde la 10.0.0.128, así que nos quedaría una cosa así.
# cherokee-admin -b 10.0.0.128

Login:
User: admin
One-time Password: PyOZABC5anyBqG5W

Web Interface:
URL: http://localhost:9090/


    Tras la ejecución del comando nos dice un usuario y contraseña, y nos dice que es en el puerto 9090. Si insertamos en nuestro navegador y ponemos “http://Ipdelservidor:9090”, nos aparecerá un cartel para que ingresemos un usuario y contraseña.

    Tras meter el usuario y contraseña que nos facilito anteriormente, le damos a aceptar y entramos en el menú principal.

   Con esto llego a el fin de la primera entrada dedicada a cherokee. Más adelante publicare algunas cosas mas complejas sobre este servidor web como pueden ser la autenticación o la ejecución de php.


Mas sobre cherokee:

Cherokee, instalación y acceso a la configuración en debian squeeze

Cherokee, creación de un virtualhost

Cherokee, ejecución de scripts PHP.

CHerokee, autentificación digest

jueves, 1 de diciembre de 2011

Apache, autenticación por maquina, basic y digest



    Empezando la semana de examenes, estoy repasando y que mejor manera de repasar que explicando. Buenos en este caso voy a explicar como restringir el acceso por maquina y por usuario en apache.

Restricciones por maquina.
    Empezaremos con las restricciones por maquina. Yo para probarlo sin tener que reiniciar apache cada vez que se hace un cambio, estoy poniendo las restricciones en el archivo .htacces de la pagina de pruebas. No olviden que para que el fichero .htacces, el cual se encuentra en el directorio donde se encuentra la pagina, funcione, tiene que esta activado en la configuración de la pagina. En mi caso le di todos los permisos “AllowOverride All”.

    La primera opción es la de Order, con la cual se define el orden en el que se miran lo permitido y lo denegado. Después irían Allow, que son las maquinas permitidas y Deny, lo denegado. Voy a poner un par de ejemplos:

    En el primer ejemplo, el Order determina que primero se mira lo permitido y despues lo denegado. En este caso si permites una en el Allow y lueg la dniegas con el Deny, esa ip sera denegada, por el orden de comprobación. En este ejempo no podría entrar nadie, ya que primero se le permite la entrada a la ip “10.0.0.128” y después de le deniega a todo. Si intentamos entrar nos saldra un bonito error “403 Forbidden”
# cat /var/www/prueba/.htaccess
Order Allow,Deny
Allow from 10.0.0.128
Deny from all

    En este ejemplo el Order esta definido al contrario, por lo que solo podremos entrar con la ip “10.0.0.128”.
# cat /var/www/prueba/.htaccess
Order Deny ,Allow
Allow from 10.0.0.128
Deny from all

    Por lo que veis es bastante fácil. Todo depende del orden en el que se miren lo permitido y lo denegado. Por ejemplo si queremos permitirle el acceso a todo el mundo menos a dos o tres direcciones primero se permite y luego se deniega.

    En estos campos se pueden poner ip tanto ipv4 como ipv6 con o sin mascaras. También se pueden poner nombres de dominios. Si queremos poner mas de una ip se separarían por espacios.

Restricciones por usuarios.
    El servidor web Apache tiene muchas maneras de autenticarse: kerberos, pam, radius, mysql, psql... . Yo voy a a explicar las dos mas básicas basic y digest.

Autenticación basic.
    Esta autenticación guarda los usuarios y sus contraseña encriptadas en un archivo. Los usuarios y contraseñas se tienen que ir metiendo uno a uno. Este modulo de apache viene activado por defecto. Para utilizarlo en nuestra pagina añadiremos las siguientes lineas al fichero .htaccess.
# cat /var/www/prueba/.htaccess
AuthType basic
AuthName “Identifiquese”
AuthUserFile “/etc/apache2/auth_basic”
Require valid-user
    Bueno estas opciones quieren decir:
  1. Le especificamos que es autenticación básica.
  2. Este sera el mensaje que nos aparecerá al pedir la contraseña.
  3. Esta es la ubicación del fichero con los usuarios y sus contraseñas.
  4. Le indicamos que requiere un usuario valido. También se podría poner uno o varios usuarios poniendo por ejemplo “Require user juan, jose, maria”.

    Si queremos combinar este tipo de acceso con el que vimos antes podemos añadirle la opción “Satisfy”. Esta puede tener dos valores all/any, para que se tengan que cumplir las dos restricciones utilizaremos “all”, para que con que se cumpla una nos baste “any”.

    Por ultimo, para crear el fichero utilizamos el comando “htpasswd”. La primera vez que lo utilicemos tenemos que ponerle la opción -c, para que cree el archivo. Creariamos el usuario de la siguiente manera:
# htpasswd -c /etc/apache2/auth_basic juanlu
New password:
Re-type new password:

    Como veis nos pedirá la contraseña. Si queremos añadir otro usuario no le pondremos la opción -c.

    Si ahora intentamos acceder a nuestra pagina nos saldrá algo como esto:





 
Autenticación digest.
    La autenticación tipo digest soluciona el problema de la transferencia de contraseñas en claro sin necesidad de usar SSL. El procedimiento, como veréis, es muy similar al tipo básico pero cambiando algunas de las directivas y usando la utilidad “htdigest” en lugar de “htpassword” para crear el fichero de contraseñas. El módulo de autenticación necesario suele venir con Apache pero no habilitado por defecto. Para habilitarlo:
# a2enmod auth_digest
# /etc/init.d/apache2 restart

    En este caso el fichero .htaccess nos quedaría así:
# cat /var/www/prueba/.htaccess
AuthType Digest
AuthName "grupo1"
AuthUserFile "/etc/apache2/auth_digest"
Require valid-user

    En este caso en la primera opción ponemos digest en vez de basic. La directiva AuthName en este caso no especifica el mensaje que nos saldrá, si no el dominio al que pertenecen los usuarios. Este seria mas o menos algo parecido a un grupo. Las otras dos opciones no hace falta que las explique.

    En este caso, como dije antes, no se utiliza el comando “htpasswd”. Esta vez los usuarios y dominios se agregan de la siguiente manera:
# htdigest -c /etc/apache2/auth_digest grupo1 juanlu
Adding password for juanlu in realm grupo1.
New password:
Re-type new password:

    Si intentamos acceder a nuestra pagina nos saldrá un cartel parecido al anterior.

 
    Cuando estéis comprobando tener cuidado con la cache de los navegadores, pueden hacer que te lleves un rato pensando porque no te pide autenticación.

    Por ultimo decir que esto también se puede aplicar a archivos. Si intentamos descargar o ver ese archivo nos pedirá usuario y contraseña. El archivo .htaccess nos quedaría así:
# cat /var/www/prueba/.htaccess
<Files "prueba.txt">
AuthType Digest
AuthName "grupo1"
AuthUserFile "/etc/apache2/auth_digest"
Require valid-user
</Files>


lunes, 28 de noviembre de 2011

DDNS y DHCP en debian squeeze amd64.


1 – Introducción. 
   Según wikipedia:
   DHCP (sigla en inglés de Dynamic Host Configuration Protocol - Protocolo de configuración dinámica de host) es un protocolo de red que permite a los clientes de una red IP obtener sus parámetros de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va asignando a los clientes conforme éstas van estando libres, sabiendo en todo momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién se la ha asignado después.

   Domain Name System o DNS (en español: sistema de nombres de dominio) es un sistema de nomenclatura jerárquica para computadoras, servicios o cualquier recurso conectado a Internet o a una red privada. Este sistema asocia información variada con nombres de dominios asignado a cada uno de los participantes. Su función más importante, es traducir (resolver) nombres inteligibles para los humanos en identificadores binarios asociados con los equipos conectados a la red, esto con el propósito de poder localizar y direccionar estos equipos mundialmente.


2 – Escenario.
   Suponemos que vamos a instalado en nuestro servidor al cual llamaremos gary un servidor DNS caché que da servicio a los ordenadores de nuestra intranet y además actúa como servidor maestro (master) de un dominio DNS (infoasir.net), de forma que todos los equipos de la red local tengan un nombre DNS completo o FQHN (Full Qualified Host Name). Por otra parte, tenemos instalado en gary un servidor DHCP para que asigne direcciones IPv4 únicas a los equipos de la red local y les facilite el resto de parámetros necesarios para que tengan conectividad y salida a Internet.

    Las características del servidor DNS serán:
  • El nombre del servidor DNS para la zona infoasir.net sera nuestro servidor, es deir, gary.infoasir.net (registro NS).
  • En un primer momento el único nombre que resuelve nuestro servidor será el suyo propio, gary.infoasir.net, que corresponde a la dirección 192.168.2.1

    Las características del servidor DHCP instalado serán:
  • Tiempo de concesión: 1 mes
  • Rango de direcciones: 192.168.2.100 - 192.168.2.150
  • Puerta de enlace: 192.168.2.1
  • Servidores DNS: 192.168.2.1

3 – Instalación de los servicios.
    Los primeros pasos son de la instalación del servidor dhcp y dns
# aptitude install dhcp3-server
# aptitude install bind9

4 – Configuración del dns.
    Una vez instalados pasamos a la configuarción de cada uno de ellos. Empezaremos con el servidor dns.

    El primer archivo que vamos a modificar es el named.conf. En el incluiremos dos archivos que no estaban incluidos "/etc/bind/bind.keys" y "/etc/bind/rndc.key". También añadiremos una clausula de control. Nos quedaria de esta manera:
# cat /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/bind.keys";
include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};

    El próximo archivo es el “/etc/bind/named.conf.local” en el cual agregaremos las zonas. También incluiremos el archivo “/etc/bind/zones.rfc1918 ”. Que impedirá que preguntemos a los servidores dns raiz por ip privadas. Si ha los archivos de las zonas no le ponemos ruta, lo intentara leer por defecto de la ruta “/var/cache/bind9. Este archivo nos quedara con la siguiente forma:
# cat /etc/bind/named.conf.local
include "/etc/bind/zones.rfc1918";
zone "infoasir.net" {
type master;
file "db.infoasir.net";
allow-update { key rndc-key; };
notify yes;
};
zone "2.168.192.in-addr.arpa" {
type master;
file "db.2.168.192";
allow-update { key rndc-key; };
notify yes;
};

    Ahora vamos a crear las zonas que definimos en el paso anterior. El primero corresponde a la zona inversa. Los archivos tienen que tener el nombre que le definimos en el paso anterior.
# cat /var/cache/bind/db.2.168.192
$ORIGIN .
$TTL 604800 ; 1 week
2.168.192.in-addr.arpa IN SOA asir.es. root.asir.es. (
2 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
NS gary.asir.es.
$ORIGIN 2.168.192.in-addr.arpa.
1 PTR gary.asir.es.

# cat /var/cache/bind/db.infoasir.net
$ORIGIN .
$TTL 604800 ; 1 week
infoasir.net IN SOA infoasir.net. root.infoasir.net. (
2 ; serial
604800 ; refresh (1 week)
86400 ; retry (1 day)
2419200 ; expire (4 weeks)
604800 ; minimum (1 week)
)
NS gary.infoasir.net.
$ORIGIN infoasir.net.
gary A 192.168.2.1

5 – Configuración del servidor dhcp.
    Con esto ya hemos terminado con el servidor dns. Ahora pasamos a la configuración del dhcp. Este es mas fácil de configurar, solo tendremos que modificar dos archivos. En el tendremos que hacer referencia a el servidor dns. Los archivos que vamos a modificar son el “/etc/dhcp/dhcpd.conf” y “/etc/default/isc-dhcp-server ”. En el primero va la configuración del dhcp. En el segundo solo añadiremos la interfaz por la que el servidor dhcp prestara servicio. Los archivos se nos tienen que quedar de la siguiente manera:
# cat /etc/dhcp/dhcpd.conf
# Líneas para la actualización del servidor DNS:
server-identifier gary ;
ddns-updates on;
ddns-update-style interim ;
ddns-domainname "infoasir.net.";
ddns-rev-domainname "in-addr.arpa.";
deny client-updates ;
include "/etc/bind/rndc.key";
zone infoasir.net. {
primary 127.0.0.1;
key rndc-key;
}
zone 2.168.192.in-addr.arpa. {
primary 127.0.0.1;
key rndc-key;
}
# Configuración general del servidor DHCP
default-lease-time 2592000;
max-lease-time 2592000;
authoritative ;
# Se reparten las direcciones 192.168.2.2 -192.168.2.127
# entre los clientes :
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.2 192.168.2.127;
option routers 192.168.2.1;
option domain-name "infoasir.net.";
option domain-name-servers 192.168.2.1;
option broadcast-address 192.168.2.255;
}

# cat /etc/default/isc-dhcp-server
INTERFACES="eth0"

    Para terminar reiniciamos los servicios.
# /etc/init.d/isc-dhcp-server restart
# /etc/init.d/bind9 restart
6 – Comprobaciones.
    En mi caso lo he comprobado con dos clientes. El primero un debian squeeze, a el cual le he tenido que descomentar una linea del archivo /etc/dhcp/dhclient.conf. La linea que le he añadido quedaria asin:
# cat /etc/dhcp/dhclient.conf |grep 'send host-name'
send host-name patricio;
    Donde patricio es el nombre de la maquina.
    Para comprobar que funciona he comprobado desde cada cliente la ip del otro de la siguiente manera.
En windows, el cual se llama arenita, he utilizado un ping y el nslookup.
 
    En patricio, el cliente debian squeeze, he utilizado dig. En este caso no he utilizado el ping por no tener que desactivar el cortafuegos de windows, el cual da tanto ruido. Los resultados deben de ser los siguientes:
# dig arenita.infoasir.net
; <<>> DiG 9.7.3 <<>> arenita.infoasir.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39981
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;arenita.infoasir.net. IN A
;; ANSWER SECTION:
arenita.infoasir.net. 1800 IN A 192.168.2.101
;; AUTHORITY SECTION:
infoasir.net. 604800 IN NS gary.infoasir.net.
;; ADDITIONAL SECTION:
gary.infoasir.net. 604800 IN A 192.168.2.1
;; Query time: 1 msec
;; SERVER: 192.168.2.1#53(192.168.2.1)
;; WHEN: Mon Nov 28 19:21:42 2011
;; MSG SIZE rcvd: 89


lunes, 21 de noviembre de 2011

OpenCms sobre TomCat6 en Debian squeeze


    En esta practica vamos a instalar OpenCms en tomcat. Lo instalare en una maquina virtual, a la cual la he llamado plancton. En la maquina cliente he modificado el archivo /etc/hosts y he añadido la linea “10.0.0.6 plancton”, siendo la 10.0.0.6 la dirección ip de la maquina donde instalaremos OpenCms. Para instalar OpenCms necesitamos instalar los siguientes programas:
  • Java
  • TomCat
  • MySQL
    También instalaremos apache con los módulos necesarios para que no tengamos que poner ningun puerto en la URL.

Java.
    Para instalar Tomcat primero tenemos que instalar java. Estos paquetes no se encuentra en los repositorios normales, tenemos que añadirles los non-free . Los paquetes los instalamos de la siguiente manera:
# aptitude install sun-java6-bin sun-java6-jre sun-java6-jdk sun-java6-plugin sun-java6-fonts libcommons-el-java

    En los pasos de la instalación nos pedirá que aceptemos la licencia. Si tenemos otro java instalado, tenemos que hacer que se utilice el de java por defecto:
# update-alternatives --set java /usr/lib/jvm/java-6-sun/jre/bin/java

MySQL.
    También necesitaremos de una base de datos, así que instalaremos MySQL:
# aptitude install mysql-server-5.1 mysql-client-5.1 libmysql-java
    Creamos el archivo mysql.sql, con los siguientes datos.
# cat mysql.sql
create database opencms default character set utf8 collate utf8_bin;
grant all on opencms.* to 'opencms'@'localhost' identified by 'opencms' with grant option;
grant all on opencms.* to 'opencms'@'localhost.localdomain' identified by 'opencms' with grant option;
    Después lo ejecutamos en mysql.
# mysql -u root -p < mysql.sql

Tomcat6.
    Y por supuesto también nos ara falta tomcat:
# aptitude install tomcat6 tomcat6-admin tomcat6-docs tomcat6-examples tomcat6-user

    Para poder administrar tomcat desde el administrado web tendremos que modificar el archivo /etc/tomcat6/tomcat-user.xml para que nos quede la siguiente estructura.
# cat /etc/tomcat6/tomcat-user.xml
<tomcat-users>
<user username="usuario" password="contraseña" roles="admin,manager"/>
</tomcat-users>

    Para que el servidor web Apache puede comunicarse bien con Tomcat, tendremos que configurar el conector AJP. Para esto, descomentaremos del archivo /etc/tomcat6/server.xml. Esto se hace en la siguiente linea:
# cat /etc/tomcat6/server.xml

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    Por otro lado indicar que libmysql-java es el controlador JDBC de MySQL y libcommons-el-java son componentes reusables opensource de java. Esta instalación instala los jar JDBC de mysql y commons en java pero para que funcione correctamente con tomcat debemos incluirlo en el classpath de tomcat. Esto lo hacemos añadiendo un link simbólico al jar de mysql y commons en java en el directorio /usr/share/tomcat6/lib.
# cd /usr/share/tomcat6/lib
# ln -s ../../java/mysql.jar mysql.jar
# ln -s ../../java/commons-el.jar commons-el.jar

    Por ultimo reiniciamos Tomcat:
# service tomcat6 restart

    Si todo a salido bien, podremos acceder en http://localhost:8080/manager/html con el usuario y contraseñas que definimos.

Apache.
    Instalar apache es algo tan fácil como:
# aptitude install apache2 apache2-utils

    Para conectar el servidor web con el servidor de aplicaciones (contenedor de servlets y JSP) se usa el protocolo AJP. Para configurar esto se pueden usar, o el módulo de apache mod_jk o el módulo mod_proxy. La recomendación es usar el módulo mod_proxy ya que es más moderno y es el que configuraremos. También se puede usar para balanceo de carga, clusters… Por defecto, ya viene instalado con apache2.
En la instalación de Tomcat ya configuramos el conector AJP para que funcionara correctamente. Ahora nos ocupamos de la parte de configuración de apache. Para configurar el conector editamos el fichero de configuración de mod proxy y lo dejamos así:
# nano /etc/apache2/mods-available/proxy.conf
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyVia On
ProxyPass /opencms ajp://localhost:8009/opencms
ProxyPassReverse /opencms ajp://localhost:8009/opencms
<Location /opencms >
Order allow,deny
Allow from all
</Location>
<Location /share>
Order allow,deny
Allow from all
</Location>
</IfModule>


    Para terminar con apache activamos los módulos proxy y reiniciamos apache.
# a2enmod proxy_balancer proxy_ajp proxy
# service apache2 restart

Instalación OpenCms.
    Nos descargamos OpenCms:
# wget http://www.opencms.org/downloads/opencms/opencms_8.0.3.zip
    Descomprimimos:
# unzip opencms_8.0.3.zip
    Movemos el .war:
# cp opencms.war /var/lib/tomcat6/webapps/

    Para empezar la instalación de OpenCms entramos en la siguiente dirección:
http://plancton:8080/opencms/setup/

    Si es desde local cambiamos plancton por localhost. En mi caso lo estoy haciendo desde un ordenador cliente.

    En la primera pagina (http://plancton:8080/opencms/opencms/setup/, tendremos que aceptar la licencia de OpenCms.


    En el siguiente paso, nos indica si tenemos todos los componentes necesarios instalados.



    La siguiente pantalla importante es en la que configuramos la base de datos. Pondremos los datos que que pusimos cuando configuramos la base de datos.


    Nos preguntara si queremos borrar alguna base de datos existente. Tras aceptar nos crea la base de datos y nos lo verifica.


    En las próximas dos pantallas le damos a continuar, y se pondrá a crear el cms.


    Yo mientras se instalaba merendé, así que tranquilidad. Tras el tiempo, se termina de instalar.

    Tras la espera, ya hemos terminado.

    Para administrar OpenCms nos metemos en:
http://plancton:8080/opencms/opencms/system/login/index.html.
    El usuario y contraseña que trae por defecto es: Admin/admin.

      Este seria el menú de administración.
 
    Para entrar en la pagina principal, entramos en la pagina:
http://plancton:8080/opencms/opencms/index.html.
También podemos entrar por la URL: http://plancton/opencms/opencms/index.html




sábado, 12 de noviembre de 2011

Apache, creación de un servidor WebDAV


   WebDAV ("Edición y versionado distribuidos sobre la web") es un protocolo para hacer que la www sea un medio legible y editable. Este protocolo proporciona funcionalidades para crear, cambiar y mover documentos en un servidor remoto (típicamente un servidor web). Esto se utiliza sobre todo para permitir la edición de los documentos que sirve un servidor web, pero puede también aplicarse a sistemas de almacenamiento generales basados en web, que pueden ser accedidos desde cualquier lugar. La mayoría de los sistemas operativos modernos proporcionan soporte para WebDAV, haciendo que los ficheros de un servidor WebDAV aparezcan como almacenados en un directorio local.

   El propósito es montar webdav en un servidor apache, configurado con contraseña digest y despues montarlo con un cliente webdav, en este caso utilizaremos cadaver.

Configuración del servidor WebDAV.

   Para crear un directorio en nuestro servidor Web que pueda ser accesible por medio de un cliente WebDAV debemos activar los módulos dav y dav_fs. Si queremos que tenga identificación cifrada, también tenemos que activar el modulo auth_digest.
# a2enmod dav
# a2enmod dav_fs
# a2enmod auth_digest

Ahora tendremos que crear el archivo con los usuarios y sus contraseñas. Para esto utilizaremos el programa htdigest. Tendremos que ir añadiendo cada usuario a mano. La primera vez tendremos que añadirle la -c para crear el archivo.
# htdigest -c /etc/claves/digest.txt webdav juanlu
Adding password for juanlu in realm webdav.
New password:
Re-type new password:

    Ahora pasamos a crear la carpeta y el host virtual en apache. Cuando creemos la carpeta le tenemos que dar permisos de www-data que es el usuario de apache.
# mkdir /var/www/webdav
# chown www-data.www-data /var/www/webdav/

    Ahora creamos el archivo de configuración del host virtual.
# nano /etc/apache/sites-enabled/webdav

   En este archivo lo primero es indicar el nombre de la base de datos de lock que se utilizará, mediante la directiva DAVLockDB. Es importante tener especial cuidado con esta directiva, ya que es frecuente fuente de errores. Lo que indica la directiva no es ni el nombre de un archivo ni el de una carpeta, si no la parte inicial del nombre de un archivo. El módulo creará un archivo de nombre DAVLockDB.orig y otro de nombre DAVLockDB.xxxxx dentro de la carpeta indicada, para lo cual es necesario que el usuario bajo el que corre Apache tenga permisos de escritura en ella.
    A continuación creamos una sección directory para el directorio que queremos acceder por WebDav y activar el modo WebDav con la directiva dav on. Además por seguridad se debe autentificar el acceso, para ello añadimos la identificación tipo Digest. En esta identificación tenemos que especificar el dominio, el archivo donde se encuentran las contraseñas y usuarios y los usuarios que permites, si pones valid-user, son todos los usuarios del archivo
    Nos quedaría el siguiente archivo:

<VirtualHost *:80>
     ServerName www.bobesponjadav.com # Nombre del dominio virtual.
     DocumentRoot /var/www/webdav # Directorio donde se guarda la pagina
     DavLockDB /tmp/DavLock
<Directory /var/www/webdav/>
     dav on
     Options Indexes FollowSymLinks MultiViews
     AllowOverride None
     Order allow,deny
     allow from all
     AuthType Digest
     AuthName "webdav" # Nombre del dominio.
     AuthUserFile "/etc/claves/digest.txt " # Archivo donde se guardan los usuarios y contraseñas
     Require valid-user
</Directory> 

</VirtualHost>

   Con todo esto ya tenemos el archivo de configuración hecho. Ahora tenemos que poner este sitio activo con el siguiente comando.
# a2ensite webdav
   Tras esto reiniciamos apache para que coja el nuevo host.
# /etc/init.d/apache2 restart

Conexión con cadaver.
   Lo primero sera la instalación de dicho cliente WebDav.

# aptitude install cadaver
   Tras esto nos conectaremos de la siguiente manera.

# cadaver http://www.bobesponjadav.com
Autenticación requerida para webdav en el servidor 'www.bobesponjadav.com':
Nombre de usuario: juanlu
Contraseña:
dav:/>


   Si queréis saber mas sobre la autenticación en apache podéis ver :


miércoles, 9 de noviembre de 2011

Apache, autentificación de usuarios con mysql

   Utilizando el módulo libapache2-mod-auth-mysql, configura un sitio virtual cuyo acceso sea autentificado mediante usuarios guardados en un tabla MySql. Nota: las contraseñas de los usarios se deben guardas encriptadas.
Este modulo no esta por defecto en apache2, así que tendremos que instalarlos. Esta en los repositorios así que para descargarlo y activarlo hacemos lo siguiente:
~# aptitude install libapache2-mod-auth-mysql
~# a2enmod auth_mysql
   Para este modulo, necesitaremos crear una base de datos y unas tablas.
mysql> create database apache2
mysql> grant all on apache2.* to juanlu@'localhost'
              identified by 'juanlu';
mysql> use apache2;
mysql> create table clientes(
             nombre varchar(25) not null,
             pass varchar(44) not null,
             primary key (nombre));
   Para encriptar las contraseñas utilizaremos el cifrado Crypt. Para ello podemos hacer dos cosas.
  1. Al crear la base de datos, en el insert, ponemos un parámetro para que la encripte. Los insert serian así:
    INSERT INTO `apache2`.`clientes`
    VALUES (
    'maria', ENCRYPT( 'maria' )
    );
  2. Antes de crear la base de datos utilizamos el programa htpasswd. Este programa se instala al instalar uno de los modulos de apache2. Seria de la siguiente manera.
    ~# aptitude install libapache2-mod-auth-pam
    Ya tendriamos instalado el programa. Para usarlo simplemente:
    ~# htpasswd claves.txt Jose
    *claves.txt, seria el fichero donde se guardan usuario y contraseña. Jose seria el usuario y la contraseña te la pediría. Después simplemente a el insertar los datos, hacemos un insert normal, y ponemos la contraseña del fichero.
  Tras estos pasos, ya tenemos configurada nuestra base de datos con los usuarios y sus contraseñas. Ahora tenemos que configurar el VirtualHost. Para ello creamos el arhcivo /etc/apache2/sites-available/mysql. Lo editamos, y tiene que quedar de este modo:
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName bobesponja.mysql
        DocumentRoot /var/www/mysql
        <Directory /var/www/mysql/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
               AuthType Basic
               AuthName "Usuario y contraseña"   # Texto que te aparecerá
               AuthBasicAuthoritative Off
               AuthUserFile /dev/null
               AuthMYSQL on
               AuthMySQL_Authoritative on
               AuthMySQL_DB apache2   # Nombre de la base de datos
               AuthMySQL_Host localhost
               AuthMySQL_User juanlu   # Usuario de la base de datos
               AuthMySQL_Password juanlu   # Contraseña del usuario
               AuthMySQL_Password_Table clientes   # Nombre de la tabla
               AuthMySQL_Username_Field nombre   # Fila de los nombres
               AuthMySQL_Password_Field pass   # Fila de las contraseñas
               AuthMySQL_Empty_Passwords off
               AuthMySQL_Encryption_Types Crypt   # Tipo de cifrado
               Require valid-user
  </Directory>
</VirtualHost>
  Las palabras en negrita, son las mas importantes, pueden cambiar dependiendo de como sea nuestra base de datos o de la encriptación en el caso de Crypt. Se podría encriptar también con otro tipo de encriptación como sha1 o md5.

viernes, 14 de octubre de 2011

Montar servidor PXE


   PXE, es un medio utilizado para iniciar el ordenador mediante la interfaz de red a la cual, mediante DHCP se le dice el servidor del que se debe de bajar  el programa inicial de bootstrap y archivos adicionales el cuan utiliza FTP.

   Para esta practica he utilizado 2 maquinas virtuales. La primera tiene la dirección ip 10.0.0.1/24 , tiene instalado el servidor dhcp y ftp. La otra sera la maquina cliente, la cual tocaremos la bios para que arranque como cliente PXE.

   Configuración del servidor.
Este sistema tiene dos componentes:

  • Servidor DHCP que da una dirección de forma automática al equipo que se enciende.

  • Servidor TFTP que envía al equipo una imagen similar a la que incluyen los CD de instalación.


Instalación del servidor TFTP y DHCP
# aptitude install tftpd-hpa isc-dhcp-server

Descarga la imagen de instalación por red de Debian Squeeze.
# wget http://ftp.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/netboot.tar.gz

Descomprime este archivo en el directorio /srv/tftp
# cd /srv/tftp
# tar -zxvf /root/netboot.tar.gz

Configuración del servidor DHCP
# nano /etc/dhcp/dhcpd.conf
subnet 10.0.0.0 netmask 255.255.255.0 {

   range 10.0.0.150 10.0.0.160; (rango de direcciones)
   option domain-name-servers 8.8.8.8, 8.8.4.4 ; (DNS)
   option routers 10.0.0.128; (puerta de enlace)
   option broadcast-address 10.0.0.255; (broadcast)
   max-lease-time 86400; (duración de la ip)
   option subnet-mask 255.255.255.0; (mascara de red)
   filename "pxelinux.0"; (nombre del archivo)
   next-server 10.0.0.1; (servidor FTP)

}
Configuración de PXE
   Como esta practica la estoy haciendo en una maquina virtual, he ido a la configuración y le he dicho que arranque por PXE. Podría haber modificado el arranque por comandos, pero como dice Jose Domingo, si hay interfaz gráfica, utilízala.
  Y tras iniciar la maquina.

jueves, 29 de septiembre de 2011

Instalar dropbox en Debian Squeeze amd64

   Pues hoy, tras un formateo y pasarme a amd64, decidí instalar dropbox. No se si sera que es amd64 o que no me acuerdo bien de como instale dropbox en x86, pero diría que fue de otra manera.

   Una vez logueados como root nos ponemos manos a la obra. Los comandos a seguir son:

# wget https://www.dropbox.com/download?dl=packages/nautilus-dropbox-0.6.9.tar.bz2 (Nos descargamos el paquete)
# tar -jxvf download\?dl\=packages%2Fnautilus-dropbox-0.6.9.tar.bz2 (extraemos el programa)
# aptitude install libnautilus-extension-dev python-docutils (instalamos las dependencias necesarias)
#cd nautilus-dropbox-0.6.9/ (nos movemos a la carpeta)
# ./configure (validamos dependencias y creamos el Makefile)
# make (corremos el make)
# make install (instalamos el programa)

   Ahora entramos en Aplicaciones>Internet y encontraremos el dropbox. La primera vez que lo ejecutemos lo tendremos que configurar.

lunes, 26 de septiembre de 2011

Reparar wifi en HP G62

   En el post anterior explique como reparar la tarjeta de sonido de un portátil HP G62, en este voy a explicar como reparar la de wifi.

   Al igual que en el caso anterior, lo primero que hice fue mirar que tarjeta wireless tenia.

# lspci |grep -i wireless
03:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)

   Tras esto encontré que lo primero que tenia que hacer era editar los repositorios para agregándole los non-free. Ya sebes #nano /etc/apt/sources.list  y agregamos non-free al final de la linea y después un #aptitude update.

   Con esto casi hemos terminado los comandos que nos quedan son:

# aptitude install module-assistant wireless-tools #(instalamos estas dos herramientas)
# m-a a-i broadcom-sta#(compilamos e instalamos el paquete broadcom-sta-modules para nuestro sistema)
# update-initramfs -u -k $(uname -r)#(actualizamos el kernel)
# modprobe -r b44 b43 b43legacy ssb#(inhabilitamos los módulos conflictivos)
# modprobe wl#(cargamos el modulo wl)
# iwconfig#(verificamos la interfaz)
# ifconfig eth1 up#(por ultimo la levantamos)

   Con todo esto hemos terminado. Espero que les sea útil.

Relacionados:
Instalar Debian Wheezy con Firmware brcm43xx

viernes, 16 de septiembre de 2011

Reparar sonido en HP G62

   A principio de verano me compre un portátil el cual nada mas traérmelo le instale Debian 6. Al encenderlo me di cuenta de que me fallaba la tarjeta inalámbrica y el sonido. En este tutorial explicare como solucione lo del sonido, el cual se escuchaba por los auriculares, pero no por los altavoces.

   Lo primero es saber que tipo de tarjeta y chip tiene.

# lspci|grep -i audio
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 05)
01:00.1 Audio device: ATI Technologies Inc Manhattan HDMI Audio [Mobility Radeon HD 5000 Series]
# cat /proc/asound/card0/codec#0 |grep -i codec
Codec: Realtek ALC270 

   En el caso de la tarjeta es la primera la que nos interesa. Tras esto, me puse a buscar información sobre la tarjeta. Buscando encontré que hacia falta instalar los drivers de alsa. Los pasos que seguí fueron.

# wget ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.24.tar.bz2
# tar jvxf alsa-driver-1.0.24.tar.bz2
# cd alsa-driver-1.0.24
# ./configure
# make
# make install
# ./snddevices ( Este script crea nuevos dispoditivos de sonido en directorio /dev.)
# modprobe snd-hda-intel

   Tras esto reiniciamos el portátil y despues instalamos el alsa-utils y lo coniguramos.
# apt-get install alsa-utils
# alsamixer
   Tras poner en esta ventana los speakers a tope hemos terminado.

jueves, 28 de abril de 2011

Google Chrome 11

Google ha sacado ya la nueva versión del navegador, Google Chrome 11.

En esta versión, una de las novedades más interesantes  que implementa es la posibilidad de traducir dictados. Es decir, simplemente hablamos el texto a traducir a nuestro micro (sólo disponible desde el inglés por el momento) y Translate se encargará de traducir el texto a la lengua deseada, incluso podremos escuchar el resultado de la traducción.

Con la nueva revisión se ha aprovechado para solucionar algunos problemas detectados en el Pwn2Own, como un bug en el reproductor Flash integrado y otros detectados en Google Cloud Print.

Otras características que integra esta decimoprimera versión son el lector de PDF integrado, aplicaciones y la tienda de aplicaciones, etc… En definitiva Chrome es a día de hoy uno de los navegadores más completos del mercado. También uno de los que integran novedades más rápidamente gracias a su vertiginoso plan de desarrollo.

Más información aquí.

miércoles, 16 de marzo de 2011

Un MP3 troyano permitiría hackear un auto de forma remota

   Con la introducción de la informática en los automóviles, la idea de que alguien se meta en el sistema de un vehículo, cada día es mas posible.


   Hasta ahora esto solo se pensaba que era posible conectando un portátil a el coche, pero investigadores de las Universidades de California, San Diego y Washington descubrieron que también se puede hacer de forma remota, usando tecnología inocente como Bluetooth y hasta un antiguo CD.
   Los investigadores están realizando estos estudios para advertir a los fabricantes de posibles vulnerabilidades y problemas de seguridad. Muchos autos nuevos vienen con tecnología Bluetooth integrada, sistemas para conectarse con móviles a internet y otros dispositivos, y esas conexiones podría ser utilizada para fines maliciosos. En uno de los ejemplos, los investigadores activaron la conexión del móvil e instalaron malware en el auto usando un archivo de audio. En otra prueba ejecutaron código malicioso a través del Bluetooth.
   Los MP3 tampoco son seguros, los investigadores convirtieron uno de estos archivos en un troyano, que cuando fue reproducido por la radio del auto, alteró el firmware del auto, permitiendo a los hackers entrar al sistema de controles.
   ¿Pero para qué serviría hackear un auto? Algunas de las cosas que se podrían hacer son buscar dónde está localizado, jugar con los pestillos de las puertas, o hasta desconectar los frenos.
   La mayoría de los automóviles modernos tienen un sistema informático que controla funciones básicas, mientras que algunos han agregado a eso sistemas de GPS, Bluetooth, tecnología celular y otros extras.

   De todos modos esto todavía no es posible de todos modos, los que tengan preciosidades como esta no se tienen que preocupa de la informática, sino del freno.