jueves, 24 de noviembre de 2011

Enjaulando el Bind

El motivo de enjaular un servicio, siempre tiene como propósito de crear un ambiente aislado del sistema, por motivos de seguridad.

El proceso lo realice en debian 9.0, pero con unos cuantos ajustes funciona para cualquier debian.

Los pasos para dicha tarea son simples, enjaularemos el servicio dentro de /var/lib/named:

1) Instalamos el servicio:
apt-get install bind9

2) Detenemos el servicio:
/etc/init.d/bind9 stop

3) Hacemos el cambio en /etc/default/bind9 y agregamos "-t /var/lib/named"
sed "s/-u\ bind/-u\ bind\ -t\ \/var\/lib\/named/g" /etc/default/bind9 > /tmp/bind.temp
mv /tmp/bind.temp /etc/default/bind9
chmod 644 /etc/default/bind9
sed "s|OPTIONS=\"\"|OPTIONS=\"-u\ bind\ -t\ /var/lib/named\"|g" /etc/init.d/bind9 > /tmp/bind.temp
mv /tmp/bind.temp /etc/init.d/bind9
chmod 755 /etc/init.d/bind9


4) Creamos los directorios para el ambiente enjaulado
mkdir -p /var/lib/named/etc/ /var/lib/named/dev /var/lib/named/var/cache/bind/{data,local,master,slave} /var/lib/named/var/{log} /var/lib/named/run/

5) Procedemos a mover al ambiente enjaulado y hacemos vinculos al sistema para que siempre halla acceso desde el sistema anfitrion a los recursos del bind:
mv /var/log/named /var/lib/named/var/log/
ln -s /var/lib/named/var/log/named /var/log/named
mv /etc/bind /var/lib/named/etc/
ln -s /var/lib/named/etc/bind /etc/bind
mv /run/named /var/lib/named/run/named
ln -s /var/lib/named/run/named /run/named

6) Hacemos ajustes personalizados, en mi caso usaré en el ejemplo los ficheros de etc/bind y los mando a var/cache/bind/local, asi que cambio todo "/etc/bind" por "local", perfectamente se puede omitir este paso e ir al paso (8) o ajustarlo a su necesidad recuerde que si desea usar otro nombre diferente a "local", por ejemplo "folder", debe de crear la carpeta en el lugar del "var/cache/bind" enjaulado el comando sería "mkdir /var/lib/named/var/cache/bind/folder":
sed "s|/etc/bind/zones.rfc1918|local/zones.rfc1918|g" /etc/bind/named.conf.local > /tmp/bind.temp
mv /tmp/bind.temp /etc/bind/named.conf.local
sed "s/\/etc\/bind/local/g" /var/lib/named/etc/bind/named.conf.default-zones > /tmp/bind.temp
mv /tmp/bind.temp /var/lib/named/etc/bind/named.conf.default-zones
sed "s/\/etc\/bind/local/g" /var/lib/named/etc/bind/zones.rfc1918 > /tmp/bind.temp
mv /tmp/bind.temp /var/lib/named/etc/bind/zones.rfc1918
chmod 644 /var/lib/named/etc/bind/named.conf.local
chmod 644 /var/lib/named/etc/bind/named.conf.default-zones
chmod 644 /var/lib/named/etc/bind/zones.rfc1918

7) Ahora movemos todo a la carpeta "local", si se omite el paso 6, omitir tambien este paso
mv /var/lib/named/etc/bind/zones.rfc1918 /var/lib/named/var/cache/bind/local
mv /var/lib/named/etc/bind/db.* /var/lib/named/var/cache/bind/local

8) Movemos los archivos restantes en /var/cache/bind/ borramos y creamos enlace:
mv /var/cache/bind/managed-keys.bind /var/lib/named/var/cache/bind/
mv /var/cache/bind/managed-keys.bind.jnl /var/lib/named/var/cache/bind/
rm -rf /var/cache/bind
ln -s /var/lib/named/var/cache/bind /var/cache/bind

9) Creamos nodos:
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/zero c 1 5
mknod /var/lib/named/dev/random c 1 8
mknod /var/lib/named/dev/urandom c 1 9
chmod 666 /var/lib/named/dev/*

10) Damos los permisos correspondientes:
chown -R bind:bind /var/lib/named/etc/bind
chown -R bind:bind /var/lib/named/var/*

11) Creamos el localtime:
cp /usr/share/zoneinfo/America/Managua /var/lib/named/etc/localtime

12) Iniciamos el servicio:
/etc/init.d/bind9 start

lunes, 26 de septiembre de 2011

Monitoreando los recursos de hardware

¿Quien no usa Orion o Nagios para monitorear los recursos de un ordenador? Sin embargo aunque usemos el monitoreo, cuando estamos empezando siempre hay algo que pasamos por omisión, problemas como que el disco use el 40% y no podamos escribir en el por que los inodes se han topado. Por lo tanto el monitoreo de un servidor debe de abarcar las áreas a continuación: * Memoria: Tenemos los comandos free * Carga CPU: Tenemos los comandos top, sysstat, mpstat, sar * Temperatura: lm-sensors * Espacio en particiones: df * Inodes de particiones: df -i * Carga de red: tcptrack, iptraf, iftop, ifstat

viernes, 22 de octubre de 2010

Trabajando con el historial

Trabajando con otras distribuciones me di cuenta que en algunas distribuciones se hace mas comoda la busqueda de comandos previamente ejecutados, el mas util es buscas mediante Re-Pag y Av-Pag comandos cuya funcionalidad es buscar por patrones por ejemplo si se han usado los siguientes comandos:

vi hola.txt
vi -r a.txt
rm esto.txt
vi escrito.txt
mkdir -p folder/stuff
vi /etc/hosts

Es logico pensar que seria facil buscar los comandos cuyo patron inician con vi y no recordamos el archivo hola.txt por ejemplo entonces, seria util solo escribir 'vi' y usar Re-Pag y movernos solo viendo los comandos del historial que tengan el patron escrito.

Si alguien a usado opensuse, este lo trae por defecto. Cuando probe Centos, no sabia en ese entonces que podia ser cambiado teniendo que por defecto el Re-Pag y Av-Pag se hiban al primero comando y ultimo comando respectivamente del historial, siendo algo engorroso para repetir algun comando util previo coincidente. En debian tenia que ir uno por uno o haciendo grep al .bash_history.

Fue cando en algun momento decidi encontrar que hacia para que OpenSuse facilitara ese metodo e implementarlo tambien en el resto de distros que pruebo y uso, ok fue entonces que encontre que esto se configura en '/etc/inputrc', descomentariando las siguientes lineas:

# alternate mappings for "page up" and "page down" to search the history
"\e[5~": history-search-backward
"\e[6~": history-search-forward

Centos usa los siguientes:

# mappings for "page up" and "page down" to step to the beginning/end
# of the history
"\e[5~": beginning-of-history
"\e[6~": end-of-history


Existen mas opciones, leer para ajustar a sus necesidades, a mi solo me era util la de usar Re-Pag y Av-pag para usarlos en la busqueda del historial, espero a alguien mas le sea de interes este articulo.

lunes, 16 de agosto de 2010

Seteando el idioma del teclado

Ya habiamos visto como crear nuestros propios hotkeys, pero que sucede si cambiamos de teclado?

Lo hacemos con el comando loadkeys:

loadkeys /usr/share/keymaps/i386/qwerty/es.kmap.gz

Simplemente aplicamos lo siguiente para cambiar el mapa de teclado para el proximo arranque.

cd /usr/share/keymaps/i386/qwerty/
cp es.kmap.gz /etc/console/boottime.kmap.gz

miércoles, 11 de agosto de 2010

Bash como un cgi

La potencialidad del bash scripting no se limita solo a las vty y consolas, teniendo un buen script perfectamente puede ser usado como un cgi.

Para que esto funcione deberemos empezar todo cgi-bash scripting de la siguiente forma:

#!/bin/bash
echo "Content-type: text/html"
echo ""


Con esto ya tenemos lo principal, ahora estamos listos para escribir nuestro primero bash script como cgi:

title="Mi primer cgi-bin en bash"
body="Hola mundo"
echo "<html><head><title>$title</title></head><body>$body</body></html>"

sábado, 17 de julio de 2010

Reparando warning php

Quien ha desarrollado en codigo pho mas de alguna vez ha de haber recibido un warning molesto como:

"Strict Standards: date(): It is not safe to rely on the system's
timezone settings. Please use the date.timezone setting, the TZ
environment variable or the date_default_timezone_set() function."

Esto es debido a que el php no confia en la configuracion de tiempo de zona del sistema simplemente por que no es algo seguro, puesto que el servidor puede estar en china pero la pagina puede ser desarrollada para America por ejemplo, no tendria logica estar trabajando con el tiempo de zona extranjero, por lo que los desarrolladores de php decidieron tomar esto como un aviso o un warning para advertir que debe de establecerse o feinirse manualmente en el sitio la zona en la que la pagina trabaja y no depender ni confiar en la zona seteada en el server donde se aloja la misma.

Para solventar el problema solo hay que adjuntar la siguiente linea:

date_default_timezone_set('America/Los_Angeles');

viernes, 11 de septiembre de 2009

Configuracion RAID

Configuracion RAID es tener una configuracion de varios discos y fusionarlos como un simple disco duro.

El tener discos en configuracion RAID significa que podemos tener datos para tener (RAID0) incrementar el rendimiento del disco o en (RAID1) optener Fiabilidad en los datos.

RAID0 es bien conocido por partir en dos pedazos la informacion, si el fichero pesa 100KB, entonces se divide en dos pedazos de 50KB y cada pedazo es guardado en cada disco diferente. Pero!, como mejora esto en rendimiento?, la respuesta es simple, es mas rapido almacenar 50KB que 100KB, esto quiere decir que paralelamente se escriben 50KB en cada disco a la vez, esto da como resultado almacenar los datos en la mitad del tiempo de lo que llevaria escribir 100KB en un disco. Esto tambien nos dice que al colocar dos discos en esta configuracion sus capacidades se suman, si teniamos dos discos de 80GB, entonces tendremos un disco de 160GB en configuracion RAID0. Siempre hay que tener en mente que no puedes remover un disco y leer la informacion ya que la informacion esta en esparcida en ambos discos y en momentos de fallo la informacion se pierde.

RAID1 por otra parte esta enfocado en la fiabilidad de los datos y no en el rendimiento del disco, esta configuracion es valida para ambientes donde se quieren tener una copia exacta de un disco, todo lo que se le es enviado al primer disco es enviado identicamente al segundo, creando redundancia en los datos no duplica no reduce el rendimiento del disco duro pero si la fiabilidad de los datos, tampoco incrementa la capacidad del disco si ambos discos son de 80GB, el tamano del disco total sera solo 80GB, si falla un disco perfectamente se puede remover un disco duro dañado y arrancar el otro disco duro, sin que halla fallos en el sistema. Este metodo es muy conocido como configuracion en espejo.

Existen mas configuraciones RAID pero no todos los controladores RAID las soportan.

Otro arreglo interesante es el RAID5, discos bajo esta configuracion dividen los datos a nivel de bloques distribuyendo la informacion de paridad entre todos los discos del conjunto, esto se traduce en tener distribuida la informacion de bloques de paridad en todos los discos, en caso que falle un disco perfectamente se puede reconstruir a partir del resto, por lo que solo hay soporte a fallo de un solo disco, si fallan dos, la informacion se pierde. A esto le denominan algunos "Modo Interino de Recuperación de Datos". Esto conlleva a que mayor cantidad de discos se incrementan las posibilidades de fallos y probabilidades de que fallen mas de un disco.

Surge el RAID6, que no es mas que implementar al RAID5 la mejora de la informacion de paridad para dar soporte al fallo de discos dobles, su base es doblar la paridad, asi si fallan dos discos es perfectamente recuperable a partir del resto de discos, es torpe en cantidades de discos pequeñas, pero a medida que el conjunto crece es mas optimo.

Ahora debemos de asegurarnos que tenemos soporte via hardware para realizar la configuracion de RAID, tenemos que buscar en el manual de nuestra tarjeta madre si tiene el chip agregado para realizar esta operacion, para tarjetas intel deberiamos de buscar en el chipset, al sur de la tarjeta madre exactamente, conocido como ICH, el hub controlador de I/O, en chipsets Intel, se necesita buscar un chip agregado encargado de controlar el RAID, que tenga al final una R, por ejemplo: ICH7 no tiene soporte a RAID, pero ICH7R si lo tiene. Algunos fabricantes agregan "Intel Matrix Storage" o "nVidia MediaShield Storage" al final, lo cual es lo mismo.

Ahora bien podemos tener un chip extra que soporte RAID, lo que sgnificara que tendra agregado puertos vinculados a este chip. Esto significa que tendremos que conectar los discos a instalar en modalidad en RAID en los puertos vinculados a este chip y no en los puertos normales.

Si su tarjeta no soporta RAID puede aun asi incluirle la capacidad comprando un controlador para RAID.

Ahora para configurar el RAID de discos necesitamos hacer tres pasos:

1) Instalar los discos en el ordenador.
Este es el paso mas simple, colocar los discos y enchufarlos a la tarjeta madre, en el puerto correspondiente para RAID, si no tuviese el chip, comprar el controlador y enchufar los discos a este controlador. Es claro y logico que debe de realizarse con el ordenador apagado.

Existen dos estandares de discos PATA(Paralelos) y SATA(Seriales), para los paralelos hay que hubicar cada disco como maestro y en cada puerto, colocarlos en la misma faja reducira el rendimiento. Debido a que actualmente paralelos son menos frecuentes y probablemente solo la tarjeta madre venga con un puerto, nos enfocaremos en discos SATA.

Para conectar los discos sata es simple, conecatar cable de poder y de datos y listo, instalarlos en los puertos mas bajos.

2) Configurar el sistema para que reconozca los RAID.
Esto se hace desde el bios, los bios varian y existen muchas guias que explican como configurar el raid deseado con el Bios que se tiene, en general se ha de buscar la opcion en la cual la configuracion actual es IDE y cambiarla por RAID. Una vez hecho esto guardar y salir.

Antes que se cargue el sistema operativo aparecera una tabla y unos shortcuts para acceder a la configuracion RAID, aqui se realiza la seleccion de que tipo de raid se desea y luego la reconstruccion del mismo, esto llevara tiempo.

3) Configurando Sistema Operativo instalando los controladores para que soporten dicha configuracion.
Esto se hace desde la instalacion del sistema, se configuran los discos y se le indica al sistema operativo que interprete a ambos o mas discos como un RAID.

Referencia: http://es.wikipedia.org/wiki/RAID