Algo de Linux: 2008

sábado, 20 de diciembre de 2008

Discos de arranque con Freedos

A veces necesitamos un floppy autoarrancable con formato DOS, para actualizar, por ejemplo, la BIOS de nuestro equipo, o para arrancar alguna aplicación DOS que haga algo en el proceso de inicio de nuestra máquina.

Como no uso windows, no puedo crear un disco de inicio, así que recurro a FreeDOS, un sistema operativo compatible DOS, que me permite disponer de un floppy bootable sin la necesidad de recurrir a versiones propietarias de DOS. Todo lo que necesitamos es una imagen de disquete con el kernel FreeDOS. En http://www.fdos.org/bootdisks/ encontraremos varias imágenes que se adaptarán a nuestras necesidades.
Desde allí podemos bajar una imagen de floppy con el sistema operativo FreeDOS completo, o una imagen OEM que tan sólo contiene el kernel y el command.com, y que nos deja más espacio para añadir todo lo que necesitemos al floppy, como por ejemplo, una utilidad para flashear nuestra BIOS.

Las imágenes de disquete de esta página se encuentran disponibles en dos formatos:
Podéis descargar una imagen OEM de la siguiente manera:
# wget http://www.fdos.org/bootdisks/autogen/FDOEM.144.imz

Y descomprimirla con unzip:
# unzip FDOEM.144.imz

Una vez descargada, obtendremos un archivo llamado: FDSTD.144
Si queremos personalizarlo, para añadir cosas al disquete, creamos una carpeta temporal:
# mkdir /mnt/floppy
# mount -o loop FDSTD.144 /mnt/floppy

Y copiamos al directorio lo que necesitemos para personalizar el disquete.

Una vez copiado lo que sea, desmontamos el disco y listo. Ya tendremos nuestra imagen de disquete personalizado.

Si no tenemos floppy, podemos crear una iso del floppy y grabarlo en un CD:
# mkisofs -o bootcd.iso -b FDOEM.144 FDOEM.144

viernes, 19 de diciembre de 2008

ms-sys: Una herramienta para crear registros de arranque compatibles con Microsoft

ms-sys es una de esas herramientas que no usamos habitualmente, pero que nos viene muy bien tener a mano a aquellos que trabajamos con sistemas Linux. Por ejemplo, cuando tenemos que crear un floppy de arranque para actualizar la bios del equipo.

Podemos usar ms-sys para crear sectores de arranque Microsoft.

Para que os hagáis una idea, esta utilidad es capaz de hacer lo mismo que el comando
"fdisk /mbr" en windows. Así que, con esta utilidad puedo reestablecer el MBR de una máquina windows sin necesidad de usar windows.

También es capaz de establecer el sector de arranque a un floppy para convertirlo en un disquete de arranque. O a una partición FAT para que ésta sea arrancable. Lo que no hace es conpiar ningún sistema de ficheros. Tan sólo escribe el sector de arranque. Con lo que, si queremos que el disquete arranque, tendremos que copiarle los ficheros de sistema.

Modo de uso:
ms-sys [opciones] [dispositivo]

Pego a continuación la lista de opciones que podemos utilizar con ms-sys (sacada de la ayuda):

-1, --fat12 Write a FAT12 floppy boot record to device
-2, --fat32nt Write a FAT32 partition NT boot record to device
-3, --fat32 Write a FAT32 partition DOS boot record to device
-4, --fat32free Write a FAT32 partition FreeDOS boot record to device
-5, --fat16free Write a FAT16 partition FreeDOS boot record to device
-6, --fat16 Write a FAT16 partition DOS boot record to device
-l, --wipelabel Reset partition disk label in boot record
-p, --partition Write partition info (hidden sectors, heads and drive id) to boot record
-m, --mbr Write a Windows 2000/XP/2003 MBR to device
-9, --mbr95b Write a Windows 95B/98/98SE/ME MBR to device
-d, --mbrdos Write a DOS/Windows NT MBR to device
-s, --mbrsyslinux Write a public domain syslinux MBR to device
-z, --mbrzero Write an empty (zeroed) MBR to device
-f, --force Force writing of boot record
-h, --help Display this help and exit
-v, --version Show program version
-w, --write Write automatically selected boot record to device

Default Inspect current boot record

Podemos descargar ms-sys desde el siguiente enlace: http://ms-sys.sourceforge.net/

Instalarlo es sencillo: Primero descargamos el código fuente de la aplicación. Una vez descargado, lo extraemos:

# tar xfv ms-sys*.tgz

(En las instrucciones dice que hay que descomprimir usando tar -xzvf, pero debe ser una errata porque no está comprimido con gzip. Al menos el fichero que yo he descargado)

Una vez extraído el código fuente, entramos dentro del directorio que se nos ha creado al extraer:

# cd ms-sys

Compilamos:

# make

E instalamos:

# make install

Ejemplos de uso:

Si queremos escribir el MBR de un disquete, no tenemos más que hacer:
# ms-sys -w /dev/fd0

Si lo que queremos es escribir el MBR de un disco duro:
# ms-sys -w /dev/hda

Si lo que queremos es hacer arrancable una partición FAT:
# ms-sys -w /dev/hdaX

donde X será el número de partición.

martes, 16 de diciembre de 2008

Compartir archivos entre máquinas Linux vía NFS

¿Qué es NFS?

NFS
(Network File Sistem o Sistema de Ficheros de Red) es una solución ofrecida por los sistemas operativos UNIX/Linux para compartir archivos en redes TCP/IP. Fue desarrollado por SUN Microsystems bajo licencia GPL, lo que facilitó que se convirtiera en un estándar a la hora de convertir archivos en red.

NFS nos permite montar una partición de una máquina remota en un directorio de nuestra máquina como si fuera una partición local.

Veamos qué necesitamos instalar.
  1. Si queremos que nuestra máquina pueda utilizar recursos compartidos por un servidor nfs, instalaremos los paquetes nfs-common y portmap.
  2. Y si lo que queremos es que nuestra máquina pueda realizar ambas funciones: compartir sus recursos y conectarse a otros compartidos, instalaremos los paquetes: nfs-kernel-server y portmap. En este caso, también necesitamos el paquete nfs-common, pero como es una dependencia del paquete nfs-kernel-server, al instalar nfs-kernel-server se instalará también nfs-common.

Lo primero: El portmap.

Como en todos los casos necesitamos portmap, lo primero que hacemos es comprobar si está corriendo.

Sin entrar en muchos detalles, podemos decir que portmap es el mapeador de puertos de linux. Este mapeador se encarga de gestionar la asignación entre aplicaciones y puertos.
Lo normal es que el portmap se encuentre ya instalado.

Para saber si tenemos el portmap instalado y corriendo, no tenemos más que hacer un:

# ps aux | grep portmap

Si está corriendo, la salida del comando anterior será más o menos como la siguiente:

daemon 4204 0.0 0.0 1912 528 ? Ss 16:31 0:00 /sbin/portmap

Si no está corriendo, a lo mejor es porque no está instalado. Así podemos comprobar si está instalado:

# dpkg -l | grep portmap

Si el comando anterior no nos devuelve nada, es porque no está instalado. En ese caso, lo instalamos:

# apt-get install portmap


Si queremos que nuestro equipo pueda compartir recursos. Servidor NFS.

1.- Instalamos nfs-kernel-server.
Una vez que tengamos portmap funcionando, lo que haremos será instalar el paquete nfs-kernel-server. Como ya comentamos antes, al instalarlo, también se instalará el nfs-common:

# apt-get install nfs-kernel-server

Una vez instalado, podemos comprobar si NFS está en marcha haciendo una consulta al portmap, pidiéndole que nos indique qué servicios tiene en marcha:

# rpcinfo -p

El comando nos mostrará todos los servicios que están en marcha, entre ellos el nfs. Como la salida es bastante extensa, os muestro tan sólo las líneas correspondientes al nfs que está corriendo en mi máquina:

100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 2 udp 2049 nfs

100003 3 udp 2049 nfs
100003 4 udp 2049 nfs

Si no aparece, debemos comprobar si hay algún problema con los paquetes instalados.

2.- Compartimos directorios
Una vez tenemos los servicios en marcha únicamente nos falta determinar qué queremos compartir. Imaginemos que queremos compartir un directorio llamado backup que se encuentra en el directorio var y en el que almacenaremos las copias de seguridad de una máquina remota:

Para compartir un directorio, debemos editar el archivo /etc/exports e introducir una línea con datos referentes al directorio que queremos compartir, con qué máquinas lo vamos a compartir y las opciones de compartición. Cada línea del /etc/exports tendrá la forma:

directorioacompartir maquinasconlasquecompartir(opcionesdeexportación)

- En directorioacompartir especificamos la ruta absoluta del directorio a compartir.

- En máquinasconlasquecompartir podemos especificar:
  • Un * para compartir con todo el mundo.
  • Una dirección IP para compartir con una máquina concreta.
  • Un rango de direcciones IP con las que compartir, especificando la ip de red y la máscara.
  • Un wildcard con el que compartiremos con las máquinas de un dominio.
- En opcionesdeexportación podemos usar muchas opciones:
  • ro para compartir el directorio en modo sólo lectura.
  • rw para compartir el directorio en modo lectura/escritura.
  • root_squash para conseguir que un usuario root del cliente no pueda escribir con permisos de root en el directorio compartido.
  • no_root_squash hace que se permita que un usuario root del cliente pueda escribir con permisos de root en el directorio compartido.
  • sync hace que el servidor no atienda peticiones antes de que los cambios hechos por una petición de escritura sean escritos en disco.
  • async hace que el servidor atienda peticiones sin comprobar si los cambios hechos por una petición de escritura se han escrito en disco. Es la opción por defecto, si no se especifica nada.
  • subtree_check si se exporta un subdirectorio (no un sistema de ficheros completo) al producirse una petición de un fichero, el servidor comprueba que el fichero solicitado esté en el árbol de directorios exportado.
  • no_subtree_check desactiva la comprobación de subtree_check.
Veamos algunos ejemplos de líneas que podemos incluir en /etc/exports:

/usr/local 192.168.1.0/255.255.255.0(rw,subtree_check)
/var/software 192.168.1.0/24(ro)
/backup 172.19.123.2(rw,no_root_squash,sync)
/tftpboot/boot-image *(rw,no_root_squash,snyc)

3.- Aumentando un poco la seguridad
La única vez que NFS lleva a cabo la autentificación es cuando el cliente intenta montar un recurso compartido NFS. Para limitar el acceso al servicio NFS y aumentar un poco la seguridad, se utilizan los TCP wrappers.

Los TCP wrappers leen los archivos /etc/hosts.allow y /etc/hosts.deny para determinar si a un cliente particular o red tiene acceso o no al servicio NFS.

Lo primero que se comprueba es si el cliente tiene acceso mediante los TCP wrappers. Una vez que al cliente se le permite acceso gracias a un TCP wrapper, el servidor NFS recurre a su archivo de configuración (/etc/exports), para determinar si el cliente tiene suficientes privilegios para acceder a los sistemas de archivos exportados.

Una vez otorgado el acceso, todas las operaciones de archivos y de directorios están disponibles para el usuario.

Podemos establecer un poco más de seguridad usando /etc/hosts.allow y /etc/hosts.deny para especificar qué ordenadores de la red pueden usar los servicios del servidor nfs.

Por ejemplo:

/etc/hosts.deny

portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

/etc/hosts.allow
portmap:192.168.1.0/255.255.255.0
lockd:192.168.1.0/255.255.255.0
mountd:192.168.1.0/255.255.255.0
rquotad:192.168.1.0/255.255.255.0
statd:192.168.1.0/255.255.255.0

Suponiendo que nuestra red local es la 192.168.1.0, de este modo, denegamos el acceso a todo el mundo, y luego permitimos el acceso tan sólo a las máquinas de nuestra red.

4.- Activar la compartición de archivos
Cada vez que hagamos cambios en el fichero /etc/exports, debemos hacer que nfs vuelva a cargarlo, con el fin de que se apliquen las restricciones que hay en él. Para ello no tenemos más que ejecutar el siguiente comando:

# exportfs -ra

Y listo. Ya tenemos nuestro servidor nfs funcionando.


Si queremos que nuestro equipo pueda usar recursos nfs de otras máquinas. Cliente NFS.


1.- Instalamos nfs-common
Para poder conectarnos a los recursos nfs de servidores, lo que haremos es configurar el equipo como cliente NFS. Para ello, recordemos que debíamos instalar portmap y nfs-common.

Así que, siguiendo las instrucciones del comienzo, comprobamos que tenemos funcionando portmap en el equipo cliente. Una vez comprobado, instalamos nfs-common:

# apt-get install nfs-common

Y ya podemos conectarnos a los recursos de otras máquinas desde un equipo cliente.

2.- Ver qué recursos compartidos en una máquina
Si queremos ver qué directorios tiene compartidos una máquina vía NFS, ejecutamos el comando showmount en la máquina cliente con el parámetro -e:

# showmount -e IPSERVIDOR

Por ejemplo, si tenemos un servidor NFS cuya IP es 192.168.1.2 y queremos ver, desde nuestra máquina cliente, qué directorios tiene exportados, ejecutaremos el comando:

$ showmount -e 192.168.1.2


3.- Conectarse a un recurso compartido de un servidor NFS
Podemos conectarnos a un directorio compartido en una máquina remota, usando el comando mount:

# mount IPServidorNFS:/DirectorioCompartido PuntodeMontaje

Ejemplo: Imaginemos que tenemos un servidor NFS con la siguiente dirección IP: 192.168.1.2 y un directorio compartido: /var/descargas. Supongamos también que en la máquina cliente tenemos un directorio llamado /mnt/nfs donde vamos a montar el directorio de la máquina remota. Montaremos el directorio compartido de la siguiente manera:

# mount 192.168.1.2:/var/descargas /mnt/nfs

Si hacemos un ls /mnt/nfs veremos que el directorio del servidor se encuentra montado.

4.- Conectarse a un recurso compartido cada vez que se inicie la máquina cliente
Si queremos que el directorio compartido vía NFS sea montado en la máquina cliente cada vez que ésta arranque, debemos añadir una entrada en el fichero /etc/fstab.

Imaginemos que tenemos el directorio home compartido en un servidor nfs y queremos montarlo en los clientes. Añadiríamos una línea al fichero fstab de la máquina cliente para montarlo en cada inicio:

192.168.1.2:/home /home nfs rw,hard,intr 0 0


viernes, 12 de diciembre de 2008

update-rc.d: Actualizando el arranque/parada de servicios

El comando update-rc.d nos permite automatizar el proceso de creación y borrado de enlaces a los scripts de inicio, con en fin de iniciar/parar servicios.

Eliminar servicios del proceso de arranque:

Si queremos eliminar servicios del proceso de arranque, no tenemos más que ejecutar el siguiente comando como root:

# update-rc.d -f nombre_proceso remove

Veamos un ejemplo. Supongamos que tenemos el proceso squid y queremos eliminarlo para que no arranque, ejecutaremos el siguiente comando:

# update-rc.d -f squid remove

Iniciar nuevos servicios en el proceso de arranque:

Si queremos crear enlaces usando parámetros por defecto, ejecutaremos:

# update-rc.d nombre_proceso defaults

Al usar la opción defaults, update-rc.d creará enlaces para arrancar los servicios en los niveles de ejecución 2345 y parar los servicios en los niveles de ejecución 016. Por defecto, todos los enlaces tendrán el código de secuencia 20.

Ejemplo. Si ejecutamos:

# update-rc.d ssh defaults

Se crearán enlaces para arrancar el servicio ssh en los niveles 2345 y pararlo en los niveles 016.
Lo que sería equivalente a ejecutar:

# update-rc.d ssh start 20 2 3 4 5 . stop 20 0 1 6 .

O, si así lo preferimos, podemos especificar los niveles en que arranca un proceso, los niveles en los que para, así como la prioridad.

Ejemplo:

# update-rc.d xdm start 20 2 5 . stop 20 0 1 2 6 .

El proceso de arranque en Linux

Voy a contar cuál es el proceso de arranque en Linux, particularizándolo para una máquina con Debian.

Todo el proceso de arranque, se desarrolla en 4 etapas:
  • Al principio, toma el control la BIOS.
  • En una segunda etapa, tomará el control el cargador de arranque.
  • En una tercera etapa, el control pasa al propio kernel Linux.
  • Y en la cuarta y última etapa tendremos en memoria los programas de usuario conviviendo junto con el propio sistema operativo, quienes tomarán el control del sistema.
Primera etapa: La BIOS.

Al encender el equipo, toma el control la BIOS. que realiza una serie de operaciones básicas de hardware.
Una vez que el hardware es reconocido y queda listo para usar, la BIOS carga en memoria el código executable del cargador de arranque y le pasa el control.

Segunda etapa: El cargador de arranque: GRUB.

Existen diferentes cargadores de arranque. En Debian, habitualmente utilizamos GRUB.
Normalmente, el cargador de arranque se guarda en el MBR (Master Boot Record), que como tiene un tamaño muy reducido (Son los primeros 512 bytes del disco), obliga a dividir el arranque en varias etapas. De este modo, la BIOS carga la primera etapa del cargador de arranque. Y, después, esta primera etapa del cargador de arranque cargará el resto del cargador de arranque.

GRUB se carga y se ejecuta en 4 etapas:
  • La BIOS carga la primera etapa del cargador, que se encuentra almacenada en el MBR.
  • La primera etapa carga el resto del cargador. Si la segunda etapa está en un dispositivo grande, se carga una etapa intermedia (llamada etapa 1.5), que contiene código extra que permite leer cilíndros mayores que 1024 o dispositivos tipo LBA.
  • La segunda etapa ejecuta el cargador y muestra el menú de inicio de GRUB, permitiendo seleccionar el SO que se desea arrancar.
  • Una vez seleccionado el sistema operativo que se quiere arrancar, se carga en memoria y se le pasa el control.
Tercera etapa: El kernel de Linux.

El proceso del kernel se realiza en dos etapas:

  • La etapa de carga.
  • La etapa de ejecución.

El kernel generalmente se almacena en un archivo comprimido. Este archivo comprimido se carga y se descomprime en memoria.

Por otra parte, también se cargan los drivers necesarios mediante el initrd. El initrd crea un sistema de archivos temporal usado en la fase de ejecución del kernel.

Una vez que el kernel se ha cargado en memoria y está listo, se lleva a cabo su ejecución.

Lo último que se lanza es el proceso init.

Cuarta etapa: El proceso init.

Al igual que todos los sistemas Unix, Debian arranca ejecutando el proceso init. El archivo de configuración de init es el fichero /etc/inittab, en el que se indica que el primer script que se debe ejecutar es el /etc/init.d/rcS.

Supongamos que se encuentra instalado el paquete sysv-rc (es lo típico), que utiliza enlaces simbólicos en los directorios rc para controlar qué servicios se inician en los diferentes niveles de ejecución.

El archivo /etc/init.d/rcS ejecuta todos los scripts situados en /etc/rcS.d/ para realizar inicializaciones tales como la comprobación y montaje de los sistemas de archivos, la carga de módulos, la inicialización de los servicios de red, la configuración del reloj, etc.

Luego, y por compatibilidad, también ejecuta todos los archivos (excepto aquellos con un `.' en su nombre) situados en /etc/rc.boot/. Este último directorio está reservado para el administrador del sistema y su utilización ha caído en desuso.

Niveles de ejecución

Una vez completado el proceso de arranque, el proceso init iniciará todos los servicios que han sido configurados para ejecutarse en el nivel de ejecución predeterminado.
Este nivel de ejecución predeterminado viene indicado por una entrada id en el /etc/inittab. En Debianel nivel de inicio predeterminado es el nivel 2 (id=2).

Debian utiliza los siguientes niveles de ejecución:
  • 0 (apagar el sistema)
  • 1 (modo monousuario)
  • 2 al 5 (modos multiusuario)
  • 6 (reiniciar el sistema)
Si estamos en un nivel de ejecución, podemos cambiar a otro utilizando el comando telinit.
Ejemplo: Si ejecutamos telinit 1 cambiaremos al modo monousuario.

Al iniciar un nivel de ejecución se ejecutan todos los scripts ubicados en el directorio /etc/rcN.d/. Donde N es un número que representa el nivel de ejecución. Ej: r2.d, rc3.d ...

Los scripts de estos directorios, se nombran siguiendo unas reglas:

La primera letra del nombre del script determina la manera en que se ejecuta el script:
  • Los scripts cuyos nombres comienzan con K se ejecutan con el argumento stop.
  • Los scripts que comienzan con S se ejecutan con el argumento start.
Después de esta primera letra se usan dos dígitos y un nombre de script.

Los scripts se ejecutan en orden, según el orden alfabético de sus nombres.

Los scripts situados en /etc/rcN (donde N es un número que representa el nivel de ejecución) son tan sólo enlaces simbólicos que apuntan a los scripts situados en /etc/init.d/


Personalizar los niveles de ejecución

Habilitar un servicio.- Para habilitar un servicio llamado servicio en el nivel de ejecución N crearemos un enlace simbólico /etc/rcN.d/Sxyservicio al script servicio alojado en ../init.d/.
El número de secuencia xy debe ser igual al asignado al servicio cuando fue instalado el paquete.
Ejemplo: ln -s /etc/rc2.d/S99proftpd ../init.d/proftpd

Deshabilitar un servicio.- Para deshabilitar un servicio, renombraremos el enlace simbólico de modo que su nombre comience con K y no con S y su número de secuencia sea 100 menos xy.
Ejemplo: mv /etc/rc2.d/S99proftpd /etc/rc2.d/K99proftpd

En vez de cambiarle el nombre, es posible eliminar el enlace simbólico S de un servicio de un directorio de niveles de ejecución determinado. Esto no deshabilita el servicio sino que lo deja en un estado "potencial" al menos en lo que respecta al sistema init sysv-rc. Al cambiar de nivel de ejecución el servicio no se lo activará ni se lo detendrá sino que se lo dejará como estaba, independientemente si esta ejecutándose o no.

No es aconsejable realizar modificaciones a los enlaces simbólicos situados en /etc/rcS.d/.

jueves, 11 de diciembre de 2008

Averiguar a qué paquete pertenece un archivo en distribuciones Debian

Muchas veces tenemos algún programita instalado en nuestro linux, pero no sabemos a qué paquete pertenece, con el fin de desinstalarlo, volver a instalarlo, o lo que sea. Ésto es fácil de averiguar utilizando el comando dpkg con el parámetro -S.

# dpkg -S fichero

Veamoslo con un ejemplo:

Imaginemos que tenemos instalado el programa ntfsclone y queremos averiguar a qué paquete pertenece. Pues bien, ejecutamos el siguiente comando:

# dpkg -S ntfsclone

El comando nos mostrará los ficheros que tienen el nombre ntfsclone y a qué paquete pertenecen. En este caso, podemos ver que ntfsclone pertenece al paquete ntfsprogs.

ntfsprogs: /usr/sbin/ntfsclone
ntfsprogs: /usr/share/man/man8/ntfsclone.8.gz

Arranque de terminales ligeros con etherboot

Una opción interesante que tenemos en linux para aprovechar equipos obsoletos es montar una máquina como servidor de terminales y convertir máquinas con pocos recursos en terminales ligeros.

Muchas de las máquinas, más o menos recientes disponen de arranque PXE, con lo que pueden arrancar a través de la red para conectarse a un servidor de terminales. El problema viene cuando las máquinas no disponen de PXE. En este caso, podemos usar etherboot montado en un disco duro o floppy. Para ello, no tenemos más que ir a http://rom-o-matic.net y utilizar un generador de imágenes de arranque que luego podemos descargar. Pero surge otro problema: Las imágenes de arraque se crean de forma particular para cada tarjeta de red. Y en un entorno de terminales ligeros suele haber máquinas con muchas interfaces de red diferentes.

Una solución es descargar una imagen de floppy creada por Alexander Heinz (http://etherboot.anadex.de/) que soporta una cantidad impresionante de tarjetas de red y nos permite arrancar nuestro PC a través de la red sin la necesidad de PXE o una imagen específica de etherboot.

Llevo utilizándolo ya varios años para arrancar terminales heterogéneos y me ha funcionado de maravilla con diferentes interfaces de red.

Características de este floppy:
  • Está basado en Freedos y Syslinux.
  • Usa la versión 5.4.0 de Etherboot, con lo que permite trabajar con todas las interfaces de red soportadas por Etherboot.
  • Dispone de una opción que, usando PCIScan v1.10, autodetecta nuestra tarjeta de red, con lo que no tenemos que hacer nada para que funcione.
  • Además dispone de entradas específicas para arrancar cada tarjeta de re. No obstante, con la auto-detección es suficiente.
  • Dispone de una opción que nos permitirá instalar Etherboot en un disco duro.
Podemos descargar la imagen del floppy desde el siguiente enlace:
http://etherboot.anadex.de/eb_on_hd.ima

Una vez descargada, podemos grabar la imagen en un diskette, ejecutando:
# dd if=eb_on_hd.ima of=/dev/fd0

Una vez grabada la imagen en un floppy, podemos arrancar el equipo desde el floppy y usar la opción: INSTALL etherboot to hard disk / MODIFY this floppy para instalarlo en en disco duro. Ojo! Ésto borrará la tabla de particiones de nuestro disco duro (con lo que perderemos lo que contenga), creará una partición FAT de 5MB e instalará un MBR.

Pero hay otra forma de ejecutarlo, si en nuestra máquina disponemos de GRUB, y es haciendo uso de memdisk, una utilidad de grub que nos permite ejecutar imágenes de floppys.
Aquí dejo un enlace desde el que se puede descargar un fichero llamado etherboot.tar.gz que contiene el fichero eb_on_hd.ima y memdisk:

http://www.mediafire.com/?zu2xjjgnymb

Veamos cómo arrancar este floppy desde GRUB:

Primero descomprimimos el fichero etherboot.tar.gz

# tar xfvz etherboot.tar.gz

Se nos creará un directorio llamado etherboot con los dos ficheros dentro.

Después copiamos los ficheros eb_on_hd.ima y memdisk al directorio /boot de nuestro linux.

Una vez copiados, creamos una entrada como la siguiente en el fichero /boot/grub/menu.lst que nos permitirá iniciar el floppy vía grub:

title Iniciar la máquina como terminal ligero
root (hdX,Y)
kernel /boot/memdisk
initrd /boot/eb_on_hd.ima

NOTA: En la línea root (hdX,Y) sustituid X por el nº de disco duro e Y por el número de partición. Y no olvidéis que tanto el nº de disco como el nº de partición se empiezan a contar desde cero.

miércoles, 10 de diciembre de 2008

WiCD: Herramienta gráfica de conexión a redes alternativa a Network-Manager

He tenido Ubuntu Hardy desde que se lanzó y la verdad es que nunca me ha ido demasiado bien. Así que ayer me puse a actualizar a Intrepid. Como la actualización terminó bastante tarde, lo dejé y esta mañana al intentar conectar a la wifi que tengo en el trabajo, el Network Manager no me funcionaba bien. Intenté usar wifi-radar, pero tampoco conseguía conectar. Por lo que decidí probar WiCD, una herramienta alternativa que me ha gustado mucho y que permite conectar a redes con diferentes sistemas de seguridad, entre ellos WPA, que es lo que tengo.

Además, permite mostrar también la conexión cableada, cosa que me interesa bastante, porque en el trabajo suelo conectarme vía ethernet.

Veamos cómo instalar esta aplicación en ubuntu intrepid:

Lo primero que haremos será abrir un terminal como root y descargar la firma del repositorio:

# wget -q http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -

Con la línea anterior, lo que hacemos es descargar el archivo de clave y añadir la clave al anillo de llaves para seguridad de apt. Este anillo de llaves se encuentra en /etc/apt/trusted.gpg.
Ésto es porque el repositorio se ha creado con secure-apt para proporcionarnos la seguridad de que estamos descargando desde su repositorio.

Una vez que tenemos la clave, editamos el fichero /etc/apt/sources.list y añadimos el repositorio desde el que descargaremos la aplicación:

echo "deb http://apt.wicd.net intrepid extras" >> /etc/apt/sources.list

Una vez añadida la linea anterior, actualizamos la lista de paquetes:

# apt-get update

Y, seguidamente, instalamos la aplicación:

# apt-get install wicd

Una vez instalada, la aplicación debe funcionar. No obstante, hasta que no volvamos a iniciar sesión, no nos aparecerá un icono en la barra de tareas. Así que, podemos cerrar y volver a abrir la sesión.

Veamos cómo instalar esta aplicación en debian lenny:

El procedimiento es el mismo que en ubuntu. Lo único que varía es el repositorio desde donde instalar.

Lo primero que haremos será abrir un terminal como root y descargar la firma del repositorio:

# wget -q http://apt.wicd.net/wicd.gpg -O- | sudo apt-key add -

Una vez añadida la clave al anillo de llaves, editamos el fichero /etc/apt/sources.list y añadimos el repositorio desde el que descargaremos la aplicación:

echo "deb http://apt.wicd.net lenny extras" >> /etc/apt/sources.list

Una vez añadida la linea anterior, actualizamos la lista de paquetes:

# apt-get update

Y, seguidamente, instalamos la aplicación:

# apt-get install wicd

Al igual que en ubuntu, una vez instalada, la aplicación debe funcionar. No obstante, hasta que no volvamos a iniciar sesión, no nos aparecerá un icono en la barra de tareas. Así que, podemos cerrar y volver a abrir la sesión.

En cuanto al uso de la aplicación, es muy sencillo. Lo único que tenemos que hacer es Pulsar en Opciones Avanzadas y pasaremos a introducir los Parámetros para configurar una Conexión. Después, rellenamos las Casillas con los datos que correspondan a nuestra red, y, cuando terminemos, pulsamos en Aceptar.

De todos modos, lo mejor es ver la aplicación porque es muy sencilla de usar.

Ramas de Debian: Actualizando a otra rama

Debian GNU/Linux es una distribución que mantiene 3 ramas:
  • stable.
  • testing.
  • unestable.
Cada una de ellas tiene un nombre y un sentido:

Stable: Esta rama está destinada a ser usada en instalaciones en producción, es decir, en sistemas donde se necesita estar seguro de que el sistema funcionará correctamente sin problemas de fallos, ni bugs y con un alto nivel de estabilidad.

En la rama stable los paquetes no se actualizan constantemente. La rama actualmente stable a día de hoy es Etch. La antigua stable (oldstable) es Sarge.

Testing: Es la rama en la cual cierta cantidad de paquetes ya han sido probados y no han reportado problemas, pero constantemente se hacen nuevas pruebas y añaden nuevas características y paquetes hasta obtener cierto grado de estabilidad.

Esta rama, que cuenta con los paquetes más actualizados, es interesante para aquellos usuarios que desean tener las últimas características y novedades de los paquetes. La rama que está actualmente en testing es Lenny.

Unstable: Es la rama en la que aún hay muchos bugs y los paquetes son inestables o tienen problemas de seguridad. Esta rama es usada fundamentalmente por los desarrolladores de Debian.

No es recomendable para ser usada en producción. La rama unstable siempre se llamará Sid.

¿Cómo se organizan los repositorios de una distribución Debian?

Debian almacena la lista de repositorios donde se encuentran los paquetes en el fichero sources.list, que se encuentra localizado en el directorio /etc/apt

Este fichero contiene líneas del tipo:

deb ftp://ftp.es.debian.org/debian/ stable main contrib non-free

Veamos qué significa cada parte de esta línea:
  • ftp:// indica que se accede al repositorio vía ftp.
  • ftp.es.debian.org/debian es la dirección del repositorio que estamos usando en nuestro sistema y la ruta donde se encuentra la copia de los paquetes. En este caso estamos usando el mirror de España. También podríamos usar, por ejemplo, el de Francia (ftp.fr.debian.org/debian) o cualquier otro.
  • stable es la distribución que estamos usando. Ésto debemos cambiarlo para pasar
    de una distribución a otra.
  • main contrib non-free indican las ramas que vamos a poder utilizar.

¿Cómo se pasa de una rama de Debian a otra?

Imaginemos que en nuestro repositorio estamos usando la rama stable de debian. No tenemos más que editar el fichero /etc/apt/sources.list y cambiar el nombre de la rama a usar en las líneas del repositorio. Imaginemos que tan sólo tenemos un repositorio:

deb ftp://ftp.es.debian.org/debian/ stable main contrib non-free

Si queremos cambiar de stable a testing, tan sólo tenemos que cambiar la palabra stable por testing en la línea.

deb ftp://ftp.es.debian.org/debian/ testing main contrib non-free

Y si lo que queremos es pasar a unestable, cambiaremos la palabra por unestable:

deb ftp://ftp.es.debian.org/debian/ unestable main contrib non-free

Una vez modificado el /etc/apt/sources.list, lo guardamos.

Seguidamente, actualizamos la lista de paquetes:

# apt-get update

Y, por último, hacemos un apt-get dist-upgrade:

# apt-get dist-upgrade

El sistema comenzará a actualizarse. Una vez actualizado, reiniciaremos la máquina y tendremos muestro debian actualizado.

Una vez que una versión testing pasa a estable, la antigua estable seguirá manteniendose durante un tiempo como oldstable.

Por último, tan sólo me queda decir que también podemos usar los nombres concretos de cada versión.

La siguiente línea siempre apuntará a la rama stable de debian, sea cual sea en ese momento:
deb ftp://ftp.es.debian.org/debian/ stable main contrib non-free

En cambio, si usamos:
deb ftp://ftp.es.debian.org/debian/ etch main contrib non-free
Siempre estaremos usando etch.

domingo, 30 de noviembre de 2008

Crear un CD/DVD arrancable con un menú de GRUB

Habitualmente, uso muchas herramientas que vienen en un live cd y ocupan menos de un CD-ROM. Como me resultaba incómodo tener un montón de CD's, hace tiempo me puse a ver la posibilidad de recopilarlas juntas en un CD o DVD, haciendo un menú que me permitiera seleccionar la que quería arrancar.

Hay varias posibilidades, pero la que más me gustó fue usar GRUB, que conozco perfectamente, ya que está disponible en cualquier distro linux.

Para arrancar un CD o DVD con menú, lo único que necesitamos es un fichero llamado stage2_eltorito y un fichero de configuración: un menu.lst.
No necesitamos usar stage1 o stage2, porque el arranque del sistema El Torito es bastnante diferente del proceso de arranque estándar, que ya explicaré, más adelante, en otra entrada del blog.

Veamos cómo crear una imagen de CD/DVD arrancable con GRUB:

1) Primero, para ser un poco organizados, creamos un directorio, donde pondremos todo lo que queramos que incluya la ISO de nuestro CD/DVD:

$ mkdir midisco

Por supuesto, añadimos a este directorio todos los live-cd o floppys que queramos que nuestro disco vaya a tener, organizados como más nos guste.

2) Dentro del directorio, creamos un subdirectorio para GRUB:

$ mkdir -p midisco/boot/grub

Nota: Pasando el parámetro -p a mkdir, se crean todos los directorios padre que falten (no sólo el directorio grub). En el ejemplo, al crear el directorio grub, se crea también el directorio boot, si no existe.

3) Una vez creados los directorios, copiamos el fichero stage2_eltorito. Si tenéis grub instalado en vuestra máquina lo tendréis. En mi máquina se encuentra en el directorio: /lib/grub/i386-pc/
Si no lo tenéis en el mismo sitio, buscadlo con el comando find o con locate.

$ cp /lib/grub/i386-pc/stage2_eltorito midisco/boot/grub

Con ésto, nuestro CD/DVD ya será arrancable mediante grub, pero como lo que queremos hacer es crear un menú que nos permita arrancar diferentes sistemas almacenados en el CD/DVD, crearemos un fichero menu.lst y lo guardaremos en /boot/grub/menu.lst:

$ nano midisco/grub/menu.lst

Como no tengo tanta memoria para recordar todas las cosas diferentes con las que trabajo, en lugar de crear el fichero menu.lst desde cero, lo que suelo hacer es utilizar como modelo un menu.lst, por ejemplo, el que tiene instalado mi máquina y modificarlo para personalizar los sistemas a arrancar.

El último paso, después de añadir todo lo que queremos que contenga nuestro disco, y personalizar el sistema de arranque, sería crear un fichero ISO. Para ello, nos situamos en el directorio en el que tenemos creado el directorio midisco y ejecutamos el siguiente comando:

$ mkisofs -no-iso-translate -U -nobak -R -b boot/grub/stage2_eltorito -no-emul-boot \ -boot-load-size 4 -boot-info-table -o midisco.iso midisco

Como no es fácil de recordar el comando con todos sus parámetros, yo lo tengo hecho en un script bash:

#!/bin/bash
# creaiso.sh
# Create bootable ISO from files in curent directory.
mkisofs -no-iso-translate -U -nobak -R -b boot/grub/stage2_eltorito -no-emul-boot \
-boot-load-size 4 -boot-info-table -o midisco.iso midisco

Tras ejecutarlo, tendremos un fichero llamado midisco.iso que podremos grabar en un CD o DVD.

Como no nos cuesta nada, pasamos a mkisofs el parámetro -boot-load-size 4, necesario para mantener compatibilidad con las BIOS de máquinas antiguas.

jueves, 27 de noviembre de 2008

Ya está disponible la Beta 4 de LinEx Lenix

Ya se encuentra disponible la cuarta beta de LinEx Lenix.

En esta 4ª versión Beta se ha incluido ya un gran número de correcciones y mejoras.
Además, en ella se ha incluido OpenOffice.org 3.0, junto con los drivers desarrollados por OKI para hacer funcionar sus dispositivos en nuestra distribución.

Aquellos que estéis interesados en probarla, podéis descargar esta nueva beta desde el siguiente enlace:
http://mate.linex.org/2008/iso/gnulinex-lenix-beta4.iso

martes, 25 de noviembre de 2008

Importar/Exportar BD mysql

Normalmente uso phpMyAdmin para trabajar con bases de datos Mysql, entre otras cosas porque me resulta muy cómodo y porque al ser una aplicación php, puedo ejecutarla desde cualquier parte de la red, tan sólo con tener instalado un navegador web.

Lo que sucede es que, a veces hay que recurrir a la consola. Por ejemplo, en casos como éste: phpMyAdmin te permite importar ficheros de 2Mb.
Hoy tenía que migrar un portal de un servidor web a otro. Así que, empezando por la BD, tenía que exportarla en el servidor donde estaba para luego, importarla en el nuevo servidor.
Como la BD a importar tenía unos 37 Mb, no he podido usar la aplicación para importarla.

Para exportar ficheros usando phpMyAdmin, no hay problema, ya que no hay límite.

Como la próxima vez que tenga que hacerlo, seguro que no me acuerdo, y, por si a alguien más le sirve, pongo aquí los pasos:


Para exportar la BD en el servidor origen:

# mysqldump -u usuario -p nombre_base_de_datos > archivo.sql

Ejemplo:
# mysqldump -u root -p xoops > dbxoops.sql

Una vez hecho ésto, ya tengo un fichero (dbxoops.sql) con las sentencias sql que crean las tablas de la BD e insertan los datos en las mismas.
Como el archivo obtenido, tiene más de 2Mb, no puedo importarlo usando phpMyAdmin, así que lo cojo y me lo llevo al servidor destino.


Para importar la BD en el servidor mysql destino.

1) He creado la BD (xoops) usando el interfaz de phpMyAdmin (como decía antes, es más cómodo), pero al que le guste, también puede hacerlo mediante consola.

2) Una vez creada la BD, ejecuto la sentencia para importar la estructura y los datos:

# mysql -u root -p nombre_base_de_datos < archivo.sql

Ejemplo:
# mysql -u root -p xoops < xoops.sql

Y ya está. El siguiente paso para terminar de migrar el portal, será copiar todo el directorio donde se almacena el portal a la máquina destino y cambiar los valores particulares del nuevo servidor. Pero eso ya es otro tema.

viernes, 21 de noviembre de 2008

El shell de linux: Usuarios y grupos

No trabajo habitualmente con usuarios locales porque en los centros tenemos centralizados los usuarios en un servidor de LDAP, pero en ocasiones hay que crear algún usuario local. Éstos son algunos de los comandos que suelo usar para trabajar con usuarios y grupos:

Añadir usuarios.

Cuando necesito añadir nuevos usuarios locales, normalmente utilizo adduser, que, además de crear el usuario, crea también su home.
Si queremos crear un usuario, pero no necesitamos crear un directorio home para él, podemos emplear useradd en lugar de adduser.
Podemos ajustar algunas preferencias a la hora de crear usuarios en el fichero: /etc/adduser.conf.

Ejemplo:
# adduser mfernandez

Y el sistema nos preguntará los datos del usuario, además de una password de acceso.
Por defecto, se creará un grupo con el nombre del usuario y éste será el grupo por defecto. Este comportamiento puede modificarse en /etc/adduser.conf.

Ejemplo: Si queremos añadir un nuevo usuario, llamado enavas al sistema, estableciendo users como su grupo principal, podemos hacerlo de la siguiente manera:

# adduser –ingroup users enavas

Ahora bien, si lo que queremos es añadir un usuario a un grupo existente, podemos hacerlo de la siguiente manera:
# adduser usuario grupo

Ejemplo: Supongamos que queremos añadir el usuario enavas al grupo plugdev:

# adduser enavas plugdev

El comando anterior añade el usuario enavas, previamente creado, al grupo plugdev.

Añadir grupos.
Para añadir grupos locales al sistema, podemos emplear el comando addgroup.
También podemos ajustar algunas preferencias a la hora de crear usuarios en el fichero: /etc/adduser.conf.

Podemos añadir un nuevo grupo local al sistema con el comando addgroup.

# addgroup grupo

Ejemplo: Si queremos añadir el grupo profesores al sistema, ejecutaremos:

# addgroup profesores

Una última cosa: De forma alternativa, en lugar de usar los comandos adduser y addgroup, podemos añadir usuarios y grupos empleando otros comandos como useradd y groupadd. Estos comandos leen información de configuración del fichero /etc/login.defs.

Eliminar usuarios.
Para eliminar usuarios podemos usar el comando userdel.

Ejemplo: Si queremos eliminar el usuario local dfernandez, ejecutaremos el siguiente comando:

# userdel dfernandez

Si, además, empleamos el parámetro -r, también se borrará el directorio personal del usuario con todo su contenido.

Ejemplo:

# userdel -r dfernandez

Eliminar grupos.
Para eliminar grupos podemos emplear el comando groupdel.

Ejemplo: Si queremos eliminar el grupo alumnos del sistema local, ejecutaremos:

# groupdel alumnos

Modificar usuarios y grupos
Para modificar las características de los usuarios y grupos se emplean los comandos usermod y groupmod.

Ejemplo: Imaginemos que queremos cambiar el directorio home del usuario dgonzalezs01 para que sea /home/alumnos/dgonzalezs01.

# usermod -d /home/alumnos/dgonzalezs01 -m

La opción -m hace que mueva el contenido del antiguo home al nuevo emplazamiento.

Si lo que queremos es cambiar el grupo inicial al que pertenece el usuario, haremos lo siguiente:
# usermod -g grupo usuario

Ejemplo: Cambia el grupo inicial del usuario jmartinezd01 para que sea profesor.
# usermod -g profesor jmartinezd01

Si queremos cambiar el nombre del usuario:
# usermod -l nuevonombre nombreactual

Ejemplo:
# usermod -l cfernandez carlosfernandez

El nuevo nombre del usuario carlosfernandez será cfernandez.

Y si queremos cambiar el nombre de un grupo, lo haremos de la siguiente manera:
# groupmod -n nuevonombregrupo nombreactualgrupo

Ejemplo:
# groupmod -n profesores profes

Cambia el nombre del grupo profes a profesores.

Algunos ficheros relacionados con las cuentas de usuario son:

/etc/passwd: contiene información sobre cada usuario:
  • ID.
  • grupo principal.
  • descripción.
  • directorio de inicio.
  • shell, etc.
  • También contiene el password encriptado, salvo que se usen shadow passwords.
/etc/shadow: contiene los passwords encriptados de los usuarios, cuando se emplean shadow passwords.

/etc/group: contiene los miembros de cada grupo, excepto para el grupo principal, que aparece en el fichero /etc/passwd.

/etc/skel: directorio que contiene el contenido del directorio de los nuevos usuarios.

miércoles, 19 de noviembre de 2008

Error VERR_HOSTIF_INIT_FAILED en VirtualBox

Éste es un error que me ha dado VirtualBox.

Creé unos interfaces de red virtuales para tener dos máquinas virtuales en una red también virtual. Y al arrancar cualquiera de las dos máquinas, me daba le error VERR_HOSTIF_INIT_FAILED.

Fijándome en el mensaje completo de error, ví que era porque el usuario con el que estaba intentando correr VirtualBox no tenía permisos de lectura/escritura para usar el dispositivo /dev/net/tun.

Los permisos, por defecto, de /dev/net/tun son: 600. El propietario es el root. Y el grupo al que pertenece también es el del root.

Para solucionarlo, teniendo en cuenta que el usuario que ejecuta virtualbox, debe pertenecer al grupo vboxusers:

1) Cambié el grupo de /dev/net/tun a vboxusers:
# chgrp vboxusers /dev/net/tun

2) Le dí permiso de lectura/escritura sobre este dispositivo a este grupo:
# chmod 660 /dev/net/tun

Y ya pude arrancar las máquinas virtuales sin problemas.

Ahora me ha vuelto a dar el error, y sí tenía permisos. Pensándolo bien, me he dado cuenta de que en las máquinas virtuales uso los dispositivos de red virtuales y no los había activado antes de iniciar las máquinas. Un despiste que anoto aquí, para que no se me olvide...

martes, 18 de noviembre de 2008

Wingrub: Instalar/Reinstalar grub desde windows

Siempre ha sido más fácil instalar primero windows y luego linux para tener un sistema dual, principalmente porque linux detecta el sistema operativo Windows y añade una entrada en el menú de grub para que podamos arrancarlo cuando deseemos.

Tampoco es difícil usar una herramienta como super grub disk para re-instalar grub y volver a tener disponible el arranque dual, aunque no es complicado, sí lo parece a la vista de usuarios noveles de linux.

Cuando instalamos linux y más tarde instalamos windows, linux no se borra (a menos que borremos expresamente las particiones donde se encuentra instalado). Lo que sucede es que windows instala su arranque en el MBR, machacando el inicio de grub. Personalmente prefiero usar herramientas como super grub disk, pero si eres un usuario nuevo en linux y trabajas habitualmente con windows, Wingrub te servirá para arreglar el arranque de grub desde windows.

Con Wingrub podremos dejar nuestro MBR tal y como estaba antes de que Windows nos lo machacara. Aquéllos que lo necesitéis, podéis descargarlo desde aquí.
Lo instaláis en windows y lo ejecutáis. Automáticamente detectará los sistemas instalados y os permitirá arreglar vuestro grub.

Por cierto, para aquellos que no lo saben el MBR es el Master Boot Record (El sector de arranque del disco).

Disponible la 3ª beta de gnuLinEx Lenix

Ya se encuentra disponible la tercera beta de gnuLinEx Lenix. Podéis bajarla desde el siguiente enlace: http://mate.linex.org/2008/iso/
Como es una beta, no se recomienda su uso para el trabajo diario, pero será útil para aquellos que quieran colaborar en su desarrollo, o simplemente, probarla.

gnuLinEx se está integrando en Debian Lenny, con lo que se conseguirá una mayor estabilidad en gnuLinEx. Y, al mismo tiempo, LinEx aportará su granito de arena a Debian con aplicaciones propias.

Debian ya incluye en Lenny varios paquetes de LinEx, como por ejemplo:

Además se encuentran disponibles en Debian otras aplicaciones que ya se incorporaron con Debian Etch, como:

jueves, 13 de noviembre de 2008

Un poquito de apache2

Principales ficheros de configuración.
  • El fichero de configuración principal de apache2 es /etc/apache2/apache2.conf
  • También existe otro fichero de configuración: El fichero /etc/apache2/httpd.conf, que viene por compatibilidad. Este fichero está vacío y podemos usarlo para nuestra configuración particular.
  • También tenemos un fichero /etc/apache2/ports.conf en el que podemos definir los puertos en los que escuchará apache.
Sitios virtuales.
En apache2 podemos tener un solo servidor físico con varios sitios virtuales. Pues bien, para gestionar los diferentes sitios, apache2 usa dos directorios: sites-available y sites-enabled:
  • sites-available: Este directorio contiene los ficheros de configuración de todos los sitios (VirtualHost) definidos en este servidor. Al menos existe un fichero de configuración llamado default que se usa como plantilla para crear el resto de sitios.
  • sites-enabled: Este directorio contiene enlaces a las configuraciones definidas en el directorio anterior. De este modo, se indica qué sitios están activos.
Siempre que hagamos cambios en los ficheros de configuración, podemos comprobar que la sintaxis de las modificaciones que hayamos hecho es correcta mediante el comando:

# apache2ctl configtest

Módulos.
apache2 es un servidor modular, es decir, que agrupa funciones en módulos con el fin de que el administrador cargue tan sólo los módulos que va a usar, pudiendo así hacerlo más ligero.
Si todas las funcionalidades posibles fueran incluidas en un sólo componente de apache, ésto lo haría sumamente pesado en cuanto a requerimientos de Memoria RAM y espacio en Disco Duro.

Crear un Virtual Host.
Como ya dijimos antes, con apache2 podemos tener un sólo servidor físico con varios hosts virtuales. Para crear un VirtualHost hacemos una copia del VirtualHost por defecto (localizado en /etc/apache2/sites-available y llamado default):

# cd /etc/apache2/sites-available
# cp default mihost

Ahora que ya tenemos un VirtualHost, editamos el fichero del sitio (misitio en el ejemplo), para definir los valores del ServerName y el DocumentRoot:

ServerName miservidor.midominio.es
DocumentRoot /var/www/mihost/

Además, ajustamos todos los valores de configuración que queramos.

Por último, habilitamos nuestro nuevo sitio. Para hacerlo, lo más fácil es ejecutar el comando a2ensite:

# a2ensite mihost

Y recargamos la configuración de apache2:

# /etc/init.d/apache2 force-reload

Si quisiéramos deshabilitar nuestro sitio, lo haríamos con a2dissite:

# a2dissite mihost

Por supuesto, después de deshabilitarlo, recargaríamos la configuración de apache2:

# /etc/init.d/apache2 force-reload

Otros comandos útiles son a2enmod y a2dismod, que nos permiten habilitar y deshabilitar módulos respectivamente.

Deshabilitar el listado del contenido de directorios.
Siguiendo con el ejemplo anterior, si queremos evitar que los visitantes de nuestra web vean el contenido de cualquier directorio del sitio (al que hemos llamado mihost) no tenemos más que especificar la opción Options -Indexes en el directorio principal (/var/www/) definido en /etc/apache2/sites-available/mihost

<Directory /var/www/>
Options -Indexes
AllowOverride None
Order allow,deny
allow from all
</Directory>

Ahora bien, si lo que queremos es permitir que se listen los contenidos, salvo los de un directorio en concreto, podemos dejar la siguiente configuración en /etc/apache2/sites-available/mihost para permitir los listados:

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all

Y crear un fichero .htaccess en el directorio que queramos evitar listar. Imaginemos que no queremos que se liste el contenido del directorio privado que tenemos en /var/www/privado. Nos movemos al directorio y creamos un fichero .htaccess con el siguiente contenido:
Options -Indexes

Proteger el acceso a un directorio del servidor web mediante contraseña.
Imaginemos que queremos proteger mediante contraseña el acceso al directorio restringido que tenemos en /var/www/restringido.
Para proteger el acceso a un directorio del servidor web mediante contraseña, primero creamos el archivo que contendrá los usuarios y las passwords.

# htpasswd -c /etc/usuariosapache nombreusuario

La opción -c nos permite crear el fichero de claves. Lo usaremos la primera vez y, en sucesivas ocasiones, no será necesario. Una vez creado el fichero, ejecutaremos el comando sin el parámetro -c:

# htpasswd /etc/usuariosapache nombreusuario

Cada vez que creemos un usuario, htpasswd nos preguntará qué contraseña queremos asignarle.

Otra cosa: Sería bueno que el fichero de claves esté fuera de los directorios públicos del servidor web. De este modo, eliminamos la posibilidad de que sea descargado.

Por otra parte, limitaremos los permisos en el sistema para que el fichero usuariosapache sólo pueda ser leido por el usuario www-data (creado para el servidor web).

# chmod 600 /etc/usuariosapache
# chown www-data:www-data /etc/usuariosapache

Una vez hecho todo ésto, nos situamos dentro del directorio a proteger (/var/www/restringido) y creamos un fichero .htaccess con el siguiente contenido:

AuthName “Sólo usuarios autorizados”
AuthType Basic
AuthUserFile /etc/usuariosapache
Require valid-user

Y ya para terminar, hacemos que apache2 lea el fichero .htaccess que hemos creado en el directorio /var/www/restringido, añadiendo el siguiente contenido al fichero /etc/apache/http.conf:

<Directory /var/www/privado/>
AllowOverride AuthConfig
</Directory>

Por supuesto, después recargaríamos la configuración de apache2:

# /etc/init.d/apache2 force-reload

Control de acceso a carpetas.
Si queremos, podemos deshabilitar totalmente el acceso a una carpeta, de tal forma que podremos acceder a los archivos mediante el sistema de archivos, pero no se podrán acceder a ellos vía web.

Para denegar el acceso vía web a una carpeta, para todo el mundo, creamos un archivo .htaccess en esa carpeta que contenga:

#Denegar el acceso a todos
deny from all

Si queremos denegar el acceso a todos, permitiéndolo tan sólo desde una IP específica, creamos un archivo .htaccess en esa carpeta que contenga:

#Denegar el acceso a todos
deny from all
# Permitir el acceso al equipo con IP 10.0.0.1
allow from 10.0.0.1

Y si queremos permitir tan sólo el acceso a un rango específico de IPs , creamos un archivo .htaccess en la carpeta que contenga las siguientes líneas:

deny from all
allow from 192.168.0.0/24


miércoles, 12 de noviembre de 2008

¿Qué hacer si tu regrabadora falla?

Si tenemos problemas con nuestra regrabadora porque no graba o se corta el proceso mientras estamos grabando, lo primero es intentar averiguar si lo que está fallando es el software, así que, podemos probarla desde un cd-live o arrancando con un sistema operativo instalado en un pendrive o disco duro. Pero, como no todo el mundo tiene estos medios, siempre se puede desinstalar el software de grabación para que no queden rastros del mismo, instalar otro diferente y probar si con otro software funciona.

Si con otro software no funciona, puede que el problema sea físico. En cuyo caso, puede que la cosa no tenga arreglo y tengamos que comprar otra grabadora. Puede haberse descalibrado el laser o tener otro problema físico... Así que, si estamos en este caso, siempre podemos intentar flashear nuestra regrabadora, como último recurso, por si ésto soluciona el problema.

Mi regrabadora (Una QSI DVD+-RW SDW-082) fallaba siempre a la hora de grabar DVD's. Así que, ejecuté el dvd+rw-mediainfo para averiguar la versión del firmware instalada en la misma:

# dvd+rw-mediainfo /dev/dvd

Con ello pude ver que la versión del firmware instalado en la misma era LX41. Busqué una versión más reciente y encontré el LX51. Lo descargué, descomprimí y pude ver que el instalador del firmware era un archivo EXE, así que, como no tengo windows, decidí arriesgarme a ejecutarlo con wine, y, ¡bingo! se actualizó sin problemas. Eso sí, reinicié el equipo, como indicaban las instrucciones.

Por si alguien tiene la misma regrabadora que yo, puede descargar el fimrware desde aquí:
Firmware QSI DVD+-RW SDW-082 LX51

Ejecutar un script almacenado en un servidor web

Ésta es una de esas cosas que nos facilitan la tarea a los administradores de linux, que trabajamos habitualmente en terminales (esa pantalla tan negra que tanto miedo da a la gente de winbugs...), por si en algún momento necesitamos ejecutar de forma local un script y no tenemos acceso mediante ssh para copiarlo.

Podemos almacenar un script en un servidor web y usar el navegador lynx (un navegador en modo texto que se ejecuta en un terminal) para ejecutarlo.

lynx tiene un parámetro (dump) que nos permite volcar el contenido de un archivo en la salida estándar.

Por ejemplo, si estoy en una máquina y quiero ver el contenido de un script que tengo almacenado en mi servidor web en la carpeta scripts, abriré un terminal y ejecutaré lo siguiente:

# lynx -dump http://miservidorweb/scripts/miscript.sh

Automáticamente, se me mostrará por pantalla el contenido del fichero miscript.sh

Si ahora, en lugar de visualizar el contenido, quiero ejecutar el script almacenado en el servidor en mi máquina local, no tengo más que pasarle el contenido de la salida estándar a bash. Siguiendo con el ejemplo:

# lynx -dump http://miservidorweb/scripts/miscript.sh | bash

Y listo. El script se ejecutará en mi máquina local.

Imaginaos los usos que se le puede dar a ésto :)

martes, 11 de noviembre de 2008

dvd+rw-mediainfo: Obtener info acerca de la regrabadora y/o el disco

Llevo bastante tiempo con problemas al grabar dvd's con la regrabadora del portátil. Y necesitaba saber qué versión del firmware tenía instalado mi re-grabadora (Una QSI DVD+-RW SDW-082) para flashearla, con el fin de ver si se solucionaban los problemas o tenía que cambiarla por una nueva.

Para averiguar la versión del firmware he utilizado dvd+rw-mediainfo, una herramienta que forma parte del paquete dvd+rw-tools. Ésta herramienta nos muestra información acerca de la unidad de dvd y el disco insertado.

Para ejecutarla, no tenemos más que hacer:

# dvd+rw-mediainfo /dev/dvd

donde /dev/dvd es el dispositivo grabador.

Configuración de red en Linux

En sistemas debian podemos configurar la red editando los ficheros de configuración:
  • /etc/network/interfaces
  • /etc/hostname
  • /etc/hosts
  • /etc/resolv.conf

Fichero /etc/network/interfaces.
Este fichero nos permite definir las interfaces de red existentes en nuestro sistema:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 172.16.43.70
netmask 255.255.0.0
gateway 172.16.255.201

para IP dinamica:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Fichero /etc/hostname

En este fichero, especificaremos el nombre de la máquina.

mihost.midominio.ex

Fichero /etc/hosts

En el fichero /etc/hosts especificaremos la ip junto con el nombre de cada máquina a la que queramos acceder por nombre. Veamos un ejemplo de fichero /etc/hosts:

/etc/hosts:
127.0.0.1 localhost mimaquina
172.19.143.25 servidor
172.19.131.10 ldap

Muy útil cuando no tenemos un servidor de DNS en la red.

Fichero /etc/resolv.conf

En el fichero /etc/resolv.conf especificamos cuáles son los servidores de dominio que usaremos para resolver nombres.

/etc/resolv.conf
:
search midominio.ex
nameserver 172.19.255.101
nameserver 172.19.255.102

lunes, 10 de noviembre de 2008

Linux App Finder: Buscador de aplicaciones linux

Linux App Finder (http://www.linuxappfinder.com) es una web que nos permitirá buscar aplicaciones linux adecuadas a nuestras necesidades. Estas aplicaciones se encuentran clasificadas en categorías.

Además, nos ofrece un listado de software alternativo, de forma que si conocemos una aplicación windows u OS X, podremos buscar su equivalente en linux.

De cada aplicación, podremos ver una descripción, la página web de dicho software (si la tiene), el interfaz gráfico para el que fue diseñada, así como una serie de enlaces de descarga para las diferentes distribuciones en las que se encuentra disponible, como debian, ubuntu, opensuse o PclinuxOS.

miércoles, 5 de noviembre de 2008

Testdisk: Otra herramienta para reparar tablas de particiones y sectores de arranque

TestDisk, como bien dice el título, es una herramienta que nos ofrece la posibilidad de reparar la tabla de particiones de nuestro disco duro o el sector de arranque (MBR).


TestDisk es totalmente gratuito y está diseñado para correr en sistemas operativos:
  • DOS.
  • Windows (9x, NT4, 2000, XP, 2003)
  • Linux
  • FreeBSD
  • NetBSD
  • OpenBSD
  • SunOS
  • MacOS.
Recuerdo que, en una ocasión estaba clonado una máquina de forma remota y tenía abiertos varios terminales, entre ellos, uno a la máquina a clonar y otro al servidor de clonación. Con las prisas, me equivoqué de terminal y me cargué la tabla de particiones del servidor de clonación. Pues bien, gracias a testdisk, pude recuperar la tabla original y restaurarla.

Cosas que testdisk puede hacer (sacado del wiki de Testdisk: http://www.cgsecurity.org/wiki/TestDisk):

* Permite fijar una tabla de particiones recuperando una partición borrada.
* Permite recuperar el sector de arranque de una partición FAT 32 a partir un backup de dicho sector.
* Puede reconstruir un sector de arranque de una partición FAT12, FAT16 o FAT32.
* Permite fijar tablas FAT.
* Permite reconstruir el sector de arranque de particiones NTFS.
* Permite recuperar el sector de arranque de una partición NTFS a partir ded un backup de dicho sector.
* Permite fijar una partición MFT usando una partición MFT de espejo.
* Permite encontrar ficheros borrados en particiones FAT.
* Permite copiar ficheros borrados de particiones FAT, NTFS y ext2/ext3.

Para ver cómo usarlo, paso a paso, lo mejor es recurrir al wiki de testdisk:
http://www.cgsecurity.org/wiki/TestDisk_Step_By_Step

El ejemplo viene en ms-dos, pero es exactamente igual que en linux.

gpart: Reparar una tabla de particiones

gpart es una herramienta que intenta "adivinar" cuál es la tabla de particiones principal de un disco duro de un PC en caso de que la tabla de particiones principal en el sector 0 se encuentre dañada, sea incorrecta o haya sido borrada.

La tabla obtenida por esta herramienta puede ser guardada en un fichero o dispositivo.

gpart soporta los siguientes sistemas de ficheros o tipos de particiones:

* DOS/Windows FAT (FAT 12/16/32)
* Linux ext2
* Linux swap partitions versions 0 and 1 (Linux >= v2.2.X)
* OS/2 HPFS
* Windows NT/2000 FS
* *BSD disklabels
* Solaris/x86 disklabels
* Minix FS
* Reiser FS
* Linux LVM physical volume module (LVM by Heinz Mauelshagen)
* SGI XFS on Linux
* BeOS filesystem
* QNX 4.x filesystem

La forma más cómoda de instalarlo es tirando de apt-get, si encontramos gpart en los repositorios de nuestra distribución (En ubuntu está):

# apt-get install gpart

Y si no encontramos gpart en los repositorios, siempre podemos descargarla desde la web del autor: http://www.stud.uni-hannover.de/user/76201/gpart/

Allí podremos encontrar tres posibles versiones:
  • Una versión en código fuente (en formato .tar.gz), que podemos compilar en nuestra distribución.
  • Otra versión (estática) en formato binario, que podremos usar directamente en linux.
  • Y una última versión (también estática) en formato binario, para freebsd.
Por si alguien no lo sabe, y , por decirlo de alguna manera, las versiones estáticas no tiran de librerías instaladas en la máquina, y pueden usarse directamente sin tener que instalarlas.

Trinity Rescue Kit dispone de esta utilidad entre sus herramientas, por lo que podremos usarlo para chequear particiones.

Modo de uso:

# gpart [opciones] dispositivo

donde dispositivo es el disco que queremos reparar: hda, hdb, sda...

Imaginemos que tenemos un disco sda que queremos reparar. Podemos testearlo directamente:

# gpart /dev/sda

Para grabar la tabla de particiones estimada, utilizamos la opción -W

# gpart -W /dev/sda /dev/sda

Como las opciones son muchas, para más detalles, recomiendo ver el manual (man gpart).

Y si gpart no funcionara, podemos probar con testdisk, otra buena herramienta que en ocasiones me ha sacado de más de un apuro.

martes, 4 de noviembre de 2008

Flashear Linksys WRT54GS V7 con firmware DD-WRT

Como podemos ver en la web del proyecto dd-wrt, hay varias distribuciones diferentes del firmware DD-WRT:

  • La distribución mini contiene todas las funcionalidades de la distribución estándar, con la excepción de chillispot, nocat, rflow, kaid, cliente CIFS, SNMP, IPv6, y sopoerte para tarjetas MMC/SD.
  • La distribución standard (std) incluye todas las funcionalidades, excepto VOIP.
  • La distribución standard-nokaid (std-nokaid) incluye todas las funcionalidades de la versión standard excepto kaid para liberar algo de espacio en la flash.
  • La distribución VOIP incorpora tods las funcionalidades excepto kaid.
  • La edición VPN incluye OpenVPN pero no incorpora IPv6, CIFS client o kaid.
  • La edición micro es una versión reducida para routers con 2MB de flash.
Hoy me he puesto a flashear un router Linksys WRT54GS y la verdad es que todo ha ido bien y se ha actualizado sin problemas con el firmware DD-WRT.
  • Al principio lo he actualizado con DD-WRT v24 (05/20/08) micro.
  • Y después, al ver que existía una versión más reciente, he vuelto a actualizarlo de nuevo, esta vez con DD-WRT v24-sp1 (07/27/08) micro.
En los Linksys WRT54, conforme se han ido sacando versiones nuevas, se ha ido aumentando la velocidad de la CPU, pero, al mismo tiempo, se ha ido reduciendo la cantidad de memoria RAM y la cantidad de memoria flash. Vamos que nos han ido recortando el producto, con lo que cada vez podemos ponerle menos cosas, debido a la falta de memoria.

El WRT54GS que tengo es una versión 7, con un procesador a 240 MHz, 16 MB de RAM y 2 MB de memoria flash. Y con tan poca flash, tenemos que flashearlo con la versión micro.

Veamos cómo flashearlo:

  1. Descargamos los firmwares que vamos a necesitar: vxworkskillerGSv7-v3.bin y dd-wrt.v24_micro_generic.bin.
  2. Configuramos la tarjeta ethernet de nuestro equipo portátil o sobremesa con una ip dentro del rango en que viene configurado el router. Por ejemplo: 192.168.1.100. En linux: ifconfig eth0 192.168.1.100
  3. Si en nuestro equipo no tenemos instalado tftp, lo instalamos: apt-get install tftp
  4. Después conectamos el equipo al WRT54GSv7 con un cable de red en uno de los cuatro puertos del switch que incorpora. ¡Muy importante: No usar una conexión wlan!
  5. Ahora desconectamos el cable de corriente del WRT54GSv7.
  6. Seguidamente pulsamos el botón reset mientras reconectamos la corriente y mantenemos el botón pulsado durante alrededor de unos 20 segundos.
  7. Después abrimos nuestro navegador web y tecleamos http://192.168.1.1 en la barra de dirección.
  8. La pantalla que se nos abrirá nos mostrará unas opciones para actualizar el firmware. Pulsamos el botón Examinar y seleccionamos el siguiente fichero con el que vamos a flashear el aparato: vxworkskillerGSv7-v3.bin
  9. Una vez seleccionado el fichero, pulsamos el botón Apply y comenzará la actualización.
  10. Una vez que la actualización haya terminado, desconectamos la corriente del router y la volvemos a conectar.
  11. Esperamos un par de minutos.
  12. Y volvemos a desconectar el cable de corriente del router y lo volvemos a conectar de nuevo.
  13. Abrimos un terminal y ejecutamos el comando: tftp 192.168.1.1 (Nos estaremos conectando al router vía tftp)
  14. Veremos que en el terminal nos ha cambiado el prompt por el siguiente: tftp> (Es porque nos hemos conectado al router vía tftp)
  15. En la línea de comando tftp> tecleamos: mode octet y pulsamos Enter.
  16. Y en la siguiente línea: tftp> put dd-wrt.v24-micro_generic.bin
  17. Ahora el firmware se tranferirá al router y éste será flasheado. Cuando el proceso haya terminado, el router arrancará automáticamente y ya podremos acceder a él desde el navegador web: http://192.168.1.1.
  18. El nombre de usuario por defecto suele ser: root y la password: admin. No olvidemos cambiarlo.

miércoles, 29 de octubre de 2008

Trinity Rescue Kit: Arrancar equipos a través de la red usando TRK

En la versión 3.3 de Trinity Rescue Kit se ha añadido una nueva característica muy útil, que nos permite arrancar otras máquinas a través de la red desde un sistema TRK.

Con este nuevo añadido, podemos arrancar un sistema TRK desde CD o USB para luego poder arrancar otras máquinas vía PXE, sin tener que realizar ningún cambio en nuestro entorno de red, lo que significa no tener que hacer modificaciones en nuestro servidor dhcp, ni tener que montar tftp ni nfs.

Podemos usar esta posibilidad:
  • Seleccionando la primera opción que aparece tras la opción por defecto en el menú de inicio.
  • Ejecutando el comando trkbootnet después del arranque de TRK.

Crea tu VPN con LogMeIn Hamachi

¿Qué es Hamachi?
LogMeIn Hamachi es un software que nos sirve para crear una VPN (Red Privada Virtual).

Una VPN nos permite establecer una conexión segura y fiable entre dos o más ordenadores remotos, usando como medio de comunicación internet. Hamachi hace esto posible mediante la creación de túneles IP entre cada uno de los clientes que forman dicha red. Y la conexión es segura, dado que el tráfico entre los equipos es cifrado.

Es zero-config, lo que quiere decir que no necesita configuración. Además, existen versiones de Hamachi para Windows, Linux y Mac.

Usando LogMeIn Hamachi podemos acceder al ordenador de casa desde el trabajo o viceversa, pudiendo compartir archivos o enviar archivos de un PC al otro como si estuvieran conectados físicamente en la misma red local. Personalmente, lo he probado conectando un equipo a una red wifi y otro a otra wifi diferente. Y ha funcionado sin problemas.

Mucha gente lo usa para juegos. Dado que LogMeIn Hamachi crea una red local virtual, podemos jugar con los juegos que tienen modo de juego LAN directamente.

Hamachi funciona de la siguiente manera: Los equipos interlocutores reciben la ayuda de un nodo denominado “servidor mediador” para localizarse entre sí y para arrancar la conexión entre ellos. Una vez establecida la conexión, el tráfico deja de fluir a través de los servidores.

LogMeIn proporciona este servicio de forma gratuita para uso personal.
Además, también cuenta con una versión premiun de pago que agrega unas funciones más.
Pero, si vamos a usar Hamachi para compartir recursos entre máquinas amigas, o para dar soporte a algún amigo o familiar, tendremos más que suficiente con la versión gratuita para uso personal.

Veamos cómo instalarlo en linux:
Para instalarlo en linux descargamos el código desde la página de LogMeIn.
Y después de descargarlo, lo descomprimimos:

# tar xvzf hamachi-0.9.9.9-20-lnx.tar.gz

Una vez descomprimido, entramos dentro del directorio que se nos ha creado al descomprimir:

# cd hamachi-0.9.9.9-20-lnx

Y ejecutamos:

# make install

Una vez hecho esto, ya tenemos instalado hamachi en /usr/bin. Ahora, antes que nada, hay que correr el siguiente comando, que nos permitirá configurar una interfaz de tunel:

# /sbin/tuncfg

Para cada usuario con el que se quiera usar Hamachi, es necesario inicializar el programa (generar el par de claves ciptográficas, así como el directorio ~/.hamachi, donde se guardan las claves, la configuración, y el estado). Así que, tan sólo será necesario ejecutar hamachi-init una vez, al principio, para cada usuario.

Para inicializar hamachi para un usuario concreto, ejecutaremos:
/usr/bin/hamachi-init

Para iniciar el demonio de hamachi, ejecutaremos:

# hamachi start

Si lo queremos hacer es detener hamachi, lo haremos con:

# hamachi stop

Y si queremos objtener información del estado del demonio, ejecutaremos hamachi sin ningún parámetro:

# hamachi

Cuando arrancamos hamachi por primera vez, el servicio se encuentra off-line. Para loguearnos en la red hamachi, ejecutaremos:

# hamachi login

Y, si queremos desconectarnos de la red hamachi, ejecutaremos:

# hamachi logout

El demonio recuerda el estado, así que si lo detenemos con hamachi stop sin hacer logout (no es realmente necesario), cuando lo volvamos a iniciar pasará a on-line automáticamente.

Una vez que hacemos el login, podemos unirnos a una red que ya haya sido creada, ejecutando:

# hamachi join nombredelared [password]

Si no especificamos el password de conexión a la vpn indicada, nos lo pedirá.

Una vez que nos unimos a la red, nuestra máquina ya forma parte de ella, aunque todavía no se puede ver con las demás. Para conseguir que nuestra máquina se vea con las demás conectadas a la vpn, ejecutaremos:

# hamachi go-online

Y si queremos hacer que nuestra máquina deje de verse con las demás, ejecutamos:

# hamachi go-offline


Otros comandos:

Para ver los miembros de la red y su estado, ejecutamos:

# hamachi list

Crear una VPN, desde línea de comandos: (una vez que hayamos hecho hamachi start y hamachi login):

# hamachi create
nombredelared [password]

Se nos pedirá la contraseña a establecer. Una vez introducida, la red será creada y ya estaremos conectados a ella, sin necesidad de hacer un join. Aunque sí deberemos hacer un go-online.

Si somos el creador de la VPN, podremos echar a un miembro ejecutando:

# hamachi evict
nombredelared [iphostaechar]

La dirección IP que debemos especificar es la que se nos muestra con el comando hamachi list, o la que podemos ver en hamachi-gui (No la ip real).

Otra cosa que podemos hacer, si somos el creador de la VPN, es eliminarla:

# hamachi delete nombredelared


A continuación dejo un script de inicio que creé para usar con hamachi:

#!/bin/bash

case "$1" in
init)
if [ ! `pidof tuncfg` ]; then
echo Ejecutando tuncfg.
/sbin/tuncfg
else
echo tuncfg ya esta corriendo.
fi

if [ ! -d ~/.hamachi ]; then
hamachi-init
fi
;;
start)
hamachi start
hamachi login
hamachi set-nick majete
;;

stop)
hamachi logout
hamachi stop
;;

restart)
hamachi logout
hamachi stop

if [ ! -d ~/.hamachi ]; then
hamachi-init
fi

hamachi start
hamachi login
;;

status)
hamachi
;;

*)
echo "Usage: $0 {init|start|stop|restart|status}"
exit 1
;;
esac

Por supuesto, antes de usarlo, alguien tendría que crear la VPN con el comando hamachi create. Y los demás usuarios unirse a ella con hamachi join.

miércoles, 22 de octubre de 2008

Ajustar permisos especiales en ficheros y directorios: Sticky bit, SUID Y SGID

Los permisos de los archivos en Linux/Unix se establecen mediante un número octal que permite ajustar los permisos del usuario, el grupo y otros y que varía entre 000 y 777. Y que determinan quién puede leer, escribir y/o ejecutar un fichero o directorio determinado.

Sin embargo, existen unos bits que nos ofrecen la posiblidad de tener unas medidas de protección adicional ajustando permisos especiales sobre ficheros y directorios: El sticky bit, el bit SGID y el bit SGUID.

Su representación en octal es la siguiente:
  • Sticky bit --> 1000.
  • Bit setgid --> 2000.
  • Bit setuid --> 4000.

Sticky bit.

El sticky bit se utilizaba antiguamente en sistemas UNIX para conseguir que el sistema operativo mantuviera en memoria los programas que tenían el sticky bit activado, con el fin de facilitar ejecuciones posteriores. Al permanecer el programa en memoria, no había necesidad de volver a cargarlo.
Como los sistemas de almacenamiento (discos duros, etc...) han mejorado mucho, éste uso ya no es necesario.

Hoy en día, utilizamos el sticky bit con ficheros y directorios.

Cuando se lo asignamos a un directorio, conseguimos que los elementos (ficheros y/o directorios) que haya en ese directorio sólo pueden ser renombrados o borrados por:
  • El propietario del elemento contenido en el directorio.
  • El propietario del directorio.
  • El usuario root.
El sticky bit prevalece sobre los permisos normales y los elementos, lo que quiere decir que tan sólo podrán renombrar o borrar los elementos los usuarios mencionados, aunque el resto de usuarios tenga permisos de escritura.

Ejemplo:

# chmod 1755 /home/aulas

Si queremos comprobar, en nuestro sistema, qué ficheros o directorios tienen el sticky bit activado, usaremos el comando find:

# find / -perm -1000 -exec ls -la {} \;


Bit suid.

El bit SUID activado sobre un fichero indica que todo aquél que ejecute el archivo va a tener, durante la ejecución, los mismos privilegios que quién lo creó. Así que es importante usarlo lo menos posible y con precaución. Si el administrador crea un fichero y activa el bit SUID, todo aquel usuario que lo ejecute, dispondrá, hasta que el programa finalice, de un nivel de privilegio total en el sistema.

El bit SUID o setuid se activa sobre un fichero añadiéndole 4000 a la representación octal de los permisos del archivo y otorgándole además permiso de ejecución al propietario del mismo.

# chmod 4775 /home/prueba

También puede activarse usando el modo simbólico:

# chmod +s /home/prueba

Si hacemos:
#chmod u+s /home/prueba

En la primera terna de los permisos, en lugar de la x, aparecerá una s o una S.
La S aparecerá si no hemos otorgado el permiso de ejecución correspondiente, en cuyo caso el bit no tiene efecto.

No olvidemos que, con ésto, un usuario normal, sin ningún privilegio especial en el sistema, cuando ejecuta el programa con el bit SUID activado, está trabajando con un usuario efectivo (EUID o Effective UID) que, en el caso de que el propietario sea el administrador, sera 0, lo que le otorga todo el poder del administrador.

Y ésto puede no tener mayor importancia en un ejecutable que haga una función muy concreta, pero, si el ejecutable fuera una copia de un shell, el usuario normal tendría todos los privilegios del root mientras no finalice la ejecución, es decir, hasta que no se teclee exit en la línea de órdenes!!!


Bit sgid.

Todo lo que acabamos de explicar con respecto al bit SUID es aplicable al bit SGID tan sólo que aplicado a nivel de grupo del fichero en lugar de propietario.

En el caso del bit SGID, en lugar de trabajar con el EUID del propietario, todo usuario que ejecute un programa al que se le ha activado el bit SGID, tendrá los privilegios del grupo al que pertenece el archivo.

El bit SGID se activa sobre un fichero sumando 2000 a la representación octal del permiso del fichero y dandole, además, permiso de ejecución a la terna de grupo.
Para ver si hemos activado el bit SGID veremos si, al hacer un ls -l, aparece s o S aparecerá en lugar de la x en esta terna.

Si el fichero es un directorio y no un archivo plano, el bit SGID afecta a los ficheros y subdirectorios que se creen en él. Y los ficheros y sudirectorios tendrán como grupo propietario al mismo que el directorio al que se le ha aplicado el bit SGID, siempre que el proceso que los cree pertenezca a dicho grupo.