martes, 28 de junio de 2011

Creación de discos virtuales en Debian para maquinas virtuales de XEN

Para crear los discos usaremos dd de la siguiente forma:
dd if=/dev/zero of=disk5.img bs=1MB count=2000
(esto generara una imagen llamada disk5.img de 2Gb)

Hacemos que sea de tipo ext3, formateándola así:
mkfs.ext3 disk5.img

Para crear una swap también vamos a usar dd.
 dd if=/dev/zero of=swap.img bs=1M count=1500
(esto generara una imagen llamada swap.img de 1.5Gb)

Hacemos que sea de tipo swap, formateándola de la siguiente forma:
 mkswap swap.img

Podemos ampliar o reducir el tamaño de los sistemas de archivos con:
resize2fs disk5.img

1) Se crea el disco con el siguiente comando dd if=/dev/zero of=file.img bs=1MB count=2000, donde se indica of=file.img es el nombre de archivo de disco virtual, count=2000 es igual a dos giga.
2) Se formatea el disco con el siguiente comando mkfs.ext3 disk.img, donde disk.img es el nombre de la imagen de disco creada.
3) Se reestructura los inodos del disco con el comando resize2fs disk.img, donde disk.img es el nombre de la imagen de disco creada.
Para aumentar el tamaño del disco debes hacer lo siguiente:
1) Apagar la maquina virtual
2) Ubicar el archivo
3) Ejecutar dd if=/dev/zero of=vm-101-disk-1.raw bs=1 count=0 seek=200G
Nota: of=nombre del disco virtual y seek=tamaño nuevo del disco

lunes, 27 de junio de 2011

Como dar privilegios a un usuario para un servicio especifico

A veces es necesario otorgar ciertos permisos a otros usuarios, de tal forma que sólo cumplan una función específica en el sistema, como aquellos que administren apache o mysql, etc.

Esta escalada de permisos se realiza precisamente con el paquete sudo, instalamos el paquete sudo:

aptitude install sudo


La configuración de los privilegios se lleva a cabo en el archivo sudoers, para modificar el archivo debemos ingresar como root:

su


Introducimos la clave de root, y una vez autentificado pasamos a editar el archivo:

/etc/sudoers


Ahora agregamos en el archivo la especificación deseada para el usuario, ejemplo:

usuario1 ALL= /sbin/ifconfig
usuario2 ALL= (root) /etc/init.d/apache2
 
Como vimos esto lo podemos usar para múltiples usuarios y múltiples servicios. 

Listas de Control de Acceso -(ACL)

Los permisos de linux están bien siempre que no dispongamos de un grupo muy grande de usuarios, si es así se haría muy lioso ya que tendríamos un /etc/group muy grande. Una forma elegante de arreglar este problema es usando las ACL (Listas de Control de Acceso).

A grosso modo una ACL es una lista de usuarios o grupos Linux y sus correspondientes permisos de acceso que tienen a un fichero o directorio.
Instalando y activando las ACL:

Para aumentar la granularidad de los permisos en tu sistema debes tener en cuenta:

El nucleo debe soportar y estar compilado para soportar atributos extendidos y ACL
El sistema de ficheros tiene de montarse con atributos extendidos y ACL
Se tienen de instalar las utilidades de espacio de usuario (chacl,getfacl y setfacl) para establecer el ACL.

Una vez claros estos conceptos pasamos a activar ACL.
Soporte ACL del núcleo de sistema:

La gran mayoría de distros actuales ya soportan ACL puedes comprobar si tienes soporte con este comando.

# grep POSIX_ACL /boot/config-`uname -r`
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
# CONFIG_TMPFS_POSIX_ACL is not set


Como podéis tenemos el soporte de ACLs activado en el kernel. De no ser así lo recompilamos marcando estas opciones.

File systems --->

[*] ReiserFS extended attributes
[*] ReiserFS POSIX Access Control Lists

Puede hacerse sobre sistemas de ficheros ReiserFS, XFS, Ext3 y otros.
Soporte ACL en /etc/fstab:

Una vez que tengamos soporte ACL necesitaremos configurar /etc/fstab. Los sistemas de ficheros montados con acl tendrán la palabra clave "acl" en las opciones de montaje de sus entradas en el fichero.

/dev/sda6 /usr reiserfs noatime,acl,user_xattr 1 2
/dev/hda1 /opt ext3 defaults 0 0

Como podéis ver sda6 tiene soporte acl en el punto de montaje , si quisiéramos hacer lo mismo en hda1 sería tan fácil como:

/dev/hda1 /opt ext3 defaults,acl 0 0

Una vez actualizado el fichero /etc/fstab debemos remontar el sistema de ficheros.

Ejemplo para hda1:

# mount -o remount /dev/hda1

Soporte ACL en el espacio de usuario:

El último paso para usar ACL es asegurarse de que las aplicaciones de espacio de usuario estén presentes en el sistema. En Debian o Ubuntu puedes comprobar así:

# dpkg -l | grep acl
ii acl 2.2.42-1ubuntu1
Access control list utilities
ii libacl1 2.2.42-1ubuntu1

También puedes comprobar buscando las herramientas:

# type -a getfacl
getfacl is /usr/bin/getfacl

Si el control de ACLs no esta instalado puedes instalarlo desde el manejador de paquetes de tu distribución en debian por ejemplo:

# apt-get install acl

Formato ACL:

Linux soporta 2 tipos básicos de ACL:

ACL de control de directorios y ficheros.
ACL de directorio (máscaras) ACL que toman por defecto los ficheros creados en ese directorio.

La ACL se representa por tres campos separados por ":".

Campo 1:
Entrada

"u" Usuario
"g" Grupo
"o" Otro
"m" Máscara

Campo 2:

UID (ID numérico de usuario)
GID (ID numérico de grupo)
Vacío (Asume UID,GID del Creador)

Campo 3:

El tercer campo es el de acceso y puede ser representado de 2 maneras.

Cadena estándar RWX (las cadenas se pueden remplazar por "-" si no queremos dar acceso de ese tipo)
Cadena simbólica + ^

Herramientas:

chacl: Permite cambiar, examinar o eliminar ACL.
getfacl: Permite examinar acl para encontrar archivos o directorios.
setfacl: Establece ACL a fichero o directorio.

Mostrar ACL:

Para el ejemplo usaremos un directorio con archivos que hemos creado con touch.

> ls -l
total 0
-rw-r--r-- 1 tuxed tuxed 0 2008-01-26 03:03 lerele
-rw-r--r-- 1 root root 0 2008-01-26 03:03 pass
-rw-r--r-- 1 root root 0 2008-01-26 03:02 user

La acl para el directorio siguiente es:

> getfacl .
# file: .
# owner: root
# group: root
user::rwx
group::rwx
other::rwx

La acl por defecto para el fichero lerele es esta:

> getfacl lerele
# file: lerele
# owner: tuxed
# group: tuxed
user::rw-
group::r--
other::r--

La acl para el directorio el cual no se le ha asignado coge los de umask:
Establecer ACL:

Hay tres maneras de establecer un ACL:

Usando el comando setfacl el cual sobrescribe cualquier ACL anterior.
Usando el comando setfacl con la opción -m (Modifica ACL).
Usando chacl para modificar una ACL existente.

En esta ocasión mostraré como se cambian las acl con chacl, ya que este no sobrescribe la existente, y además proporciona algo más de información acerca del funcionamiento de las listas de acceso.
Ejemplo:

Añadiremos al usuario aitor como alguien que puede leer el fichero lerele, y usaremos chacl (cambiar la ACL) del siguiente modo:

$ chacl u::rw-,g::r--,o::---,u:aitor:r--,m::rw- lerele

Esta es la forma en la que se ve una acl en la vida real, el hecho de que sea un comando demasiado largo es que se deben definir en los puntos ya nombrados anteriormente el propietario de fichero, grupo propietario y otros.

Para entendernos mejor, la porción u::rw,g::r--,o::--- es la ACL existente y la porción u:aitor:r--,m::rw- especifica el nuevo usuario que quiero añadir a dicha acl y la máscara de derechos efectivos cuando se añada.

La máscara de derechos efectivos es la unión de todos los permisos ya existentes de UGO para un fichero o directorio. Se obtiene al añadir un usuario a la ACL.

Para comprobar que hemos sido añadidos a la acl usaremos:

$ getfacl lerele
# file: lerele
# owner: tuxed
# group: tuxed
user::rwx group::r-- other::--- user:aitor:r-- mask::rw-

Ahora que ya sabemos como funciona acl podríamos poner que aitor tenga permisos de lectura y escritura a lerele:

$ chacl u::rw-,g::r--,o::---,u:aitor:rr-,m::rw- lerele

Como veis le hemos añadido permisos de escritura:

$ getfacl lerele
# file: lerele
# owner: tuxed
# group: tuxed
user::rwx group::r-- other::---user:aitor:rw-

Como hacer backup con rsync usando Debian, Canaima o Ubuntu.

Hacer respaldo de los diferentes servicios, se motiva a la importancia de tener activos los servicios de las 24 horas, en caso de desastre tener los sitios resguardados para hacer una restauración rápida de ellos, para eso se configura un servidor con características específicas que realizará la tarea de resguardo de la información de forma automática e incremental: 
1. Instalamos el programa que realizara la tarea:
     aptitude install rsync
 
2. Complementamos configurando una relación de confianza entre servidores.

3. Creamos un script para configurar los procesos de respaldo:

4. Configuramos un cron para automatizar los procesos, de la siguiente forma:
4.1. Ejecutamos:
     crontab -e
4.2. Agregamos las lineas de configuración al final del archivo:
           00 00 * * * /root/rsync.sh
 
Para que se ejecute el script todos los días a la media noche.