miércoles, 25 de diciembre de 2013

Separación de privilegios en OpenSSH

Muchos servicios del sistema operativo requieren privilegios especiales para poder ejecutar sus respectivas tareas. Un error de programación en un servicio que posea tales privilegios abre la puerta para comprometer al sistema mediante la adquisición no autorizada de permisos. En el peor de los casos, un atacante remoto podría alcanzar privilegios de superusuario.
[Mediante la separación de privilegios], aun cuando existan errores en partes no privilegiadas, los mismos no pueden utilizarse para escalar privilegios. [Este procedimiento] es especialmente útil para servicios del sistema que autentican usuarios.
El principio básico de la separación de privilegios consiste en reducir la cantidad de código que se ejecuta con permisos especiales sin afectar o limitar la funcionalidad del servicio. Esto se logra al dividir una aplicación en dos o más partes: una de ellas (denominada monitor) es ejecutada con privilegios y la/s otra/s (esclavo/s) sin ellos. Esto disminuye la exposición a bugs en el código que es ejecutado con privilegios. Idealmente, la única consecuencia que resulta de un error en un servicio que esté corriendo con separación de privilegios es la denegación del servicio al atacante mismo.
La línea del archivo de configuración de sshd que habilita la separación de privilegios es la siguiente:
Con esta configuración, estos son los procesos relacionados con ssh:
La salida del comando ps -ef muestra los siguientes datos:
  1. UID (User ID)
  2. PID (Process ID)
  3. PPID (Parent Process ID)
  4. C (Tiempo de CPU utilizado recientemente por el proceso, en términos de ciclos de reloj, más información aquí)
  5. STIME (Start TIME)
  6. TTY (terminal en la que está corriendo el proceso, una ? indica que el proceso es un daemon que está ejecutándose en segundo plano)
  7. TIME (tiempo de CPU utilizado por el proceso desde que fue iniciado, en términos de minutos y segundos)
  8. CMD (argumentos de la línea de comandos que iniciaron el proceso)
En la imagen anterior vemos que el demonio ssh (PID 3287) fue iniciado por init (PID 1). A su vez, sshd inició el monitor (parte de la aplicación que posee privilegios, PID 3354), el cual luego de la autenticación hizo lo propio con la sesión de usuario remota (PID 3430) creando una pseudo-terminal para la misma.
Este ejemplo muestra dos operaciones que requieren privilegios de superusuarios en la máquina remota:
  • Antes de la autenticación, el monitor es la parte de la aplicación que chequea la contraseña provista por el usuario (o la clave pública) contra el archivo de contraseñas (/etc/shadow) o contra la clave pública del cliente previamente guardada en el servidor, según corresponda. Si la autenticación es exitosa, se crea la sesión de usuario; caso contrario, se niega el acceso.
  • Después de la autenticación, se crea una pseudo-terminal para la sesión de usuario.
De esta manera, el monitor y el esclavo corren separadamente y se reduce considerablemente la posibilidad de un ataque por escalación de privilegios.
Ahora voy a deshabilitar la separación de privilegios y reiniciar el servidor ssh, para luego verificar los procesos nuevamente:
En este caso podemos ver que tanto sshd como el monitor fueron iniciados directamente por init, y aunque se lanzó la sesión remota de usuario correctamente, no se dispone de la "interfaz" de protección entre las peticiones efectuadas y la aplicación con privilegios. De esta manera, si un atacante lograra encontrar un bug en el código, podría fácilmente explotarla para escalar privilegios sobre el sistema.
Sin embargo, se puede ver en este caso que el monitor retuvo su PID y solamente cambiaron los correspondientes al esclavo y a sshd. Al inspeccionar el estado de los procesos luego de finalizar la conexión anterior e iniciar una nueva, podemos ver lo siguiente:
Por último, vuelvo a editar el archivo /etc/ssh/sshd_config para volver a utilizar separación de privilegios (recordar que más allá de reiniciar el servidor ssh, los cambios recién serán aplicados a la próxima conexión):

Nota: La teoría de este post está basado en el paper "Preventing Privilege Escalation" por Niels Provos, Markus Friedl, y Peter Honeyman, el cual puede descargarse desde este link.

martes, 24 de diciembre de 2013

Contenido de /proc (Parte 1)

El directorio /proc contiene varios archivos y subdirectorios que muestran información sobre el kernel, incluso los recursos del sistema que están siendo utilizados. Dichos archivos y directorios no son "reales" (el tamaño en disco que acusan es 0) sino que representan una especie de "ventana" que permite observar qué está sucediendo en el kernel en un momento dado. En otras palabras, el directorio /proc puede verse como el centro de control e información del kernel. Para más detalles, se puede consultar su man page.
Esta publicación, y las que siguen, serán llevadas a cabo sobre un servidor casero con Debian Wheezy 7.2 y kernel 3.2.0-4-686-pae:
Un listado del contenido de /proc nos muestra lo siguiente (en azul los directorios, en cyan los enlaces simbólicos, y en blanco los archivos):
Lo que primero nos llama la atención es que hay varios directorios cuyo nombre es un número (1, 10, 12, 13, 3284, etc). Los mismos reciben el nombre de directorios de proceso debido a que están relacionados con el PID de un cierto proceso y contienen información específica sobre el mismo. El usuario y el grupo que figuran como dueños de cada directorio son los mismos que el usuario y el grupo bajo los que está corriendo dicho proceso.
Cuando un proceso finaliza su ejecución, o es terminado, su directorio asociado dentro de /proc desaparece.
Por ejemplo, voy a buscar el PID que corresponde a mi sesión de usuario (conexión por ssh) desde la PC cliente que estoy usando para conectarme al servidor:
Puedo ver que dentro del directorio /proc hay un subdirectorio 3695, y el contenido del mismo es el siguiente:
Algunos de los archivos más interesantes dentro del mismo son los siguientes:
  • cmdline: contiene los argumentos de la línea de comandos que se utilizaron para iniciar el proceso.
  • cwd: es un enlace al directorio actual del proceso.
  • exe: es un enlace al ejecutable del proceso.
  • status: muestra el estado del proceso de una manera más "amigable".

Más información:

jueves, 12 de diciembre de 2013

Web form con html5, php, jQuery, archivos adjuntos y MySQL como RDBMS

Para que un formulario html permita la carga de archivos adjuntos debe tener seteado el siguiente atributo:

<form method="post" action="cargar.php" enctype="multipart/form-data">

Html5 brinda, entre muchas otras innovaciones, la posibilidad de agregar controles de contenido del tipo number que permiten fijar valores iniciales, mínimos y máximos, e intervalos de salto:



Si se necesita utilizar una lista desplegable que permita la selección de varios ítems de manera simultánea, se debe agregar el atributo multiple="multiple" e indicar que el resultado de la selección estará compuesto por un arreglo de elementos:

<select name="partes[]" multiple="multiple">


Para que el archivo cargar.php pueda procesar estos valores correctamente, se le debe indicar que separe los elementos provenientes del formulario con un separador a nuestra elección. En el caso siguiente se muestra el uso de la coma-espacio para cumplir esta función:

join(', ', $_POST['partes'])

Resultando en:
Cabeza, Cuello, Hombro

(Se puede asignar el resultado de esa función a una variable que posteriormente será la que se utilice para la consulta SQL).

Para evitar errores al ingresar fechas y horas, se puede utilizar el excelente plugin de jQuery escrito por Trent Richardson (distribuido bajo licencia GPL). El siguiente ejemplo utiliza la función datetimepicker para desplegar un calendario con fecha y hora, o con almanaque solamente, cuando un control con id datetime o class datepicker recibe foco, respectivamente (debe colocarse dentro de los tags de head):


Ejemplo de calendario con fecha y hora

Ejemplo de calendario con fecha únicamente

El formato de la fecha puede preformatearse mediante Javascript en el lado del cliente (ver ejemplo anterior) o hacerse posteriormente en el lado del servidor utilizando PHP utilizando las funciones date y strtotime (string to time):
$fecha_accion1 = date("Y-m-d H:i:s", strtotime($_POST['fecha_accion1']));

miércoles, 16 de octubre de 2013

Actualización de Debian Wheezy 7.2

El día 12 de octubre de 2013 el proyecto Debian anunció la disponibilidad inmediata de la segunda actualización de la versión 7, Debian Wheezy 7.2, la cual de por sí no representa una nueva versión del sistema operativo, sino una actualización estable propiamente dicha de varios paquetes contenidos en Wheezy.
Esta publicación muestra los pasos que seguí para actualizar mi server a partir de las instrucciones que se brindan en el sitio oficial del proyecto.
Primero mostramos la versión actual del sistema operativo:


Agregamos las siguientes fuentes al archivo /etc/apt/sources.list (líneas 9 y 10):


Tras lo cual procedemos a actualizar la lista de los paquetes disponibles con el comando aptitude update y el sistema en sí con aptitude dist-upgrade (el cual por razones históricas todavía continúa siendo un sinónimo de aptitude full-upgrade, de acuerdo al man page de aptitude):

Luego de llevar a cabo el proceso, volvemos a consultar la versión actual del sistema operativo:

lunes, 29 de julio de 2013

Administración de usuarios en Linux (Parte 1): Agregar usuarios y análisis de los archivos /etc/passwd y /etc/shadow

Para agregar un usuario en un sistema Linux, nos logueamos como root y utilizamos el comando
adduser <nombre_de_usuario>
A continuación, podemos llenar la información solicitada (la cual es opcional salvo la contraseña) para identificar mejor al usuario que estamos creando (es decir, para poder relacionarlo con una persona real):


Dicha información es almacenada en dos archivos:
/etc/passwd

Como podemos ver, cada línea de este archivo representa el registro que contiene la información correspondiente a cada usuario, y está compuesta por 7 campos (separados por ":"), a saber:
1) Nombre de usuario
2) ¿Encriptar la clave y guardar la versión encriptada en el archivo /etc/shadow? (Una "x" indica que este proceso se lleva a cabo, mientras que cualquier otro caracter -generalmente "*" se utiliza para deshabilitar la cuenta). Cabe destacar que por razones de seguridad, solamente se guarda la contraseña encriptada. Cuando un usuario intenta loguearse en el sistema se encripta la clave que ingresa y se compara con la almacenada en /etc/shadow; si ambas son iguales se permite el acceso al mismo.
En mi experiencia, quitar la "x" del segundo campo es una forma de permitir el login sin contraseña de un usuario local del sistema (se puede utilizar este método para recuperar el acceso como root si no se conoce la contraseña del superusuario. Para esto obviamente es necesario disponer de acceso físico al equipo y utilizar una herramienta de booteo tal como un LiveCD/DVD/USB que permita montar los sistemas de archivos locales y modificar la línea correspondiente en el archivo /etc/passwd).
¡CUIDADO CON ESTO! Ya que cuando se cambie la contraseña del usuario en cuestión, ya sea que lo haga él mismo utilizando el comando passwd o que lo haga el superusuario, la nueva contraseña se almacenará encriptada en el archivo /etc/passwd (el cual pueden leer todos los usuarios). Esto representa un serio problema de seguridad:

Si se llegase a utilizar el método descrito para cambiar la contraseña de root, o si se desea permitir el login local sin contraseña, antes de cambiar la contraseña del usuario en cuestión, se debe volver a colocar la "x" en su lugar, para luego proceder a cambiar la clave normalmente:


3) ID de usuario. El UID 0 es el perteneciente a root, desde el 1 hasta el 999 están reservados para usuarios del sistema (procesos o daemons), y desde 1000 en adelante se utilizan para los usuarios "comunes" o locales del sistema.
4) ID de grupo primario (GID). El GID 0 es el perteneciente a root, desde el 1 hasta el 999 están reservados para usuarios del sistema (procesos o daemons), y desde 1000 en adelante se utilizan para los usuarios "comunes" o locales del sistema. Se guarda en el archivo /etc/group. En Linux, los grupos representan un segundo anillo de seguridad en lo que a permisos respecta.
5) Información del usuario
6) El home (directorio personal) del usuario. Este es el directorio en el que se encontrará el usuario cuando ingrese al sistema. Si este campo está vacío, "/" (raíz del sistema de archivos) se convierte en el directorio personal del usuario.
7) Ruta absoluta a un comando o shell que utilizará el usuario al loguearse (no tiene que ser precisamente un shell, pero de no ser así el sistema no tendrá mucha utilidad).
Podemos ver en la línea n° 6 del primer paste que durante el proceso de creación de un usuario, se copian a su home los archivos que se encuentran en el directorio /etc/skel, que se utilizarán para guardar las preferencias del perfil del usuario (.profile), de su entorno de shell (.bashrc), y de las acciones a realizar cuando cierra sesión (.bash_logout). Adicionalmente se creará dentro del home del usuario el archivo .bash_history en el que se registrará el historial de comandos del mismo:

/etc/shadow
En este archivo se guardan, entre otras cosas (como veremos a continuación) las contraseñas encriptadas de los usuarios:


Otra vez nos encontramos con un registro por línea, con campos separados por ":". El significado de los mismos es el siguiente:
1) Nombre de usuario
2) Contraseña encriptada. Un signo "$" al comienzo es indicador que el cifrado se llevó a cabo utilizando el algoritmo MD5.
3) Días transcurridos desde el 1 de enero de 1970 hasta la fecha correspondiente al último cambio de contraseña.
4) Cantidad mínima de días entre cambios de contraseña, es decir, la cantidad de días que restan hasta la fecha en que se permitirá un cambio de contraseña.
5) Cantidad máxima de días (duración) de la contraseña, luego de la cual el usuario tendrá que cambiarla. 6) Advertencia, número de días antes del vencimiento (expiración) de la contraseña en el que se comenzará a mostrar un mensaje de advertencia avisando de la necesidad de cambiarla.
7) Deshabilitación de cuenta, número de días luego del vencimiento de la clave en que se deshabilitará la cuenta.
8) Cuenta deshabilitada, número de días transcurridos desde el 1 de enero de 1970 hasta el día que la cuenta fue deshabilitada.

¿Por qué los datos de los usuarios se guardan en un archivo y las contraseñas en otro? La razón es que si el archivo en el que se guardan las claves pudiera ser leído por cualquier usuario, se tendría acceso a las contraseñas (encriptadas, sí, pero acceso al fin) y eso representaría un grave problema de seguridad ya que eventualmente podrían ser descifradas con relativa facilidad si no se cuenta con una política de cambio y fortaleza de claves adecuada.
Para demostrar este hecho, utilizando la herramienta john the ripper intentamos crackear la contraseña del usuario recién creado, y vemos que el proceso consume una gran parte de los recursos del sistema (cosa que no es mayor problema si se cuenta con un equipo dedicado a esta tarea).

Precisamente en el segundo campo se puede ver la contraseña del usuario jperez (1234):
(aunque el proceso para crackear una contraseña tan simple duró 44 minutos, hay que tener en cuenta que esto demuestra que SÍ SE PUEDE LOGRAR, y el tiempo se puede disminuir utilizando un equipo que cuente con mayores recursos de hardware). Esta prueba fue realizada en PC Compaq Presario ("modelo" 2000) con 256 MB de RAM y procesador Intel Celeron de 566 MHz.

sábado, 22 de junio de 2013

Convertir un archivo .nrg (creado con Nero) en una imagen .iso

Dos posibilidades:

1) Usar el comando dd. La diferencia entre una imagen nrg y una iso es un header de 300KB que Nero agrega a un archivo iso. Por este motivo, podemos "cortar" ese encabezado y tendremos la imagen iso original.
dd bs=1k if=cd-image.nrg of=cd-image.iso skip=300
2) Utilizar una herramienta llamada nrg2iso, disponible desde repositorios:


nrg2iso cd-image.nrg cd-image.iso

Instalar y compartir un escáner en red con xsane

En un post anterior escribí sobre la instalación de la impresora Epson CX-3900 en Debian Squeeze. Esa impresora en particular es una AIO y esa publicación solamente detallaba cómo instalar la funcionalidad de impresión.

Como complemento, se puede instalar también el escáner y compartirlo en red.

PRIMER PASO: Instalar el paquete xsane tanto en el servidor como en los equipos desde los que se desee acceder al escáner:

SEGUNDO PASO: Configurar el servidor para aceptar conexiones. Editar el archivo /etc/default/saned:
# Set to yes to start saned                                                     
RUN=yes
TERCER PASO: Especificar las direcciones IP que podrán utilizar el escáner (en /etc/sane.d/saned.conf):
192.168.1.0/24
CUARTO PASO: En el cliente, indicar la IP del servidor al cual está conectado el escáner (en /etc/sane.d/net.conf):
192.168.1.10
Adaptado de: https://help.ubuntu.com/community/ScanningHowTo

jueves, 20 de junio de 2013

12 razones por las cuales los mejores Administradores de Sistemas Linux son unos vagos

Esta publicación no es de mi autoría. Es una traducción del artículo original publicado en el Google+ de Mitesh Shah. ¡Que lo disfruten!

El trabajo llevado a cabo por los administradores de sistemas no es visible a otros grupos de IT ni a los usuarios finales. La mayoría de estas personas miran a los sysadmins y se preguntan la razón por la que nunca parecen tener nada para hacer.

Si ustedes llegan a ver a algún sysadmin que está siempre corriendo por todos lados, tratando de apagar incendios, y enfrentando problemas de producción constantemente, se puede llegar a pensar que está haciendo su trabajo - lo cual en realidad no es así.

Por otra parte, si ven a un sysadmin que pareciera no estar haciendo nada y con una actitud relajada, pueden estar seguros de que sí está haciendo su trabajo.

Las siguientes son 12 razones por las que un sysadmin vago es el mejor que existe.

1) ¿Quién es el jefe? La razón principal por la que el sysadmin vago es el mejor que existe es debido a su actitud. Él mira a las máquinas de una manera un tanto diferente de lo que lo hacen otros departamentos de IT. Hay una diferencia entre los desarrolladores y los sysadmins. Los desarrolladores piensan que su función principal consiste en servir a los equipos desarrollando código (no hay nada malo con eso, ya que parece que disfrutan al hacerlo). Por otro lado, los syadmins piensan al revés - su modo de ver las cosas es que las máquinas deben estar a su servicio, y todo lo que tienen que hacer es "alimentarlas", "mantenerlas felices", y dejar que ellas se encarguen de hacer el trabajo pesado, mientras ellos pueden relajarse y ser vagos. El primer paso hacia convertirse en un sysadmin vago es un pequeño cambio de actitud, y hacerle saber a los equipos quién es el jefe.

2) Escribe scripts para trabajos repetitivos. Ser vago significa ser inteligente. Un sysadmin inteligente domina todos los lenguajes de scripting (bash, awk, sed, etc.). Cada vez que se ve forzado a realizar cualquier tarea, y si existe aun la mínima posibilidad de que en el futuro sea necesaria nuevamente, escribe un script para hacer el trabajo; de esta manera, cuando se requiera otra vez más adelante, no hay que pensar - solamente volver a ejecutar el script.

3) Hace copias de respaldo (backup) de todo. Ser vago significa hacer backups. Un sysadmin vago sabe que no hace falta mucho esfuerzo para crear un proceso de backup, y crea scripts para hacer copias de respaldo para todas las aplicaciones y sistemas críticos. Cuando el espacio en disco no es un incoveniente, agenda el backup para todas las aplicaciones (incluso para aquellas que no son críticas). De esta manera, cuando algo sale mal, no se le mueve un pelo, porque simplemente tiene que hacer una restauración del backup, y luego puede volver a hacer lo que sea que estaba haciendo.

4) Confecciona un plan de recuperación ante desastres. A los sysadmins no les gusta andar corriendo por todos lados cuando las cosas salen mal. Cuando todo está yendo bien, se toman un tiempo para crear un plan de contingencia para seguirlo cuando sea necesario y restaurar todo a su correcto funcionamiento rápidamente.

5) Configura sistemas con un alto grado de redundancia. Los sysadmins odian recibir llamadas en medio de la noche cuando se produce algún fallo menor de hardware. Por ese motivo, se aseguran de que todos los componentes sean altamente redundantes (esto incluye tanto el hardware como el software). Por ejemplo, configuran dos placas de red, dos fuentes de energía, dos discos duales, etc. En pocas palabras, tienen "dos" de todo. De esta manera, cuando un componente falla, el sistema continúa funcionando y el sysadmin vago puede ocuparse del asunto tranquilamente de manera personal al otro día.

6) Reserva lugar para un crecimiento no esperado. El sysadmin vago nunca permite que su sistema corra a plena capacidad, y siempre reserva lugar o recursos para manejar un crecimiento no esperado inicialmente. Se asegura que el sistema tenga suficientes recursos de CPU, RAM, y espacio en disco disponibles. Cuando la unidad de negocio decide volcar toneladas de datos de un día para el otro, no tiene que hacerse mayor problema sobre la forma en que manejar ese crecimiento no anticipado.

7) Es proactivo. Ser vago no significa que uno simplemente se está rascando siempre. En realidad, significa ser proactivo. Los sysadmins vagos odian tener que actuar de repente ante una situación, y por esta razón siempre están anticipando inconvenientes o crecimiento. Cuando tienen un tiempo libre, siempre están ocupados en proyectos de manera proactiva de tal manera que les ayuden a evitar futuros inconvenientes o crecimiento imprevistos.

8) Ama los atajos de teclado. Los sysadmins vagos conocen todos los atajos de teclado para sus aplicaciones favoritas. Si en su trabajo diario tiene que pasar un tiempo considerable trabajando con una aplicación, lo primero que va a hacer es aprender a dominar los atajos de teclado para la misma.

9) Domina la línea de comandos. Todos los sysadmins vagos son maestros en la línea de comandos. Si alguna vez ven a un sysadmin haciendo algo desde una interfaz gráfica de usuario (GUI) cuando lo mismo se puede lograr desde la línea de comandos, pueden estar seguros de que se trata de un sysadmin que no es vago. Hay dos razones por las que los sysadmin vagos aman la línea de comandos: la primera es que puede hacer todo rápidamente desde ahí, y la segunda es que de esa manera se siente el jefe de la situación, en vez de que lo sea el sistema. Cuando se usa la línea de comandos, uno está en control de la situación ya que sabe exactamente lo que se desea hacer; cuando usa una GUI, se está a las buenas del diagrama de flujo de la misma.

10) Aprende de sus errores. Los sysadmins vagos odian cometer el mismo error dos veces y tener que lidiar con inconvenientes repetitivos. Cuando sucede un imprevisto, trabaja para solucionarlo, analiza la razón por la que se produjo, e inmediatamente organiza todo lo necesario para que no vuelva a suceder.

11) Aprenden tecnologías nuevas. No hay nada malo en aprender una nueva tecnología para conseguir un mejor trabajo, o para mantenerse al día. Pero a los syadmins vagos no les atrae hacer las cosas por estos motivos, sino que lo hacen para tener el control de todos los sistemas en todo momento. Por este motivo, cuando surge una nueva tecnología, se toma el tiempo de estudiarla, y eso le da las herramientas para mantener ocupado al sistema, mientras él puede continuar relajándonse. Aprende nuevas tecnologías por una razón egoísta y vaga.

12) Documenta absolutamente todo. No todos los sysadmins vagos hacen esto - solamente los mejores. La razón es que no les gusta ser molestados cuando están de vacaciones. Entonces, ¿qué es lo que hace? Documenta todo, para que cuando no se encuentra presente, otros sysadmins juniors puedan ocuparse de las tareas de rutina y mantener todo funcionando mientras él disfruta sus vacaciones. La otra razón por la que los buenos sysadmins documentan todo es porque tienden a olvidar las cosas - para no tener que analizar o investigar la misma cuestión dos veces, razón por la cual utilizan su documentación para entender y recordar lo que hicieron en una ocasión anterior.

martes, 4 de junio de 2013

Physical Address Extension (PAE) o Extensión de Dirección Física

En informática, la Extensión de Dirección Física (PAE por sus siglas en inglés, Physical Address Extension) es una característica que permite a CPUs de 32 bits con la arquitectura x86 acceder a un espacio de direcciones físicas (incluyendo memoria RAM y memory-mapped devices, o registros de los dispositivos como si se trataran de direcciones de memoria convencionales) mayor que 4 GB.

Soporte por parte del Sistema Operativo

Microsoft Windows: implementa PAE si se arranca con la opción adecuada, pero las ediciones de escritorio actuales de 32 bits restringen el espacio de direcciones físicas dentro del rango de los 4GB aun en modo PAE. De acuerdo a Geoff Chappell, esto se debe a la política de licencias de Microsoft y el Microsoft Technical Fellow Mark Russinovich menciona la inestabilidad de algunos drivers por encima de ese rango. Existen parches no oficiales que permiten pasar por alto esta limitación impuesta por Microsoft, pero no se garantiza la estabilidad del sistema.

Linux: el kernel Linux incluye soporte completo para PAE comenzando con la versión 2.3.23 (al día de hoy, 4 de junio de 2013, la versión actual es la 3.9.4), permitiendo que equipos de 32 bits accedan a un espacio de direcciones físicas de hasta 64 GB. Un kernel con soporte para PAE requiere que el procesador posea la misma característica. Ya en 2012, algunas distribuciones populares de Linux dejaron de distribuir kernels sin soporte para PAE (por ejemplo, Red Hat Enterprise Linux / CentOS comenzando por la versión 6.0, Ubuntu y sus derivados desde la versión 12.10). Fedora y Debian todavía distribuyen kernels con y sin soporte para PAE.

(Traducido de Wikipedia)

Para verificar si el microprocesador soporta PAE:
grep --color=always -i PAE /proc/cpuinfo

Crear imagen iso de una unidad flash y extraer sus contenidos

Window$ no ofrece soporte de manera nativa para crear imágenes iso ni para extraer los contenidos de una generada previamente. Hay muchos programas que ofrecen más o menos esta funcionalidad, pero como dije, ninguno viene instalado junto con el sistema operativo. Si no se cuenta con una conexión a Internet o con el ejecutable de uno de esos programas, no hay manera de realizar esta tarea.
GNU/Linux, por otra parte, permite realizar ambas tareas de manera muy fácil desde la línea de comandos:
1) Para crear la imagen iso con los contenidos de la unidad /dev/sdb, en el directorio actual:
dd if=/dev/sdb of=usb-imagen.iso
2) Para extraer los contenidos:
  • Crear el directorio /mnt/iso que se utilizará para montar la imagen iso:
mkdir /mnt/iso
mount -o loop usb-imagen.iso /mnt/iso
(La opción -o junto con el argumento loop permite montar un archivo (usb-imagen.iso en este caso) como si fuera un dispositivo de bloques).
  • Ir al punto de montaje del pseudo-dispositivo y copiar sus contenidos a otro directorio:
cd /mnt/iso
cp -r * /tmp
Nota: Si el comando mount devuelve un mensaje diciendo que se debe especificar el tipo de sistema de archivos para llevar a cabo el montaje, utilizar la opción -t seguida del argumento iso9660.

martes, 7 de mayo de 2013

Actualizando GNU/Linux Debian de 6.0.x Squeeze a 7.0.0 Wheezy

INTRODUCCIÓN

Como es costumbre, las versiones de Debian siempre llevan el nombre de un personaje de las películas Toy Story, y el equipo de desarrollo de Debian anunció la semana pasada que la versión 7.0 (llamada Wheezy) entraba en estado estable a partir del día domingo 5 de mayo de 2013, y se publicaron las notas de la versión junto con la guía de actualización. Dicen las "malas lenguas" que por ahí es conveniente hacer una reinstalación en vez de una actualización, pero siendo que mi servidor es de pruebas, y que voy a tratar de seguir al pie de la letra las instrucciones, me voy a animar a actualizar ;).

[Imagen tomada de aquí]

Los primeros tres capítulos de la guía se refieren, respectivamente a: 1) Introducción, 2) Qué hay de nuevo en Wheezy, y 3) Novedades del sistema de instalación. Es interesante ver que Wheezy incluye alrededor de 12800 (sí, doce mil ochocientos!) nuevos paquetes, haciendo un total de 37493 paquetes en total disponibles en los DVDs de instalación y desde los repositorios. Otro detalle importante es ver nuevas arquitecturas soportadas.

Habiendo dicho esto, paso a repasar el capítulo 4, el cual detalla las instrucciones para actualizar desde Debian 6.0.x Squeeze.

EL BACKUP

Como solamente necesito hacer un backup de mi home, de /etc/squid, /etc/postfix, /etc/cups, y de /var/www :
tar -cpvzf BKP.tgz /home/gacanepa /etc/squid /etc/cups /etc/postfix /var/www

REVISAR LAS ACCIONES PENDIENTES EN EL GESTOR DE PAQUETES

Según el apartado 4.2.1:
En algunos casos, utilizar apt-get para instalar paquetes en lugar de aptitude puede hacer que aptitude considere que un paquete no está siendo utilizado (marcado como «unused») y lo marcará para su eliminación... Por ello, es necesario que revise si existe alguna acción pendiente en el gestor de paquetes aptitude. El procedimiento de actualización puede verse afectado negativamente si algún paquete está marcado para eliminarse o actualizarse... Para realizar esta revisión debería ejecutar el interfaz de usuario en “modo visual” de aptitude y pulsar g (“Go”). Si se muestra cualquier acción, debería revisarla y o bien arreglarlas o llevar a cabo las acciones que se le sugieran. Se le presentará el mensaje “No hay ningún paquete planificado para instalar, eliminar o actualizar” si no hay ninguna acción pendiente.
Ejecuté
aptitude safe-upgrade
para actualizar los paquetes que tengan disponibles nuevas versiones, sin desinstalar ningún paquete a menos que no se esté usando. Entonces aptitude sí entrega el resultado deseado:


PREPARAR LAS FUENTES PARA APT
El método recomendado para actualizar desde versiones anteriores de Debian es usar la herramienta de gestión de paquetes apt-get. En versiones anteriores, se recomendaba la orden aptitude para este propósito, pero las versiones más recientes de apt-get ofrecen la misma funcionalidad y se ha demostrado que proporcionan los resultados deseables para una actualización de forma más consistente.Asegúrese de que las entradas con las fuentes de APT (en el archivo /etc/apt/sources.list) hacen referencia a la distribución “wheezy” o a estable (“stable”). No debería haber ninguna entrada que haga referencia a “squeeze”.
El contenido de mi archivo /etc/apt/sources.list:


GRABAR LA SESIÓN DE ACTUALIZACIÓN
script -t 2>~/upgrade-wheezystep.time -a ~/upgrade-wheezystep.script

ACTUALIZAR LA LISTA DE PAQUETES
apt-get update

ACTUALIZACIÓN MÍNIMA DEL SISTEMA

Se actualizan los paquetes que se puedan actualizar en el sistema sin que sea necesario eliminar ni instalar ningún otro paquete:
apt-get upgrade

ACTUALIZAR EL SISTEMA
Se realizará una actualización completa del sistema, esto es, se instalarán las versiones más recientes de los paquetes y se resolverán todos los posibles cambios de dependencias entre los paquetes de diferentes versiones. Si fuera necesario, se instalarán nuevos paquetes (normalmente, nuevas versiones de las bibliotecas o paquetes que han cambiado de nombre), y se eliminarán los paquetes obsoletos conflictivos.
apt-get dist-upgrade

Por suerte no hubo ningún problema durante la actualización. Al terminar se puede constatar la nueva versión de Debian y del kernel:
root@debian:~# cat /etc/issue
Debian GNU/Linux 7.0 \n \l
root@debian:~# uname -r
3.2.0-4-686-pae

Lo único que tuve que arreglar fue quitar la referencia al módulo php5-suhosin -el cual ha sido eliminado en Wheezy- de PHP5 para que el servidor web Apache arrancara correctamente:
dpkg --purge php5-suhosin

miércoles, 1 de mayo de 2013

Volviendo a instalar la impresora multifunción Epson Stylus CX3900 en Debian Squeeze

1) Instalé los paquetes cups y cups-pdf:
aptitude install cups cups-pdf
2) Para poder acceder a la interfaz web de CUPS es necesario configurar el servicio para que escuche en la interfaz de red y dar los permisos necesarios (conviene primero hacer una copia de seguridad del archivo original):
root@debian:~# cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original
root@debian:~# vi /etc/cups/cupsd.conf
Listen 192.168.0.10:631
# Restrict access to the server
<Location />
Order allow,deny
Allow 192.168.0.0/24
</Location>
# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow 192.168.0.0/24
</Location> 
# Default authentication type, when authentication is required...
DefaultAuthType Basic
3) Tipear en el navegador: <IPdelServidor>:631, en mi caso 192.168.0.10:631:


4) Ir a la pestaña "Administration" y hacer clic en el botón "Add printer":


5) Comienza a buscar impresoras conectadas:


6) Detectó la Epson Stylus CX3900 (elegir la opción correspondiente para indicar que esa es la que se desea instalar):


7) Indicar el nombre deseado para la impresora y si se desea compartirla, así como su ubicación:


8) Si el driver de la impresora no está incluido en CUPS, elegir "Select Another Make/Manufacturer":


9) Mientras tanto, habrá que bajar el driver (archivo .deb) desde la página de soporte de EPSON: http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX:


10) Instalo el paquete recién bajado:
dpkg -i epson-inkjet-printer-escpr_1.2.2-1lsb3.2_i386.deb
11) Me avisa que tiene dependencias no resueltas:
dpkg: dependency problems prevent configuration of epson-inkjet-printer-escpr:
 epson-inkjet-printer-escpr depends on lsb (>= 3.2).
12) ¿Qué es lsb?
aptitude show lsb
Package: lsb                             
State: not installed
Version: 4.0-0ubuntu26.1
Priority: extra
Section: misc
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: all
Uncompressed Size: 45.1 k
Depends: lsb-core, lsb-graphics, lsb-cxx, lsb-desktop, lsb-printing
Suggests: lsb-multimedia, lsb-languages
Description: Linux Standard Base 4.0 support package
 The Linux Standard Base (http://www.linuxbase.org/) is a standard core system that third-party applications written for Linux can depend upon. 

 This package provides an implementation of all modules of version 4.0 of the Linux Standard Base for Debian on the Intel x86, Intel ia64 (Itanium), IBM S390, and PowerPC 32-bit architectures with the Linux kernel. Future revisions of the specification and this package may support the LSB on additional architectures and kernels. 

 The intent of this package is to provide a best current practice way of installing and running LSB packages on Debian GNU/Linux. Its presence does not imply that Debian fully complies with the Linux Standard Base, and should not be construed as a statement that Debian is LSB-compliant.
Homepage: http://www.linux-foundation.org/en/LSB
13) Entonces instalamos lsb:
aptitude install lsb
14) Para luego retomar la instalación del driver de la impresora. Entonces el server "no se queja" de nada y el driver se instala sin problemas. Retomo la instalación de la impresora desde la interfaz web:


15) Tiro 3 impresiones de prueba:


16) Los trabajos de impresión resultantes quedan "registrados" en /var/spool/cups:


17) Y luego de borrar el contenido del directorio mencionado anteriormente, el registro de los trabajos de impresión en la interfaz web desaparece:

18) Para poder conocer el porcentaje de tinta restante en los cartuchos hay que presionar -estando la impresora apagada- por al menos 3 segundos los botones de encendido y de carga de tinta. La impresora se encenderá e imprimirá una hoja con datos parecidos a los siguientes:
C:030%    Y:030%    M:030%    Bk:100%
(cartuchos Cyan, Yellow, Magenta, y Black, respectivamente)

martes, 2 de abril de 2013

Cuando no se puede escribir a un dispositivo de bloques particionado con NTFS...

Intentando hacer un backup de mi /home, esta mañana me encontré con que no podía escribir a mi disco rígido portátil. Este último estaba formateado como NTFS, tal como muchos dispositivos extraíbles hoy en día.
Cuando esto sucede, se puede montar el dispositivo y ver sus contenidos, pero no escribir en el mismo, salvo que... se tenga el paquete ntfs-3g instalado:
 gacanepa@Gabriel-PC:~$ aptitude show ntfs-3g  
 Package: ntfs-3g               
 State: not installed  
 Version: 1:2010.3.6-1  
 Priority: optional  
 Section: otherosfs  
 Maintainer: Adam Cécile (Le_Vert) <gandalf@le-vert.net>  
 Uncompressed Size: 209 k  
 Depends: libc6 (>= 2.3), libntfs-3g75  
 Description: read-write NTFS driver for FUSE  
  The ntfs-3g driver is an open source, GPL licensed, third generation Linux NTFS  
  driver which was implemented by the Linux-NTFS project. It provides full  
  read-write access to NTFS, excluding access to encrypted files, writing  
  compressed files, changing file ownership, access right.   
  Technically it's based on and a major improvement to the third generation Linux  
  NTFS driver, ntfsmount. The improvements includes functionality, quality and  
  performance enhancements.   
  ntfs-3g is based on FUSE (userspace filesystem framework for Linux), thus you  
  will have to prepare fuse kernel module to be able to use it.   
  Fuse is available in any recent kernel. No need to prepare a kernel module if  
  you are already running Debian Etch kernel or newer.  
 Homepage: http://www.ntfs-3g.org/  
De otra manera, el dispositivo es montado con el módulo NTFS del kernel, que no brinda permisos de escritura.
Después de instalar dicho paquete, pude proceder a hacer el backup necesario en mi disco portátil.

viernes, 22 de marzo de 2013

Configurando NIS (Network Information Service) - Parte 2: El cliente

Continuando con la implementación de NIS, ahora pasamos a configurar un cliente que podrá utilizar la información contenida en /etc/passwd (situado en el servidor). Los detalles de cada operación se pueden ver en la primera parte (Configurando el servidor):

1) Instalar portmap.

2) Actualizar portmap.

3) Instalar y configurar NIS con el nombre de dominio elegido anteriormente.

4) Editar el archivo /etc/hosts agregando el nombre del servidor de NIS y su FQDN (Fully Qualified Domain Name) para resolver nombres en caso de no utilizar DNS o de una falla en dicho servicio:
192.168.0.10    debian  debian.gorditolinuxero.com.ar
5) Editar el archivo /etc/yp.conf
# ypserver ypserver.network.comdomain gorditolinuxero.com.ar server debian.gorditolinuxero.com.ar
(salvo la línea que está comentada, el resto debe ir en la misma línea)
6) Editar el archivo /etc/nsswitch.conf
passwd:         nis compatgroup:          nis compatshadow:         nis compat
7) Modificar los permisos por defecto del directorio /home (esto se puede retocar luego!) para que Nautilus (o el explorador de archivos que corresponda) y XWindows permitan a los usuarios loguearse mediante una interfaz gráfica: chmod 777 /home

LISTO :).

Configurando NIS (Network Information Service) - Parte 1: El servidor

Nota: La práctica desarrollada en este post está basada en Setting up NIS (Part 1 of 2): Configuring a NIS SERVER
NIS (Network Information Service = Servicio de Información de Red) permite distribuir la información contenida en los archivos /etc/passwd y /etc/groups de un servidor a todos los demás equipos de la red, haciendo que la misma parezca transparente para los usuarios; es decir, que toda la red se comporte como si fuera un solo equipo. También permite distribuir los datos de resolución de nombres contenidos en el archivo /etc/hosts del servidor cuando por la simplicidad de la red no se considere necesario la puesta en marcha de un servicio de DNS dedicado.
Originalmente, NIS fue desarrollado por Sun Microsystems bajo el nombre de Yellow Pages, pero debido a que Yellow Pages es una marca registrada de British Telecom, luego se le cambió el nombre; sin embargo, las siglas "yp" todavía se encuentran en varios de los comandos relacionados con NIS.
Funcionalmente, NIS utiliza demonios (servicios, o procesos no interactivos) y una base de datos para proveer autenticación centralizada en una arquitectura cliente-servidor en sistemas basados en Unix, como GNU/Linux, de manera similar que Active Directory en Microsoft Windows.
Una vez puesto en marcha NIS, es importante asegurarlo mediante cifrado y la configuración apropiada utilizando los archivos hosts.allow y hosts.deny.

PASOS PARA CONFIGURAR EL SERVIDOR (ejecutar los comandos como root o con privilegios de superusuario)

1) Instalar portmap: aptitude install portmap

2) Actualizar la configuración por defecto de portmap: update-rc.d portmap defaults 10
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. El argumento "10" se utiliza para hacer que arranque antes que NIS, que según el listado del directorio /etc/rc2.d (correspondiente al nivel de ejecución o runlevel 2 que es con el que inicia Debian por defecto):
S15nis -> ../init.d/nis
Según el man page the update-rc.d:
Si  se  usa la opción defaults entonces 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 omisión todos los enlaces tendrán el código de secuencia 20, pero  esto  puede  cambiarse especificando  uno  o  dos argumentos NN.  Un argumento cambia el valor por omisión del código de secuencia tanto para los enlaces de  arranque como para los de parada, y si se proporcionan dos argumentos el primero cambia el código de los enlaces de arranque y  el  segundo  el  de  los enlaces de parada.
Si el comando anterior arroja el siguiente error:
insserv: warning: current start runlevel(s) (2 3 4 5 S) of script `portmap' overwrites defaults (2 3 4 5).
hay que ejecutar antes
update-rc.d -f portmap remove
para quitar el enlace simbólico de portmap al script de inicio (/etc/init.d/portmap), y luego recrearlo utilizando:
update-rc.d portmap defaults 10
3) Instalar NIS: aptitude install nis
Al realizar la instalación, se pedirá ingresar el nombre del dominio que se utilizará:


4) Editar el archivo /etc/defaults/nis: modificar las líneas indicadas con los cambios que sean necesarios

# Are we a NIS server and if so what kind (values: false, slave, master)?
NISSERVER=master

# Are we a NIS client?
NISCLIENT=false

5) Editar el archivo /etc/ypserv.securenets: modificar la línea indicada con los cambios que sean necesarios
# This line gives access to everybody. PLEASE ADJUST!
255.255.255.0   192.168.0.0

6) Editar el archivo /var/yp/Makefile: modificar la línea indicada con los cambios que sean necesarios
ALL =   passwd shadow group hosts rpc services netid protocols netgrp

7) Reiniciar portmap: service portmap restart

8) Reiniciar NIS: service nis restart

9) Invocar /usr/lib/yp/ypinit -m para construir la lista de los hosts que van a ser los servidores NIS en la red:

At this point, we have to construct a list of the hosts which will run NIS
servers.  debian.gorditolinuxero.com.ar is in the list of NIS server hosts.  Please continue to add
the names for the other hosts, one per line.  When you are done with the
list, type a <control D>.
next host to add:  debian.gorditolinuxero.com.ar
next host to add:

10) Agregar en el servidor los usuarios y los grupos que los clientes van a usar en toda la red. Esto se lleva a cabo mediante la creación común de usuarios, incluida la asignación de contraseñas.

11) Compilar los usuarios, los grupos, y las contraseñas en la base de datos de NIS: cd /var/yp; make

LISTO :). Ahora a configurar los clientes.

viernes, 15 de marzo de 2013

Configurar disposición de teclado en Debian Squeeze

1) Ejecutar con permisos administrativos el siguiente comando: dpkg-reconfigure keyboard-configuration. Se abrirá la pantalla para elegir el tipo de teclado que tenemos:


2) Presionando Enter en la pantalla anterior pasamos a la siguiente, en la que podremos elegir el layout o disposición de nuestro teclado. En "Other" hay una lista bastante extensa de opciones para escoger:


3) Nuevamente con Enter seguimos adelante para configurar a) el comportamiento de la tecla AltGr, y b) el seteo de una tecla de composición, que permite interpretar combinaciones de teclas para producir algún caracter no disponible en el teclado:



4) Reiniciar el equipo para que tome los cambios.

Para más información:

viernes, 8 de febrero de 2013

Ejecutar consulta SQL guardada en un archivo

Esta semana se presentó en mi trabajo la necesidad de hacer dos consultas a una base de datos Oracle (Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production) para crear un reporte de producción que permitiera visualizar ciertos campos no disponibles mediante el menú estándar en el sistema.
Estas son las dos consultas y los comentarios sobre lo que aprendí al escribirlas. Para ejecutar el contenido del archivo, se escribe @nombredearchivo.sql desde el prompt del frontend del RDBMS (Relational Database Management System).
Para bases MySQL (no hace mucho adquirida por Oracle), la sintaxis es parecida, aunque reemplazando "@" por la palabra clave "source": source nombredearchivo.sql.

PRIMER CONSULTA: Uso de la función TO_DATE() para comparar fechas y SPOOL/SPOOL OFF para guardar los resultados en un archivo de texto.


SEGUNDA CONSULTA: Uso de la función TRUNC(sysdate) para obtener los registros pertenecientes a un intervalo de tiempo fijo (pero configurable).


El sitio donde aprendí lo necesario para hacer estas consultas es Burleson Consulting. Se trata de una consultora que brinda soporte y aplicaciones de Oracle (aunque indican que no están afiliados con ellos).

lunes, 28 de enero de 2013

Montando un RAID1 (mirror) en Debian

RAID (Redundant Array of Inexpensive Disks) es una tecnología de almacenamiento que combina varios unidades de disco en una misma unidad lógica. Los datos se distribuyen en los discos en una de varias formas denominadas "Niveles RAID", dependiendo en los requisitos de redundancia y de rendimiento que se necesiten.

Los diferentes esquemas (o niveles) se nombran utilizando la palabra RAID seguida de un número (por ejemplo, RAID0, RAID1, etc); cada uno de ellos provee un balance diferente entre los objetivos principales: confiabilidad, disponibilidad, rendimiento, y capacidad. Los niveles RAID mayores que RAID0 proveen protección contra errores irrecuperables, tanto en sectores aislados como en todo el disco.

En RAID1 (espejo sin paridad), los datos se escriben idénticamente en dos unidades (generalmente, aunque se pueden utilizar más unidades), produciendo de esa manera un "conjunto espejo". Cuando se hace una petición de lectura, la información es devuelta por cualquiera de las dos unidades independientes que la contienen. De manera similar, cuando se escribe en el conjunto, se actualiza el estado de ambos discos. El RAID1 continúa operando mientras al menos una unidad que lo compone se mantiene en funcionamiento.
  • El RAID1 crea una copia exacta (o espejo) de un conjunto de datos en dos o más discos.
  • Puede ser tan grande como el más pequeño de sus discos.
  • El rendimiento de lectura se incrementa aproximadamente como múltiplo lineal del número de unidades (puede estar leyendo de manera simultánea dos datos diferentes en dos discos separados)
  • En algunos entornos 24x7, es posible "dividir" el espejo: marcar un disco como inactivo, hacer una copia de seguridad de dicho disco, y luego "reconstruir" el espejo. 
La herramienta que se utiliza para administrar los RAIDs en Linux es mdadm, y está disponible desde los repositorios de Debian:


Voy a utilizar las unidades sdc y sdd que se muestran en el siguiente listado:


PRIMER PASO: Creo las particiones en las unidades (se muestra solamente para /dev/sdd):


SEGUNDO PASO: Creo el array:


(el progreso de creación del raid1 puede verse leyendo el archivo /proc/mdstat). En el caso de que este archivo indique resync=PENDING, se puede forzar el build del RAID1 con el comando: mdadm --readwrite /dev/md0.


Y cuando ya está listo:


TERCER PASO: Formateo el RAID:


CUARTO PASO: Montar el RAID y verificaciones:

  1. Línea 1: Tiro un listado detallado del contenido de mi home. Se puede ver en la línea 12 que hay un directorio llamado raid1 que será donde montaré el dispositivo /dev/md0 recién formateado y que utilizaré como RAID1.
  2. Línea 20: Monto el RAID1. No es necesario especificar el tipo de sistema de archivos ya que lo formateé como ext3 en el TERCER PASO.
  3. Línea 21: Muestro los sistemas de archivos montados actualmente. Veo que /dev/md0 está montado en /home/gacanepa/raid1 (línea 33).
  4. Línea 34: Intento copiar el archivo cliente.tar dentro de raid1, pero recibo el mensaje de "Permiso denegado" (línea 35) debido a que el usuario root se convirtió en dueño de ese directorio al montar el dispositivo /dev/md0 en él. Cambio el usuario dueño y el grupo del directorio (línea 36) e intento realizar la operación nuevamente (37), sin problemas esta vez.
  5. Línea 39: Veo el contenido del directorio en cuestión y se puede ver que el archivo fue copiado al mismo.
  6. Línea 41: Salgo del directorio para desmontar el filesystem (42). Luego de hacerlo, vuelvo al mismo (43) y veo su contenido (44), el cual no muestra nada ya que el dispositivo fue desmontado, y es en el mismo donde reside el archivo que había copiado anteriormente.
  7. Línea 46: Vuelvo a montar el RAID y veo su contenido (48).
  8. Línea 51: Marco como fallado uno de los dispositivos que componen el RAID para simular una falla de hardware, y veo en /proc/mdstat (53) el estado actual del RAID ([_U] indica que la primera unidad del RAID está fallada).
  9. Línea 59: Quito ("remuevo físicamente") "en caliente" la unidad que presenta problemas. Aun así, el contenido del RAID no se modifica (68-69) y puede accederse a su contenido.
  10. Línea 70: Muestro el espacio ocupado y disponible en cada filesystem activo del equipo. En (78) puedo ver el detalle del RAID.
  11. Línea 79: Reemplazo la unidad que presentaba fallos con una de similares características y la vuelvo a agregar al conjunto, luego de lo cual comienza a resincronizarse nuevamente (85). Mientras tanto, el contenido del RAID continúa siendo accesible (89).


¿Qué puede salir mal?

1) Al intentar crear el RAID, uno de los dispositivos puede estar ocupado (siendo utilizado por un proceso). En este caso, se puede identificar dicho proceso mediante lsof | grep nombreDeDispositivo, y luego matarlo utilizando su PID con el comando kill PID (o kill -9 PID, si con el anterior se resiste ;).

2) Para que el RAID esté disponible al reiniciar el equipo (persistencia), se debe configurarlo mediante la siguiente línea del archivo /etc/default/mdadm:


Si además de tener disponible el arreglo, se desea montarlo cuando arranca el sistema, se le debe asignar un punto de montaje y sus correspondientes opciones en el archivo /etc/fstab.

Si a alguien se le ocurre (o se encuentre con) otro problema que pueda surgir, deje un comentario y lo vemos :).