Linux Avanzado

End Blocks Id System /dev/sda1 * 1 1216 9767488+ 7 HPFS/NTFS /dev/sda3 1217 4255. 24410767+ 83 Linux /dev/sda4 4256 9729 43969905 5 Extended ...
622KB Größe 22 Downloads 134 vistas
Linux Avanzado Tema 2: Administración. Introducción. Cuentas de usuario y de grupo En esta sección, usted aprenderá a: • Agregar, modificar y eliminar usuarios y grupos • Suspender y modificar cuentas de usuario • Gestionar información de usuario y de grupo en las bases de datos de contraseñas y en las bases de datos de grupos • Usar las herramientas correctas para gestionar bases de datos de contraseñas sombreadas y bases de datos de grupos sombreadas • Crear y gestionar cuestas limitadas y con un propósito específico Linux es un sistema de usuarios múltiples en el que cada usuario pertenece a un grupo primario y, posiblemente, a grupos adicionales. La propiedad de archivos en Linux se relaciona con las identificaciones de usuarios y grupos. Recuerde que usted puede iniciar sesión como un usuario y transformarse en otro usuario usando los comandos su o sudo -s. Además, usted puede usar el comando whoami para verificar su identificación efectiva actual y el comando groups para encontrar cuáles son los grupos a los que usted pertenece. En esta sección, usted aprenderá a crear, borrar y gestionar usuarios y grupos. Además, usted también obtendrá información sobre los archivos que se encuentran en /etc, donde se almacena la información sobre usuarios y grupos.

Agregado y eliminación de usuarios y grupos Para agregar usuarios a un sistema Linux, use el comando useradd. Para borrar usuarios de un sistema Linux, use el comando userdel. De manera similar, usted puede agregar o borrar grupos usando los comandos groupadd y groupdel.

Agregado de usuarios o grupos Generalmente, los escritorios Linux modernos tienen interfaces gráficas para la administración de usuarios y grupos. A estas interfaces gráficas se suele acceder mediante las opciones de menú relativas a la administración del sistema. Estas interfaces suelen variar considerablemente. Por lo tanto, la de su sistema puede diferir de la que se incluye en el presente. De todas formas, los conceptos y los comandos subyacentes siempre son similares. Comencemos agregando gráficamente un usuario a un sistema Fedora Core 5. Luego de esto, analicemos los comandos subyacentes. En el caso de Fedora Core 5 con un escritorio GNOME, use System > Administration > Users y Groups (Sistema > Administración > Usuarios y Grupos) y presione el botón Add User (Agregar Usuario). La Figura 1 muestra el panel de User Manager (Gestor de Usuarios) con el panel de Create New User (Crear Usuario Nuevo), que incluye información básica sobre un usuario nuevo denominado "john". Se ingresó el nombre completo de este usuario, John Doe, y una contraseña. El panel brinda un shell de inicio de sesión predeterminado de /bin/bash. En los sistemas Fedora, la opción predeterminada consiste en crear un grupo nuevo con el mismo nombre que el del usuario ("john" en este caso) y un directorio principal de /home/john.

1

Figura 1. Agregado de un usuario

El Listado 1 le muestra el uso del comando id para visualizar la información básica del usuario nuevo. Como puede observar, john tiene el número de usuario 503 y un grupo correspondiente, john, con el número de grupo 503. Éste es el único grupo del que john es miembro. Listado 1. Visualización de la información de identificación del usuario [root@pinguino ~]# id john uid=503(john) gid=503(john) groups=503(john)

Para realizar la misma tarea desde la línea de comandos, use los comandos groupadd y useradd para crear el grupo y el usuario. Luego de esto, use el comando passwd para configurar la contraseña correspondiente al usuario recién creado. Todos estos comandos requieren que usted tenga la autoridad de usuario raíz. El Listado 2 ilustra el uso básico de estos comandos para agregar otro usuario, jane. Listado 2. Agregado del usuario jane [root@pinguino ~]# groupadd jane [root@pinguino ~]# useradd -c "Jane Doe" -g jane -m jane [root@pinguino ~]# passwd jane Changing password for user jane. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. [root@pinguino ~]# id jane uid=504(jane) gid=504(jane) groups=504(jane) [root@pinguino ~]# ls -ld /home/jane drwx------ 3 jane jane 4096 Jun 25 18:22 /home/jane

En estos dos ejemplos, tanto la identificación de usuario como la identificación de grupo tienen valores superiores a 500. No olvide que, en algunos sistemas más nuevos, las identificaciones de usuario van de 1000 en adelante (en vez de ir de 500 en adelante). Estos valores generalmente se

2

refieren a usuarios comunes, mientras que los valores por debajo de 500 (o por debajo de 1000 si las identificaciones de usuario del sistema van de 1000 en adelante) se reservan para los usuarios del sistema. Los usuarios del sistema se mencionan más adelante en esta sección. Los límites reales se configuran en /etc/login.defs como UID_MIN y GID_MIN. En el Listado 2 que figura con anterioridad, el comando groupadd tiene un solo parámetro, jane, que es el nombre del grupo a agregar. Los nombres de grupo deben comenzar con una letra minúscula o con un guión bajo y, generalmente, incluyen sólo estos junto con guiones o rayas. La Tabla 3 le muestra las opciones que usted puede especificar. Tabla 3. Opciones para groupadd

Opción Propósito

-f

Salir con estado exitoso si el grupo ya existe. Esto resulta útil para scripting cuando usted no necesita verificar si un grupo existe antes de intentar crearlo.

-g

Especifica la identificación de grupo manualmente. De manera predeterminada, se usa el valor más pequeño, que es, por lo menos,GID_MIN y también mayor que la identificación de cualquier grupo existente. Generalmente, las identificaciones de grupo son exclusivas y no pueden ser negativas.

-o

Permite que un grupo tenga una identificación no exclusiva.

-K

Se la puede usar para invalidar los valores predeterminados de /etc/login.defs.

En el Listado 2 anterior, el comando useradd tiene un solo parámetro, jane, que es el nombre del usuario a agregar, junto con las opciones -c, -g y -m. La Tabla 4 le muestra las opciones comunes para el comando useradd. Tabla 4. Opciones para useradd

Opción

Propósito

-b --base-dir

Es el directorio base predeterminado en el que se crean los directorios principales del usuario. Generalmente, este directorio es /home y el directorio principal del usuario es /home/$USER.

-c --comment

Un texto que describe la identificación (como, por ejemplo, el nombre completo del usuario).

3

-d --home

Brinda un nombre específico de directorio para el directorio principal.

-e -expiredate

La fecha en la que vencerá o se desactivará la cuenta (en el siguiente formato: YYYY-MM_DD).

-g --gid

El nombre o el número del grupo de inicio de sesión inicial para el usuario. El grupo debe existir. Por esta razón, el grupo jane se creó antes que el usuario jane en el Listado 2.

-G --groups

Una lista de grupos adicionales separados por comas a los que el usuario pertenece.

-K

Se la puede usar para invalidar los valores predeterminados de /etc/login.defs.

-m --createhome

Crea el directorio principal del usuario si no existe. Copia los directorios y los archivos esqueleto de /etc/skel al directorio principal.

-o --nonunique

Permite que un usuario tenga una identificación no exclusiva.

-p La contraseña encriptada. Si no se especifica una contraseña, la --password cuenta se desactiva de manera predeterminada. Generalmente, usted usará el comando passwd en el siguiente paso en vez de generar una contraseña encriptada y especificarla en el comandouseradd.

-s --shell

El nombre del shell de inicio de sesión del usuario, si difiere del shell de inicio de sesión predeterminado.

-u --uid

La identificación de usuario numérica y no negativa, que debe ser exclusiva si no se especifica -o. De manera predeterminada, se usa el valor más pequeño, que es, por lo menos, UID_MIN y que además es mayor a la identificación de cualquier usuario existente.

4

Notas: 1. Algunos sistemas, incluyendo las distribuciones Red Hat y Fedora, tienen extensiones a los comandos de creación de usuarios. Por ejemplo, de manera predeterminada, Fedora y Red Hat crean un grupo nuevo para un usuario, y la opción-n se puede usar en el comando useradd para desactivar esta función. No pase por alto estas posibles diferencias de sistema y vea las páginas man en su sistema cuando tenga alguna duda. 2. En los sistemas SUSE, use YaST o YaST2 para acceder a las interfaces gráficas de administración de grupos y usuarios. 3. Las interfaces gráficas puede realizar tareas adicionales (como, por ejemplo, crear el archivo de correo electrónico del usuario /var/spool/mail).

Borrado de usuarios o grupos Borrar usuarios o grupos es más fácil que agregarlos, ya que existen menos opciones disponibles. De hecho, el comandogroupdel, que se usa para borrar un grupo, sólo requiere que se ingrese el nombre del grupo. No tiene ninguna opción adicional. Usted no puede borrar ningún grupo que sea el grupo primario de un usuario. Si usa una interfaz gráfica para borrar usuarios y grupos, las funciones son muy similares a los comandos que se muestran a continuación. Use el comando userdel para borrar un usuario. La opción -r o --remove solicita la eliminación del directorio principal del usuario y de todos sus contenidos junto con el spool de correo electrónico de dicho usuario. Cuando usted borra un usuario, también se borra el grupo que tiene el mismo nombre que el usuario si la configuración de USERGROUPS_ENAB es "yes" en /etc/login.defs. Esto sólo ocurrirá si el grupo no es el grupo primario de otro usuario. En el Listado 3, usted puede observar un ejemplo de cómo borrar grupos cuando varios usuarios comparten el mismo grupo primario. Aquí, se agregó otro usuario, jane2, al sistema con anterioridad con el mismo grupo que jane. Listado 3. Borrado de usuarios o grupos root@pinguino:~# groupdel jane groupdel: cannot remove user's primary group. root@pinguino:~# userdel -r jane userdel: Cannot remove group jane which is a primary group for another user. root@pinguino:~# userdel -r jane2 root@pinguino:~# groupdel jane

Notas: 1. Use las opciones userdel, -f o --force para borrar usuarios y su grupo. Esta opción es peligrosa. Por ende, usted sólo la debería usar como un último recurso. Lea las páginas man atentamente antes de recurrir a esto. 2. Tenga en cuenta que, si borra un usuario o un grupo, que son archivos que pertenecen a dicho usuario o grupo en su sistema de archivos, los archivos no se borran automáticamente ni se los asigna a otro grupo o usuario.

Suspensión y modificación de cuentas Ahora que ya sabe crear y borrar identificaciones de usuario o grupos, es probable que también necesite modificarlas o modificarlos.

Modificación de cuentas de usuario Supongamos que el usuario john desea hacer que el shell tcsh sea su shell predeterminado. Desde una interfaz gráfica, usted generalmente podrá encontrar una forma de editar un usuario (o un grupo) o examinar las propiedades del objeto. La Figura 2 le muestra el recuadro de diálogo de propiedades correspondiente al usuario john que creamos con anterioridad en un sistema Fedora Core 5.

5

Figura 2. Modificación de cuentas de usuario

Desde la línea de comandos, usted puede usar el comando usermod para modificar una cuenta de usuario. Usted también puede usar la mayoría de las opciones que usa con useradd, con la excepción de que no puede crear o popular un nuevo directorio principal para el usuario. Si necesita cambiar el nombre de usuario, especifique la opción -l o --login al ingresar el nombre nuevo. Probablemente, usted desee modificar el nombre del directorio principal para que se corresponda con la identificación de usuario. También es posible que necesite modificar el nombre de otros elementos (como, por ejemplo, los archivos de spool de correo electrónico). Por último, si se modifica el shell de inicio de sesión, existe la posibilidad de que se alteren algunos de los archivos de perfil asociados. El Listado 4 le muestra un ejemplo de las cosas que usted probablemente necesite hacer para cambiar el usuario john por el usuario john2 con /bin/tcsh como el shell predeterminado y el directorio principal con el nombre nuevo (/home/john2). Listado 4. Modificación de usuarios [root@pinguino ~]# usermod -l john2 -s /bin/tcsh -d /home/john2 john [root@pinguino ~]# ls -d ~john2 ls: /home/john2: No such file or directory [root@pinguino ~]# mv /home/john /home/john2 [root@pinguino ~]# ls -d ~john2 /home/john2

Notas: 1. Si necesita modificar los grupos adicionales de un usuario, usted debe especificar la lista completa de usuarios adicionales. No hay ningún comando para agregar o borrar un solo grupo para un usuario. 2. Hay restricciones que aplican a modificar el nombre o la identificación del usuario que inició sesión o que está ejecutando procesos. Vea las páginas man para mayor información. 3. Si modifica un número de usuario, es posible que desee modificar archivos y directorios propiedad de dicho usuario para que se correspondan con el número nuevo.

Modificación de grupos No sorprende que el comando groupmod se use para modificar la información del grupo. Usted puede modificar el número de grupo con la opción -g y el nombre de grupo con la opción -n.

6

Listado 5. Modificación del nombre de grupo [root@pinguino ~]# ls -ld ~john2 drwx------ 3 john2 john 4096 Jun 26 18:29 /home/john2 [root@pinguino ~]# groupmod -n john2 john [root@pinguino ~]# ls -ld ~john2 drwx------ 3 john2 john2 4096 Jun 26 18:29 /home/john2

Vea que, en el Listado 5, el nombre de grupo correspondiente al directorio principal de john2 se modifica mágicamente al usargroupmod para modificar el nombre de grupo. ¿Le sorprende esto? Como los grupos están representados en los inodos del sistema de archivos mediante su número, en vez de mediante su nombre, esto no sorprende en lo más mínimo. Sin embargo, si usted cambia el número de grupo, también debería actualizar los usuarios que tengan a dicho grupo como su grupo primario. Además, es probable que también desee actualizar los archivos y los directorios que pertenezcan a dicho grupo para que se correspondan con el número nuevo (de la misma forma que se lo indica con anterioridad en el caso del cambio del número de usuario). El Listado 6 le muestra cómo hacer que el número de grupo de john2 pase a ser 505, cómo actualizar la cuenta de usuario y cómo realizar las modificaciones adecuadas en todos los archivos afectados en el sistema de archivos /home. Es posible que desee modificar el nombre el número de los usuarios y los grupos de ser posible. Listado 6. Modificación del número de grupo [root@pinguino ~]# groupmod -g 505 john2 [root@pinguino ~]# ls -ld ~john2 drwx------ 3 john2 503 4096 Jun 26 18:29 /home/john2 [root@pinguino ~]# id john2 uid=503(john2) gid=503 groups=503 [root@pinguino ~]# usermod -g john2 john2 [root@pinguino ~]# id john2 uid=503(john2) gid=505(john2) groups=505(john2) [root@pinguino ~]# ls -ld ~john2 drwx------ 3 john2 503 4096 Jun 26 18:29 /home/john2 [root@pinguino ~]# find /home -gid 503 -exec chgrp john2 {} \; [root@pinguino ~]# ls -ld ~john2 drwx------ 3 john2 john2 4096 Jun 26 18:29 /home/john2

Contraseñas de usuario y de grupo Ya hemos analizado el comando passwd, que se usa para modificar la contraseña de usuario. La contraseña es (o debería ser) exclusiva del usuario y sólo él la podría cambiar. Como ya hemos visto, el usuario raíz también puede cambiar las contraseñas de usuario. Es posible que los grupos también tengan contraseñas, y el comando gpasswd se usa para configurarlas. Al tener una contraseña de grupo, los usuarios pueden unirse a un grupo de manera temporaria con el comando newgrp, siempre y cuando sepan la contraseña de grupo. Por supuesto que resulta bastante problemático cuando muchas personas conocen la contraseña. Por lo tanto, usted deberá comparar las ventajas de agregar un usuario a un grupo usando usermod con el problema de seguridad que presenta el hecho de que demasiadas personas del grupo conozcan la contraseña.

7

Suspensión y bloqueo de cuentas Si necesita evitar que un usuario inicie sesión, usted puede suspender o bloquear su cuenta usando la opción -L del comandousermod. Para desbloquear la cuenta, use la opción -U. El Listado 7 le muestra cómo bloquear la cuenta de john2 y lo que ocurre si john2 intenta iniciar sesión en el sistema. Tenga en cuenta que, cuando se desbloquea la cuenta de john2, se restaura la misma contraseña. Listado 7. Bloqueo de cuentas [root@pinguino ~]# usermod -L john2 [root@pinguino ~]# ssh john2@pinguino john2@pinguino's password: Permission denied, please try again.

En la Figura 2, es posible que se haya dado cuenta de que había varias pestañas en el recuadro de diálogo con propiedades de usuario adicionales. Ya nos referimos al uso del comando passwd para configurar contraseñas de usuario. Pero tanto dicho comando como el comando usermod pueden realizar diversas tareas relacionadas con las cuentas de usuario (de la misma forma que lo puede hacer el comando chage). La Tabla 5 le muestra algunas de estas opciones. Vea las páginas man adecuadas para mayor información sobre éstas y otras opciones. Tabla 5. Comandos y opciones para modificar cuentas de usuario

Opción para el comando

Propósito

Usermod Passwd Chage

-L

-l

N/A

Bloquea o suspende la cuenta.

-U

-u

N/A

Desbloquea la cuenta.

N/A

-d

N/A

Desactiva la cuenta configurándola para que no tenga ninguna contraseña.

-e

-f

-E

Configura la fecha de vencimiento de una cuenta.

N/A

-n

-m

La duración mínima expresada en días.

de

una

contraseña

N/A

-x

-M

La

de

una

contraseña

duración

máxima

8

expresada en días.

N/A

-w

-W

La cantidad de días de advertencia antes de que sea necesario modificar una contraseña.

-f

-i

-I

La cantidad de días que transcurren luego de la fecha de vencimiento de una contraseña hasta que se desactiva la cuenta.

N/A

-S

-l

Visualiza un mensaje corto sobre el estado actual de la cuenta.

Gestión de bases de datos de usuario y de grupo Los repositorios primarios para la información de usuarios y grupos son cuatro archivos en /etc. /etc/passwd es el archivo de la contraseña que incluye información básica sobre los usuarios. /etc/shadow es el archivo de la contraseña sombreada que incluye contraseñas encriptadas. /etc/group es el archivo de grupo que incluye información básica sobre los grupos y sobre qué usuarios pertenecen a ellos. /etc/gshadow es el archivo de grupos sombreado que incluye contraseñas de grupo encriptadas. Estos archivos se actualizan mediante el uso de los comandos que usted ya ha visto en este tutorial. Usted aprenderá más comandos para trabajar con ellos luego de que discutamos los archivos propiamente dichos. Todos estos archivos son archivos de texto simple. En general, no se deberían editar directamente. Use las herramientas provistas para actualizarlos de manera tal que queden adecuadamente bloqueados y para que se los mantenga sincronizados. Podrá observar que los archivos de contraseña y de grupo están sombreados. Esto es así por razones de seguridad. Estos archivos de contraseña y de grupo deben permitir que todos los puedan leer, aunque no se debe permitir la lectura de las contraseñas encriptadas. Por lo tanto, los archivos sombreados incluyen las contraseñas encriptadas, y sólo el usuario raíz puede leer estos archivos. El acceso por autenticación necesario es provisto mediante un programa suid que tiene autoridad raíz, pero que todos pueden ejecutar. Asegúrese de que su sistema tenga configurados todos los permisos necesarios de manera adecuada. El Listado 8 le muestra un ejemplo de esto. Listado 8. Permisos de bases de datos de usuario y de grupo [ian@pinguino ~]$ ls -l /etc/passwd /etc/shadow /etc/group /etc/gshadow -rw-r--r-- 1 root root 701 Jun 26 19:04 /etc/group

9

-r-------- 1 root root 580 Jun 26 19:04 /etc/gshadow -rw-r--r-- 1 root root 1939 Jun 26 19:43 /etc/passwd -r-------- 1 root root 1324 Jun 26 19:50 /etc/shadow

Nota: Aunque es técnicamente posible realizar la ejecución sin archivos de grupo y de contraseña sombreados, casi nunca se hace esto y no se recomienda hacerlo. El archivo /etc/passwd El archivo /etc/passwd incluye una línea para cada usuario en el sistema. El Listado 9 le muestra algunas líneas a modo de ejemplo. Listado 9. Entradas de /etc/password root:x:0:0:root:/root:/bin/bash jane:x:504:504:Jane john2:x:503:505:John Doe:/home/john2:/bin/tcsh

Doe:/home/jane:/bin/bash

Cada línea incluye siete campos separados por dos puntos (:), como se puede observar en la Tabla 6. Tabla 6. Campos en /etc/passwd

Campo

Nombre usuario

Propósito

de El nombre usado para iniciar sesión en el sistema. Por ejemplo, john2.

Contraseña

ID usuario (UID)

La contraseña encriptada. Cuando se usan contraseñas sombreadas, éstas incluye un sólo carácter x.

de El número que se usa para representar este nombre de usuario en el sistema. Por ejemplo, 503 para el usuario john2.

ID de grupo El número que se usa para representar el grupo primario de (GID) este usuario en el sistema. Por ejemplo, 505 para el usuario john2.

Comentario (GECOS)

Un campo opcional que se usa para describir al usuario. Por ejemplo, "John Doe". Este campo puede incluir varias entradas separadas por comas. También lo usan programas como finger. El nombre GECOS es histórico. Para mayor información,

10

veaman 5 passwd.

Inicio

La ruta absoluta hacia el directorio principal del usuario. Por ejemplo, /home/john2

Shell

El programa que se ejecuta automáticamente cuando un usuario inicia sesión en el sistema. Generalmente, se trata de un shell interactivo (como, por ejemplo, /bin/bash o /bin/tcsh), pero puede ser cualquier programa (no necesariamente un shell interactivo).

El archivo /etc/group El archivo /etc/group incluye una línea para cada grupo en el sistema. El Listado 10 le muestra algunas líneas a modo de ejemplo. Listado 10. Entradas de /etc/group root:x:0:root jane:x:504:john2 john2:x:505:

Cada línea incluye cuatro campos separados por dos puntos (:), como se puede observar en la Tabla 7. Tabla 7. Campos en /etc/group

Campo

Nombre grupo

Propósito

del El nombre de este grupo. Por ejemplo, john2.

Contraseña

La contraseña encriptada. Cuando se usan contraseñas de grupo sombreadas, incluye un sólo carácter x.

ID de grupo El número que se usa para representar a este grupo en el (GID) sistema. Por ejemplo, 505 para el grupo john2.

Miembros

Una lista de todos los miembros del grupo (excepto aquellos para quienes éste es el grupo primario) separados por comas.

11

Archivos sombreados Sólo el usuario raíz debería poder leer el archivo /etc/shadow, ya que incluye contraseñas encriptadas e información sobre el vencimiento de cuentas y contraseñas. Vea la página man (man 5 shadow) para mayor información sobre la disposición del campo. Las contraseñas se pueden encriptar usando DES, aunque se las suele encriptar usando MD5. El algoritmo DES usa los 7 bits de orden inferior de los primeros 8 caracteres de la contraseña de usuario como una contraseña de 56 bits, mientras que el algoritmo MD5 usa la contraseña completa. En cualquiera de estos casos, las contraseñas se ofuscan para que dos contraseñas idénticas no generen el mismo valor encriptado. El Listado 11 le muestra cómo configurar contraseñas idénticas para los usuarios jane y john2. Luego de esto, también le muestra las contraseñas codificadas MD5 resultantes en /etc/shadow. Listado 11. Contraseñas en /etc/shadow [root@pinguino ~]# echo lpic1111 |passwd jane --stdin Changing password for user jane. passwd: all authentication tokens updated successfully. [root@pinguino ~]# echo lpic1111 |passwd john2 --stdin Changing password for user john2. passwd: all authentication tokens updated successfully. [root@pinguino ~]# grep "^j" /etc/shadow jane:$1$eG0/KGQY$ZJl.ltYtVw0sv.C5OrqUu/:13691:0:99999:7::: john2:$1$grkxo6ie$J2muvoTpwo3dZAYYTDYNu.:13691:0:180:7:29::

El inicio $1$ indica una contraseña MD5 y el salt es un campo de longitud variable de hasta 8 caracteres que termina con el próximo signo $. La contraseña encriptada es la cadena restante de 22 caracteres.

Herramientas para usuarios y grupos Usted ya ha visto diversos comandos que manipulan los archivos de grupo y cuenta y sus versiones sombreadas. Aquí, aprenderá sobre lo siguiente: • Administradores de grupo • Edición de comandos para archivos de grupo y contraseña • Programas de conversión

Administradores de grupo En algunas circunstancias, es posible que usted desee que algunos usuarios que no sean el usuario raíz puedan administrar uno o más grupos agregando o eliminando miembros del grupo. El Listado 12 le muestra cómo el usuario raíz puede agregar al usuario jane como administrador del grupo john2 y, luego de esto, jane puede agregar al usuario ian como miembro. Listado 12. Agregado de administradores y miembros de grupo [root@pinguino ~]# gpasswd -A jane john2 [root@pinguino ~]# su - jane [jane@pinguino ~]$ gpasswd -a ian john2 Adding user ian to group john2 [jane@pinguino ~]$ id ian;id jane uid=500(ian) gid=500(ian) groups=500(ian),505(john2) uid=504(jane) gid=504(jane) groups=504(jane)

12

Probablemente lo sorprenda el hecho de que, aunque jane es administrador del grupo john2, no es miembro de dicho grupo. Un análisis de la estructura de /etc/gshadow nos muestra el porqué. El archivo /etc/gshadow incluye cuatro campos para cada entrada, como se puede observar en la Tabla 8. Observe que el tercer campo es una lista de administradores de grupo separados por comas. Tabla 8. Campos en /etc/gshadow

Campo

Nombre grupo

Propósito

de El nombre de este grupo. Por ejemplo, john2.

Contraseña

El campo que se usa para incluir la contraseña encriptada si el grupo tiene una contraseña. Si no hay contraseña, es probable que aquí vea "x", "!" o "!!".

Administradores

Una lista de administradores de grupo separados por comas.

Miembros

Una lista de los miembros del grupo separados por comas.

Como puede observar, la lista de administradores y la lista de miembros son dos campos completamente independientes. La opción -A de gpasswd hace que el usuario raíz pueda agregar administradores a un grupo, mientras que la opción -M hace que el usuario raíz pueda agregar miembros. La opción -a (tenga en cuenta que está en letra minúscula) hace que un administrador pueda agregar miembros, mientras que la opción -d hace que un administrador pueda eliminar miembros. Hay opciones adicionales que hacen que se pueda eliminar una contraseña de grupo. Vea las páginas man para mayor información.

Edición de comandos para archivos de grupo y contraseña Aunque no figuran en los objetivos de LPI, usted también debería considerar el comando vipw para editar /etc/passwd de manera segura y el comando vigr para editar /etc/group de manera segura. Estos comandos bloquearán los archivos necesarios mientras que usted realiza los cambios usando el editor vi. Si realiza cambios a /etc/passwd, vipw le mostrará un aviso para que se fije si también necesita actualizar /etc/shadow. De manera similar, si usted actualiza /etc/group usando vigr, se le mostrará un aviso para que también actualice /etc/gshadow. Si necesita eliminar administradores de grupo, es probable que tenga que usar vigr, ya que gpasswd sólo le permite agregar administradores.

Programas de conversión Otros cuatro comandos relacionados no figuran en los objetivos de LPI. Estos son: pwconv, pwunconv, grpconv y grpunconv. Se los usa para realizar la conversión entre archivos de grupo y contraseña sombreados y no sombreados. Es probable que nunca necesite hacer esto, pero es importante que conozca la existencia de estos comandos. Vea las páginas man para mayor información.

13

Cuentas limitadas y con propósitos especiales Por convención, los usuarios de sistemas suelen tener una identificación de menos de 100, mientras que el usuario raíz tiene una identificación de 0. Los usuarios normales comienzan con una numeración automática desde el valor de UID_MINconfigurado en /etc/login.defs. Generalmente, este valor se configura en 500 ó 1000. Además de las cuentas de usuario y de la cuenta del usuario raíz en su sistema, también existirán varias cuentas con propósitos especiales para daemons como FTP, SSH, correo electrónico, noticias, etc. El Listado 13 le muestra algunas entradas de /etc/passwd para estas cuentas. Listado 13. Cuentas limitadas y con propósitos especiales mail:x:8:12:mail:/var/spool/mail:/sbin/nologin news:x:9:13:news:/etc/news: uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin

Frecuentemente, estas cuentas controlan archivos y no se debería poder tener acceso a ellas iniciando sesión normalmente. Por lo tanto, se suele especificar un shell de inicio de sesión para ellas (como, por ejemplo, /sbin/nologin o /bin/false) para que no se pueda iniciar sesión.

Puesta a punto del entorno En esta sección, usted aprenderá a realizar la puesta a punto del entorno de usuario, lo que incluye las siguientes tareas: • Activar y desactivar variables de entorno • Conservar directorios esqueleto para las nuevas cuentas de usuario • Configurar las rutas de búsqueda de comandos

Activación y desactivación de variables de entorno Cuando crea un usuario nuevo, usted generalmente inicializa muchas variables de acuerdo con sus necesidades locales. A éstas se las suele configurar en los perfiles que usted otorga a los usuarios nuevos (como, por ejemplo, .bash_profile y .bashrc) o en los perfiles que involucran a todo el sistema (/etc/profile y /etc/bashrc). El Listado 14 le muestra un ejemplo de cómo se configura el aviso del sistema PS1 en /etc/profile en un sistema Ubuntu 7.04. El primer enunciado if verifica si se configuró la variable PS1 e indica un shell interactivo, ya que un shell no interactivo no necesita un aviso. El segundo enunciadoif verifica si se configuró la variable del entorno BASH. En tal caso, se configura un aviso complejo y se origina /etc/bash.bashrc (preste atención al punto). Si no se configura la variable BASH, se verifica el usuario raíz (id=0) y el aviso se configura como # o $ según lo que corresponda. Listado 14. Configuración de variables de entorno if [ "$PS1" ]; then if [ "$BASH" ]; then PS1='\u@\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "`id -u`" -eq 0 ]; then

14

fi

PS1='# ' else PS1='$ ' fi

fi

Al personalizar los entornos para los usuarios, tenga en cuenta dos puntos muy importantes: 1. /etc/profile es de sólo lectura al momento del inicio de sesión y, por lo tanto, no se ejecuta cuando se crea cada shell nuevo. 2. Los shells nuevos no heredan las funciones y los alias. Por lo tanto, generalmente usted configurará éstas y sus variables de entorno en /etc/bashrc o en los perfiles propios del usuario. Además de los perfiles de sistema (/etc/profile y /etc/bashrc), Linux Standard Base (LSB) especifica el hecho de que se podrán colocar scripts adicionales en el directorio /etc/profile.d. Estos scripts se originan cuando se crea un shell de inicio de sesión interactivo. Estos ofrecen una forma conveniente de separar la personalización para los diferentes programas. El Listado 15 le muestra un ejemplo. Listado 15. /etc/profile.d/vim.sh en Fedora 7 [if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then [ -x //usr/bin/id ] || return [ `//usr/bin/id -u` -le 100 ] && return # for bash and zsh, only if no alias is already set alias vi >/dev/null 2>&1 || alias vi=vim fi

Recuerde que, generalmente, usted debe exportar todas las variables que configure en un perfil. De lo contrario, éstas no estarán disponibles para los comandos que se ejecutan en el shell nuevo.

Conservación de directorios esqueleto para los usuarios nuevos En esta sección, usted aprendió a Agregar y eliminar usuarios y grupos para poder crear o popular un nuevo directorio principal para el usuario. El origen de este directorio nuevo es el subárbol que se encuentra en /etc/skel. El Listado 16 le muestra los archivos que forman parte de este es subárbol en el caso de un sistema Fedora 7. Tenga en cuenta que la mayoría de los archivos comienzan con un punto. Por lo tanto, usted necesita usar la opción -a para que se visualice una lista de ellos. La opción -R visualiza una lista de los subdirectorios de manera recursiva, mientras que la opción -L sigue todos los vínculos simbólicos. Listado 16. /etc/skel en Fedora 7 [ian@lyrebird ~]$ ls -aRL /etc/skel /etc/skel: . .. .bash_logout .bash_profile .bashrc .emacs .xemacs /etc/skel/.xemacs: . .. init.el Además de .bash_logout, .bash_profile y .bashrc (lo que usted puede esperar para el shell Bash), tenga en cuenta que este ejemplo incluye información de perfil para los editores emacs y xemacs.

15

El Listado 17 le muestra /etc/skel/.bashrc del sistema anterior. Es posible que este archivo sea diferente en las versiones o en las distribuciones diferentes. De todas formas, esto le da una idea de cómo se puede realizar la configuración del usuario predeterminado. Listado 17. /etc/skel/.bashrc en Fedora 7 # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions

Como puede observar, se origina el /etc/bashrc global. Luego de esto, se pueden agregar las instrucciones específicas a los usuarios. El Listado 18 le muestra la parte de /etc/bashrc en la que se originan los scripts .sh de /etc/profile.d. Listado 18. Origen de scripts .sh desde /etc/profile.d for i in /etc/profile.d/*.sh; do if [ -r "$i" ]; then . $i fi done unset i

Tenga en cuenta que la variable i se desactiva después del bucle.

Configurar las rutas de búsqueda de comandos Sus perfiles predeterminados suelen incluir variables PATH para las funciones locales y para los productos que usted pueda haber instalado. Usted puede configurar esto en los archivos esqueleto en /etc/skel, modificar /etc/profile y /etc/bashrc o crear un archivo en /etc/profile.d si su sistema lo usa. Si modifica los archivos del sistema, asegúrese de verificar que sus cambios estén intactos luego de las actualizaciones del sistema. El Listado 19 le muestra cómo agregar un directorio nuevo (/opt/productxyz/bin) a la parte delantera o trasera de su PATH existente. Listado 19. Agregado de rutas de directorio PATH="$PATH${PATH:+:}/opt/productxyz/bin" PATH="/opt/productxyz/bin${PATH:+:}$PATH" Aunque no es estrictamente obligatoria, la expresión ${PATH:+:} inserta un separador de ruta (dos puntos) sólo si la variable PATH está desactivada o es nula.

16

Archivos de registro del sistema En esta sección, usted aprenderá a configurar y a gestionar registros del sistema, lo que incluye las siguientes tareas: • Gestionar el tipo y el nivel de información registrada • Rotar y archivar archivos de registro automáticamente • Escanear archivos de registro para identificar toda actividad relevante • Monitorear archivos de registro • Realizar el seguimiento de los problemas que figuran en los archivos de registro

Gestión del tipo y el nivel de información registrada La facilidad de inicio de sesión del sistema en un sistema Linux ofrece las capacidades de iniciar sesión en el sistema y capturar mensajes kernel. El inicio de sesión se puede realizar en el sistema local o se puede enviar a un sistema remoto, mientras que el nivel de inicio de sesión se puede controlar por medio del archivo de configuración /etc/syslog.conf. El inicio de sesión se realiza mediante el uso del daemon syslogd, que suele recibir datos de entrada por medio del socket /dev/log (como se puede observar en el Listado 20). Listado 20. /dev/log es un socket ian@pinguino:~$ ls -l /dev/log srw-rw-rw- 1 root root 0 2007-07-05 15:42 /dev/log

Para el inicio de sesión local, /var/log/messages suele ser el archivo principal (aunque muchos otros archivos se usan en la mayoría de las instalaciones y usted puede personalizarlos en gran medida). Por ejemplo, es posible que usted desee un registro independiente para los mensajes provenientes del sistema de correo electrónico.

El archivo de configuración syslog.conf El archivo syslog.conf es el archivo de configuración principal para el daemon syslogd. El inicio de sesión se basa en una combinación de facilidad y prioridad. Las facilidades definidas son auth (o security), authpriv, cron, daemon, ftp, kern, lpr, mail, mark, news, syslog, user, uucp y de local0 a local7. El término auth se debería usar en vez de security, al igual que el término mark se debería emplear en los casos de uso interno. Las prioridades (en orden ascendente) son: 1. debug 2. info 3. notice 4. warning (o warn) 5. err (o error) 6. crit 7. alert 8. emerg (o panic) Los términos que figuran entre paréntesis (warn, error y panic) se dejaron de usar. Las entradas en syslog.conf especifican las reglas de inicio de sesión. Cada regla tiene un campo selector y un campo de acción, que están separados por uno o más espacios o pestañas. El campo selector identifica la facilidad y las prioridades a las que la regla se aplica, mientras que el campo de acción identifica la acción de inicio de sesión para la facilidad y las prioridades. El comportamiento predeterminado consiste en realizar la acción para el nivel especificado y para todos los niveles más altos, aunque es posible limitar el inicio de sesión a niveles específicos. Cada selector consiste de una facilidad y una prioridad separadas por un punto. Se pueden especificar varias facilidades para una acción determinada separándolas con una coma. Los pares

17

de múltiples facilidades / prioridades para una acción determinada se pueden especificar separándolos con punto y coma. El Listado 21 le muestra un ejemplo de una syslog.conf simple. Listado 21. Ejemplo de syslog.conf # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # Log cron stuff cron.*

/var/log/cron

# Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log

Notas: • Al igual que con muchos archivos de configuración, las líneas que comienzan con # y las líneas en blanco se ignoran. • Se puede usar un * para hacer referencia a todas las facilidades o a todas las prioridades. • El término de prioridad especial none (ninguno) indica que no se debería realizar ningún inicio de sesión para esta facilidad con esta acción. • El guión antes del nombre de un archivo (como, por ejemplo, -/var/log/maillog en este ejemplo) indica que el archivo de registro no se debería sincronizar luego de cada escritura. Usted puede llegar a perder información luego de un fallo del sistema, pero puede lograr un mejor rendimiento al hacer esto. De manera genérica, se hace referencia a estas acciones como "archivos de registro", aunque no tienen por qué ser archivos reales. La Tabla 9 describe los posibles archivos de registro. Tabla 9. Acciones en syslog.conf

Acción

Propósito

Archivo normal

Especifica el nombre de ruta completo, que comienza con una barra (/). Coloque un guión (-) a modo de prefijo

18

para omitir la sincronización del archivo luego de cada entrada de registro. Esto puede provocar la pérdida de información si el sistema falla, pero puede mejorar el rendimiento.

Named Pipes Se puede usar una fifo o canalización designada como el (Canalizaciones destino de los mensajes de registro colocando un designadas) símbolo de canalización (|) antes del nombre del archivo. Usted debe crear la fifo usando el comando mkfifo antes de iniciar (o reiniciar)syslogd. A veces, se suelen usar las fifos para tareas de depuración.

Terminal y consola

Una terminal como /dev/console.

Máquina remota

Para reenviar mensajes hacia otro host, coloque el signo @ antes del nombre del host. Tenga en cuenta que los mensajes no se reenvían desde el host receptor.

Lista de usuarios

Una lista de los usuarios que recibirán un mensaje (si iniciaron sesión) separados por comas. Se suele incluir al usuario raíz en esta lista.

Todos los que Agregue un asterisco (*) para notificar a todos los que iniciaron sesión hayan iniciado sesión usando el comando wall.

Usted puede agregar el prefijo ! a una prioridad para indicar que la acción no se debería aplicar a este nivel y a los niveles más altos. De manera similar, usted puede agregar el prefijo = para indicar que la regla sólo aplica a este nivel. Si ingresa !=, estará indicando que la regla aplica a todos los niveles excepto a éste. El Listado 22 le muestra algunos ejemplos de esto. Vea la página man para conocer muchos más ejemplos de syslog.conf. Listado 22. Más ejemplos de syslog.conf # Store all kernel messages in /var/log/kernel. # Send critical and higher ones to remote host pinguino and to the console # Finally, Send info, notice and warning messages to /var/log/kernel-info # kern.* /var/log/kernel kern.crit @pinguino kern.crit /dev/console kern.info;kern.!err /var/log/kernel-info # Store all mail messages except info priority in /var/log/mail. mail.*;mail.!=info /var/log/mail

19

Rotación y archivado automático de archivos de registro Debido a la cantidad de registros que se permiten realizar, es necesario que usted pueda controlar el tamaño de los archivos de registro. Esto se realiza usando el comando logrotate, que suele ejecutarse como un trabajo cron. La idea general relativa al comandologrotate es que se hacen copias de seguridad periódicas de los archivos de registro y se da comienzo a un registro nuevo. Se conservan varias generaciones de registro. Y cuando un registro llega a su última generación, se lo puede archivar. Por ejemplo, se lo puede enviar por correo electrónico a un usuario de archivo. Use el archivo de configuración /etc/logrotate.conf para especificar cómo se debería realizar la rotación y el archivado de sus registros. Usted puede especificar diversas frecuencias (como, por ejemplo, diaria, semanal o mensual) para diferentes archivos de registro. Usted también puede controlar la cantidad de generaciones que se deben conservar y cuándo enviar las copias por correo electrónico a un usuario de archivo. El Listado 23 le muestra un archivo /etc/logrotate.conf a modo de ejemplo. Listado 23. Muestra de /etc/logrotate.conf # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp, or btmp -- we'll rotate them here /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0664 root utmp rotate 1 } # system-specific logs may be configured here

El archivo logrotate.conf tiene opciones globales al comienzo. Éstas están predeterminadas si no se indica nada más específico en ningún otro lado. En este ejemplo, los archivos de registro se rotan semanalmente y se conservan copias de seguridad correspondientes a un período de cuatro

20

semanas. Luego de realizar la rotación de un archivo de registro, se crea uno nuevo automáticamente para reemplazarlo. Tenga en cuenta que el archivo logrotate.conf puede incluir especificaciones de otros archivos. En este caso, se incluyen todos los archivos en /etc/logrotate.d. Este ejemplo también incluye reglas específicas para /var/log/wtmp y /var/log/btmp, que se rotan mensualmente. No se emite ningún mensaje de error si se pierden los archivos. Se crea un archivo nuevo y sólo se conserva una copia de seguridad. En este ejemplo, cuando una copia de seguridad llega a su última generación, se la borra porque no se especifica qué más hacer con ella. Nota: Los archivos /var/log/wtmp y /var/log/btmp registran los intentos de inicio de sesión exitosos y fallidos respectivamente. A diferencia de la mayoría de los archivos de registro, estos no son archivos de texto simples. Usted los puede examinar usando los comandos last o lastb. Vea las páginas man para mayor información sobre estos comandos. También se pueden hacer copias de seguridad de los archivos de registro cuando alcanzan un tamaño específico y los comandos se pueden configurar para que se ejecuten antes o después de que se realice la copia de seguridad. El Listado 24 le muestra un ejemplo más complejo de esto. Listado 24. Otro ejemplo de configuración de logrotate /var/log/messages { rotate 5 mail logsave@pinguino size 100k postrotate /usr/bin/killall -HUP syslogd endscript }

En este ejemplo, se rota /var/log/messages luego de que alcanza un tamaño de 100KB. Se conservan cinco copias de seguridad y, cuando la copia de seguridad más antigua cumple su ciclo, se la envía por correo electrónico a logsave@pinguino. El comando postrotate introduce un script que reinicia el daemon syslogd luego de completar la rotación enviándole la señal HUP. Se requiere la presencia del enunciado endscript para finalizar el script y también se requiere su presencia si un scriptprerotate está presente. Vea la página man correspondiente a logrotate para ver toda la información relativa a esto.

Escaneo de archivos de registro para identificar toda actividad relevante Generalmente, las entradas de archivos de registro incluyen la fecha y hora y el nombre de host del proceso informante, junto con el nombre del proceso. El Listado 25 le muestra algunas líneas de /var/log/messages, que incluyen entradas de gconfd, ntpd, init y yum. Listado 25. Muestra de entradas de archivos de registro Jul Jul Jul Jul Jul Jul Jul Jul Jul

5 15:28:24 lyrebird gconfd (root-2832): Exiting 5 15:31:06 lyrebird ntpd[2063]: synchronized to 87.98.219.90, stratum 2 5 15:31:06 lyrebird ntpd[2063]: kernel time sync status change 0001 5 15:31:24 lyrebird init: Trying to re-exec init 5 15:31:24 lyrebird yum: Updated: libselinux.i386 2.0.14-2.fc7 5 15:31:24 lyrebird yum: Updated: libsemanage.i386 2.0.3-4.fc7 5 15:31:25 lyrebird yum: Updated: cups-libs.i386 1.2.11-2.fc7 5 15:31:25 lyrebird yum: Updated: libXfont.i386 1.2.9-2.fc7 5 15:31:27 lyrebird yum: Updated: NetworkManager.i386 0.6.5-7.fc7

21

Jul 5 15:31:27 lyrebird yum: Updated: NetworkManager-glib.i386 0.6.5-7.fc7

Usted puede escanear los archivos de registro usando un paginador (como, por ejemplo, less) o buscar entradas específicas (como, por ejemplo, mensajes kernel del host lyrebird) usando grep (como se puede observar en el Listado 26). Listado 26. Escaneo de archivos de registro [root@lyrebird ~]# less /var/log/messages [root@lyrebird ~]# grep "lyrebird kernel" /var/log/messages | tail -n 9 Jul 5 15:26:46 lyrebird kernel: Bluetooth: HCI socket layer initialized Jul 5 15:26:46 lyrebird kernel: Bluetooth: L2CAP ver 2.8 Jul 5 15:26:46 lyrebird kernel: Bluetooth: L2CAP socket layer initialized Jul 5 15:26:46 lyrebird kernel: Bluetooth: RFCOMM socket layer initialized Jul 5 15:26:46 lyrebird kernel: Bluetooth: RFCOMM TTY layer initialized Jul 5 15:26:46 lyrebird kernel: Bluetooth: RFCOMM ver 1.8 Jul 5 15:26:46 lyrebird kernel: Bluetooth: HIDP (Human Interface Emulation) ver 1.2 Jul 5 15:26:59 lyrebird kernel: [drm] Initialized drm 1.1.0 20060810 Jul 5 15:26:59 lyrebird kernel: [drm] Initialized i915 1.6.0 20060119 on minor 0

Monitoreo de archivos de registro Ocasionalmente, es posible que usted necesite monitorear los archivos de registro para identificar eventos. Por ejemplo, es posible que usted esté intentando identificar un evento que no ocurre con una gran frecuencia en el momento exacto que ocurre. En tal caso, usted puede usar el comando tail con la opción -f a continuación del archivo de registro. El Listado 27 le muestra un ejemplo de esto. Listado 27. Actualizaciones posteriores del archivo de registro [root@lyrebird ~]# tail -n 1 -f /var/log/messages Jul 6 15:16:26 lyrebird syslogd 1.4.2: restart. Jul 6 15:16:26 lyrebird kernel: klogd 1.4.2, log source = /proc/kmsg started. Jul 6 15:19:35 lyrebird yum: Updated: samba-common.i386 3.0.25b-2.fc7 Jul 6 15:19:35 lyrebird yum: Updated: procps.i386 3.2.7-14.fc7 Jul 6 15:19:36 lyrebird yum: Updated: samba-client.i386 3.0.25b-2.fc7 Jul 6 15:19:37 lyrebird yum: Updated: libsmbclient.i386 3.0.25b-2.fc7 Jul 6 15:19:46 lyrebird gconfd (ian-3267): Received signal 15, shutting down cleanly Jul 6 15:19:46 lyrebird gconfd (ian-3267): Exiting Jul 6 15:19:57 lyrebird yum: Updated: bluez-gnome.i386 0.8-1.fc7

Seguimiento de los problemas identificados en los archivos de registro Cuando encuentra problemas en los archivos de registro, usted deberá registrar la hora, el nombre de host y el proceso que generó el problema. Si el mensaje identifica el problema específicamente como para que usted lo pueda resolver, no es necesario hacer nada más. En caso contrario, es posible que deba actualizar syslog.conf para especificar que más mensajes se registren para la

22

facilidad apropiada. Por ejemplo, es posible que usted deba mostrar mensajes informativos en vez de mensajes de advertencia o incluso mensajes de nivel de depuración. Su aplicación puede contar con facilidades adicionales que usted podrá usar. Por último, si necesita colocar marcas en el archivo de registro para que lo ayuden a reconocer qué mensajes se registraron en qué etapa de su actividad de depuración, usted puede usar el comando logger desde una ventana de terminal o desde un shell script para enviar un mensaje de su elección al daemon syslog para que se efectúe el registro de acuerdo con las reglas que figuran en syslog.conf.

Copias de seguridad de datos En esta sección, usted aprenderá a: • Planificar una estrategia de copias de seguridad • Volcar un dispositivo en bruto en un archivo o restaurar un dispositivo en bruto desde un archivo • Realizar copias de seguridad parciales y manuales • Verificar la integridad de las copia de seguridad • Restaurar sistemas de archivos desde las copias de seguridad de manera parcial o total

Planificación de una estrategia de copias de seguridad Contar con una buena estrategia de copias de seguridad es una parte necesaria de la administración de sistemas. Pero decidir qué incluir en las copias de seguridad y cuándo y cómo realizarlas puede resultar ser algo bastante complejo. Las bases de datos (como, por ejemplo, los pedidos de clientes o el inventario) suelen tener una importancia crítica para los negocios y muchas de éstas incluyen herramientas especializadas de realización de copias de seguridad y de restauración de datos que exceden el alcance de este tutorial. Por otra parte, algunos archivos son temporarios por su naturaleza y no es necesario incluirlos en las copias de seguridad. En esta sección, nos concentramos en los archivos del sistema y en los datos de usuario y discutimos algunas de las consideraciones, los métodos y las herramientas de realización de copias de seguridad que incluyan estos datos. Existen tres enfoques generales en relación con la realización de copias de seguridad: 1. Una copia de seguridad total es una copia de seguridad completa (que, generalmente, incluye un sistema de archivos completo, un directorio completo o un grupo de archivos relacionados). Crear este enfoque lleva mucho tiempo. Por lo tanto, se lo suele usar junto con alguno de los otros dos enfoques. 2. Una copia de seguridad diferencial o acumulativa es una copia de seguridad que incluye todas las cosas que se han modificado desde que se realizó la última copia de seguridad total. La restauración de datos hace que sea necesario contar con la copia de seguridad total y la última copia de seguridad diferencial. 3. Una copia de seguridad incremental es una copia de seguridad que sólo incluye aquellos cambios realizados desde la última copia de seguridad incremental. La restauración de datos hace que sea necesario contar con la última copia de seguridad total y todas las copias de seguridad incrementales (en orden) realizadas desde la última copia de seguridad total.

¿Qué se debe incluir en las copias de seguridad? Al momento de decidir qué se debe incluir en las copias de seguridad, usted debería considerar el nivel de volatilidad de los datos. Esto lo ayudará a determinar la frecuencia que deberían tener las copias de seguridad. De igual forma, se deberían realizar copias de seguridad de los datos críticos más a menudo que en el caso de los datos no críticos. Es muy probable que su sistema operativo sea fácil de reconstruir, especialmente si usted usa una imagen común para varios sistemas, aunque sería más importante realizar copias de seguridad de los archivos que personalizan a cada sistema.

23

Para el personal de programación, posiblemente sea suficiente conservar copias de seguridad de los repositorios (como, por ejemplo, los repositorios CVS), mientras es probable que los espacios seguros de los programadores individuales sean menos importantes. Dependiendo de lo importante que sea el correo electrónico para sus operaciones, es probable que realizar copias de seguridad de sus mensajes de correo electrónico de manera poco frecuente sea suficiente, o quizá sea necesario contar con la capacidad de poder restaurar los mensajes de correo electrónico hasta la fecha más reciente que sea posible. Usted debería conservar copias de seguridad de los archivos cron del sistema, pero existe la posibilidad de que no le interesen tanto los trabajos programados para los usuarios individuales. El Estándar de Jerarquía del Sistema de Archivos le ofrece una clasificación de los datos que lo puede ayudar con sus elecciones de realización de copias de seguridad. Cuando haya decidido qué debe incluir en las copias de seguridad, usted debe decidir con qué frecuencia realizar copias de seguridad totales y si también es necesario realizar copias de seguridad diferenciales o incrementales entre dichas copias de seguridad totales. Luego de tomar estas decisiones, las siguientes sugerencias lo ayudarán a elegir las herramientas adecuadas.

Automatización de copias de seguridad En la sección anterior, usted aprendió a programar trabajos. Tenga en cuenta que la facilidad cron resulta ser ideal para ayudarlo a automatizar la programación de sus copias de seguridad. Sin embargo, las copias de seguridad se suelen realizar en medios removibles (cinta en la mayoría de los casos). Por lo tanto, es muy probable que se necesite la intervención de operadores. Usted debería crear y usar scripts de copias de seguridad para garantizar que el proceso de realización de copias de seguridad esté lo más automatizado y sea lo más repetible que se pueda.

Volcado y restauración de dispositivos en bruto Una forma de hacer una copia de seguridad total de un sistema de archivos consiste en hacer una imagen de la partición en la que dicho sistema de archivos reside. Un dispositivo en bruto, como el /dev/hda1 o el /dev/sda2, se puede abrir y leer como un archivo secuencial. De igual forma, se puede escribir desde una copia de seguridad como un archivo secuencial. Es no requiere que la herramienta que realiza las copias de seguridad conozca la disposición del sistema de archivos, pero sí requiere que la restauración se haga en un espacio que sea, por lo menos, del mismo tamaño que el original. Algunas herramientas que trabajan con dispositivos en bruto conocen el sistema de archivos, lo que significa que comprenden uno o más de los sistemas de archivos de Linux. Estas utilidades pueden volcar información desde un dispositivo en bruto, pero no vuelcan las partes no usadas de la partición. También pueden o no requerir que la restauración se lleve a cabo en una partición del mismo tamaño o de un tamaño superior. El comando dd es un ejemplo de este primer tipo, mientras que el comando dumpes un ejemplo del segundo tipo, que es específico a los sistemas de archivos ext2 y ext3.

El comando dd En su forma más simple, el comando dd copia un archivo de entrada en un archivo de salida, donde cualquiera de estos archivos puede ser un dispositivo en bruto. Para hacer una copia de seguridad de un dispositivo en bruto (como, por ejemplo, /dev/hda1 o /dev/sda2), el archivo de entrada será el dispositivo en bruto. Lo ideal sería que se desmonte el sistema de archivos en el dispositivo, o que permanezca montado pero como un archivo de sólo lectura, con el objetivo de garantizar que los datos no se modifiquen durante la realización de la copia de seguridad. El Listado 39 le muestra un ejemplo de esto. Listado 39. Copia de seguridad de una partición usando dd [root@lyrebird ~]# dd if=/dev/sda3 of=backup-1 2040255+0 records in 2040255+0 records out 1044610560 bytes (1.0 GB) copied, 49.3103 s, 21.2 MB/s

24

Los parámetros if y of especifican los archivos de entrada y de salida respectivamente. En este ejemplo, el archivo de entrada es un dispositivo en bruto (dev/sda3) y el archivo de salida es un archivo (backup-1) en el directorio principal del usuario raíz. Para volcar el archivo en cinta o en disco flexible, usted debería especificar algo como lo siguiente: of=/dev/fd0 uof=/dev/st0. Tenga en cuenta que 1.044.610.560 bytes de datos se copiaron y que el archivo de salida tiene exactamente ese tamaño, aunque sólo se usa alrededor del 3% de esta partición específica en realidad. A menos que esté copiando en cinta con compresión de hardware, es probable que usted desee comprimir los datos. El Listado 40 le muestra una forma de lograr esto, junto con los datos de salida de los comandos ls y df (que le muestran el tamaño de los archivos y el porcentaje de uso del sistema de archivos en /dev/sda3). Listado 40. Copia de seguridad con compresión usando dd [root@lyrebird ~]# dd if=/dev/sda3 | gzip > backup-2 2040255+0 records in 2040255+0 records out 1044610560 bytes (1.0 GB) copied, 117.723 s, 8.9 MB/s [root@lyrebird ~]# ls -l backup-[12] -rw-r--r-- 1 root root 1044610560 2007-07-08 15:17 backup-1 -rw-r--r-- 1 root root 266932272 2007-07-08 15:56 backup-2 [root@lyrebird ~]# df -h /dev/sda3 Filesystem Size Used Avail Use% Mounted on /dev/sda3 972M 28M 944M 3% /grubfile

La compresión gzip redujo el tamaño del archivo a alrededor del 20% del tamaño del archivo sin comprimir. Sin embargo, los bloques no usados pueden incluir datos arbitrarios. Por ende, incluso las copias de seguridad comprimidas pueden tener un tamaño muy superior al de los datos totales que se encuentran en la partición. Si divide el tamaño por la cantidad de registros procesados por dd, podrá observar que dd escribe bloques de datos de 512 bytes. Al copiar en un dispositivo de salida en bruto (como, por ejemplo, una cinta), esto puede provocar un funcionamiento muy deficiente. Por lo tanto, dd puede leer o escribir datos en bloques mucho más grandes. Especifique la opción obs para cambiar el tamaño de salida o la opción ibs para especificar el tamaño del bloque de entrada. Usted también puede especificar sólo bspara configurar el tamaño de los bloques de entrada y de salida de manera tal que tengan un valor común. Si necesita varias cintas u otros medios de almacenamiento removibles para guardar sus copias de seguridad, deberá dividirlo en partes más pequeñas usando una utilidad como, por ejemplo, split. Si necesita saltear bloques (como, por ejemplo, los rótulos de disco o de cinta), usted puede hacer esto con dd. Podrá encontrar ejemplos de esto en la página man. Además de sólo copiar datos, el comando dd puede realizar varias conversiones (como, por ejemplo, entre ASCII y EBCDIC, entre big-endian y little-endian o entre registros de datos de longitud variable y registros de datos de longitud fija). Por supuesto que es probable que estas conversiones resulten muy útiles al momento de copiar archivos reales en vez de dispositivos en bruto. Una vez más, vea la página man para mayor información al respecto. El comando dump El comando dump se puede usar para realizar copias de seguridad totales, diferenciales o incrementales en los sistemas de archivos ext2 o ext3. El Listado 41 le muestra un ejemplo de esto.

25

Listado 41. Copia de seguridad con compresión usando dump [root@lyrebird ~]# dump -0 -f backup-4 -j -u /dev/sda3 DUMP: Date of this level 0 dump: Sun Jul 8 16:47:47 2007 DUMP: Dumping /dev/sda3 (/grubfile) to backup-4 DUMP: Label: GRUB DUMP: Writing 10 Kilobyte records DUMP: Compressing output at compression level 2 (bzlib) DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 12285 blocks. DUMP: Volume 1 started with block 1 at: Sun Jul 8 16:47:48 2007 DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: Closing backup-4 DUMP: Volume 1 completed at: Sun Jul 8 16:47:57 2007 DUMP: Volume 1 took 0:00:09 DUMP: Volume 1 transfer rate: 819 kB/s DUMP: Volume 1 12260kB uncompressed, 7377kB compressed, 1.662:1 DUMP: 12260 blocks (11.97MB) on 1 volume(s) DUMP: finished in 9 seconds, throughput 1362 kBytes/sec DUMP: Date of this level 0 dump: Sun Jul 8 16:47:47 2007 DUMP: Date this dump completed: Sun Jul 8 16:47:57 2007 DUMP: Average transfer rate: 819 kB/s DUMP: Wrote 12260kB uncompressed, 7377kB compressed, 1.662:1 DUMP: DUMP IS DONE [root@lyrebird ~]# ls -l backup-[2-4] -rw-r--r-- 1 root root 266932272 2007-07-08 15:56 backup-2 -rw-r--r-- 1 root root 266932272 2007-07-08 15:44 backup-3 -rw-r--r-- 1 root root 7554939 2007-07-08 16:47 backup-4

En este ejemplo, -0 especifica el nivel de volcado que es un número íntegro (históricamente de 0 a 9, donde 0 especifica un volcado total). La opción -f especifica el archivo de salida, que puede ser un dispositivo en bruto. Especifique - para direccionar los datos de salida hacia stdout. La opción j especifica la compresión, con un nivel predeterminado de 2, usando compresión bzlib. Usted puede usar la opción -z para especificar la compresión zlib, si prefiere esto. La opción -u hace que el registro de información volcada (generalmente, /etc/dumpdates) se actualice. Los parámetros que se encuentran luego de la opción representan un archivo o una lista de archivos, donde el archivo puede ser un dispositivo en bruto, como en este ejemplo. Tenga en cuenta el menor tamaño que tiene la copia de seguridad cuando el programa que la realiza conoce la estructura del sistema de archivos y puede evitar el guardado de bloques no usados en el dispositivo. Si los datos de salida se dirigen hacia un dispositivo (cinta, por ejemplo), el comando dump solicitará otro volumen a medida que cada volumen se va llenado. Usted también puede ofrecer varios nombres de archivo separados por comas. Por ejemplo, si desea realizar un volcado autónomo que requiere dos cintas, usted podría cargar las cintas en /dev/st0 y en /dev/st1, programar el comando dump especificando ambas cintas para los datos de salida e irse a dormir a su casa. Cuando usted especifica un nivel de volcado mayor a 0, se realiza un volcado incremental de todos los archivos nuevos o modificados desde el último volcado en un nivel más bajo. Por lo tanto, un volcado en el nivel 1 será un volcado diferencial, incluso si se realizó un volcado en el nivel 2 o superior mientras tanto. El Listado 42 le muestra el resultado de la actualización de la fecha y hora de un archivo existente en /dev/sda3 y la creación de un archivo nuevo, seguido por la realización

26

de un volcado en el nivel 2. Luego de esto, se crea otro archivo nuevo y se realiza un volcado en el nivel 1. La información de /etc/dumpdates también se visualiza. A los fines de no extendernos demasiado sobre este punto, se omitió parte de los datos de salida del segundo volcado. Listado 42. Copia de seguridad con compresión usando dump [root@lyrebird ~]# dump -2 -f backup-5 -j -u /dev/sda3 DUMP: Date of this level 2 dump: Sun Jul 8 16:55:46 2007 DUMP: Date of last level 0 dump: Sun Jul 8 16:47:47 2007 DUMP: Dumping /dev/sda3 (/grubfile) to backup-5 DUMP: Label: GRUB DUMP: Writing 10 Kilobyte records DUMP: Compressing output at compression level 2 (bzlib) DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 91 blocks. DUMP: Volume 1 started with block 1 at: Sun Jul 8 16:55:47 2007 DUMP: dumping (Pass III) [directories] DUMP: dumping (Pass IV) [regular files] DUMP: Closing backup-5 DUMP: Volume 1 completed at: Sun Jul 8 16:55:47 2007 DUMP: 90 blocks (0.09MB) on 1 volume(s) DUMP: finished in less than a second DUMP: Date of this level 2 dump: Sun Jul 8 16:55:46 2007 DUMP: Date this dump completed: Sun Jul 8 16:55:47 2007 DUMP: Average transfer rate: 0 kB/s DUMP: Wrote 90kB uncompressed, 15kB compressed, 6.000:1 DUMP: DUMP IS DONE [root@lyrebird ~]# echo "This data is even newer" >/grubfile/newerfile [root@lyrebird ~]# dump -1 -f backup-6 -j -u -A backup-6-toc /dev/sda3 DUMP: Date of this level 1 dump: Sun Jul 8 17:08:18 2007 DUMP: Date of last level 0 dump: Sun Jul 8 16:47:47 2007 DUMP: Dumping /dev/sda3 (/grubfile) to backup-6 ... DUMP: Wrote 100kB uncompressed, 16kB compressed, 6.250:1 DUMP: Archiving dump to backup-6-toc DUMP: DUMP IS DONE [root@lyrebird ~]# ls -l backup-[4-6] -rw-r--r-- 1 root root 7554939 2007-07-08 16:47 backup-4 -rw-r--r-- 1 root root 16198 2007-07-08 16:55 backup-5 -rw-r--r-- 1 root root 16560 2007-07-08 17:08 backup-6 [root@lyrebird ~]# cat /etc/dumpdates /dev/sda3 0 Sun Jul 8 16:47:47 2007 -0400 /dev/sda3 2 Sun Jul 8 16:55:46 2007 -0400 /dev/sda3 1 Sun Jul 8 17:08:18 2007 -0400

Tenga en cuenta que backup-6 es, de hecho, más grande que backup-5. El volcado de nivel 1 ilustra el uso de la opción -Apara crear una tabla de contenidos que se puede usar para determinar si un archivo está en un archivo de almacenamiento sin necesidad de montar el archivo de almacenamiento. Esto resulta muy útil en el caso de las cintas y todos los demás volúmenes de archivo removibles. Usted volverá a ver estos ejemplos cuando discutamos la restauración de datos más adelante en esta sección.

27

El comando dump puede volcar archivos o subdirectorios, pero usted no puede actualizar /etc/dumpdates y sólo se soporta el nivel 0 de volcado total. El Listado 43 ilustra el comando dump mediante el volcado de un directorio (/usr/include/bits) y sus contenidos en un diskette. En este caso, el volcado no entrará en un solo diskette. Por lo tanto, es necesario contar con un volumen nuevo. El aviso y la respuesta figuran en negrita. Listado 43. Copia de seguridad de un directorio en varios volúmenes usando dump [root@lyrebird ~]# dump -0 -f /dev/fd0 /usr/include/bits DUMP: Date of this level 0 dump: Mon Jul 9 16:03:23 2007 DUMP: Dumping /dev/sdb9 (/ (dir usr/include/bits)) to /dev/fd0 DUMP: Label: / DUMP: Writing 10 Kilobyte records DUMP: mapping (Pass I) [regular files] DUMP: mapping (Pass II) [directories] DUMP: estimated 2790 blocks. DUMP: Volume 1 started with block 1 at: Mon Jul 9 16:03:30 2007 DUMP: dumping (Pass III) [directories] DUMP: End of tape detected DUMP: Closing /dev/fd0 DUMP: Volume 1 completed at: Mon Jul 9 16:04:49 2007 DUMP: Volume 1 1470 blocks (1.44MB) DUMP: Volume 1 took 0:01:19 DUMP: Volume 1 transfer rate: 18 kB/s DUMP: Change Volumes: Mount volume #2 DUMP: Is the new volume mounted and ready to go?: ("yes" or "no") y DUMP: Volume 2 started with block 1441 at: Mon Jul 9 16:05:10 2007 DUMP: Volume 2 begins with blocks from inode 2 DUMP: dumping (Pass IV) [regular files] DUMP: Closing /dev/fd0 DUMP: Volume 2 completed at: Mon Jul 9 16:06:28 2007 DUMP: Volume 2 1410 blocks (1.38MB) DUMP: Volume 2 took 0:01:18 DUMP: Volume 2 transfer rate: 18 kB/s DUMP: 2850 blocks (2.78MB) on 2 volume(s) DUMP: finished in 109 seconds, throughput 26 kBytes/sec DUMP: Date of this level 0 dump: Mon Jul 9 16:03:23 2007 DUMP: Date this dump completed: Mon Jul 9 16:06:28 2007 DUMP: Average transfer rate: 18 kB/s DUMP: DUMP IS DONE

Si hace una copia de seguridad en cinta, recuerde que lo más común es que la cinta se rebobine luego de cada trabajo. Los dispositivos que tienen un nombre como /dev/st0 o /dev/st1 se rebobinan automáticamente. Los dispositivos equivalentes que no se rebobinan son /dev/nst0 y /dev/nst1. En cualquier caso, usted siempre puede usar el comando mt para realizar tareas de cinta magnética (como, por ejemplo, el avance de espacios en archivos y registros, el retroceso de espacios, el rebobinado y la escritura de marcas de EOF). Vea las páginas man para mayor información sobre mt y st. Si selecciona los niveles de volcado utilizando un criterio acertado, usted podrá minimizar la cantidad de archivos de almacenamiento que deberá restaurar en un nivel en particular. Vea las páginas man correspondientes a dump y conozca una sugerencia basada en el rompecabezas Torres de Hanoi. Al igual que con el comando dd, existen muchas opciones que no forman parte de esta breve introducción. Vea las páginas man para mayor información al respecto.

28

Copias de seguridad parciales y manuales Hasta ahora, usted aprendió sobre las herramientas que funcionan bien para hacer copias de seguridad de todo un sistema de archivos. A veces, su copia de seguridad se debe concentrar en archivos o en subdirectorios específicos sin que exista la necesidad de hacer una copia de seguridad de todo el sistema de archivos. Por ejemplo, es posible que usted necesite realizar una copia de seguridad semanal de la mayor parte de su sistema y copias de seguridad diarias de sus archivos de correo electrónico. Se suelen usar dos programas diferentes, cpio y tar, para este propósito. Ambos pueden escribir archivos en archivos de almacenamiento o en dispositivos (como, por ejemplo, cintas o discos flexibles). Además, ambos también pueden restaurar información desde dichos archivos de almacenamiento. A uno de ellos, tar, se lo suele usar con mayor frecuencia hoy en día, principalmente porque resulta mucho mejor al momento de trabajar con directorios completos. Además, GNU tar soporta la compresión gzip y la compresión bzip.

Uso de cpio El comando cpio funciona en modo copy-out para crear un archivo de almacenamiento, en modo copy-in para restaurar un archivo de almacenamiento o en modo copy-pass para copiar un conjunto de archivos de un lugar a otro. Use la opción -o o --create para el modo copy-out, la opción -i o --extract para el modo copy-in y la opción -p o --pass-through para el modo copy-pass. Los datos de entrada son una lista de los archivos que figura en stdin. Los datos de salida se envían a stdout o a un dispositivo o a un archivo que se especifica con la opción -f o --file. El Listado 44 le muestra cómo generar una lista de archivos usando el comando find. Observe el uso de la opción -print0en find para generar cadenas con terminación nula para los nombres de los archivos, y la correspondiente opción --null encpio para leer este formato. Esto trabajará correctamente con los nombres de los archivos que tienen caracteres en blanco o de nueva línea. Listado 44. Copia de seguridad de un directorio principal usando cpio [root@lyrebird ~]# find ~ian -depth -print0 | cpio --null -o >backup-cpio-1 18855 blocks Si desea ver los archivos en una lista de la misma forma que están archivados, agregue la opción v a cpio. Al igual que con los demás comando que pueden archivar en cinta, se puede especificar el tamaño de bloque. Para mayor información sobre ésta y otras opciones, vea la página man.

Uso de tar El tar (que proviene de Tape ARchive - archivo de cinta) crea un archivo de almacenamiento tarfile o tarball a partir de un conjunto de archivos o directorios de entrada. Además, también restaura archivos desde dicho archivo de almacenamiento. Si un directorio se indica como dato de entrada a tar, se incluyen todos los archivos y todos los subdirectorios de manera automática, lo que hace que el uso de tar sea muy conveniente para archivar los subárboles de la arquitectura de su directorio. Al igual que con los demás comandos de archivado que hemos discutido, los datos de salida pueden dirigirse a un archivo, un dispositivo como por ejemplo una cinta o un disquete, o a stdout. La ubicación de los datos de salida se especifica con la opción -f. Las siguientes son algunas de las otras opciones más comunes: -c se ingresa para crear un archivo de almacenamiento; -x se ingresa para extraer un archivo de almacenamiento; -v se ingresa para obtener datos de salida detallados (lo que produce una lista de los archivos que se están procesando); -z se ingresa para usar la compresión gzip; y -j se ingresa para usar la compresión bzip2. La mayoría de las opciones tar tienen una forma abreviada que usa un solo guión y una forma larga que usa un par de guiones. Las formas abreviadas son las que se ilustran aquí. Vea las páginas man para conocer las formas largas y otras opciones adicionales.

29

El Listado 45 le muestra cómo crear una copia de seguridad de los trabajos cron del sistema usando tar. Listado 45. Copia de seguridad de los trabajos cron del sistema usando tar [root@lyrebird ~]# tar -czvf backup-tar-1 /etc/*crontab /etc/cron.d tar: Removing leading `/' from member names /etc/anacrontab /etc/crontab /etc/cron.d/ /etc/cron.d/sa-update /etc/cron.d/smolt

En la primera línea de los datos de salida, se le indica que tar eliminará la barra inicial (/) de los nombres de los miembros. Esto permite que los archivos se restauren en otra ubicación para su verificación antes de reemplazar los archivos del sistema. Es una buena idea evitar mezclar los nombres de ruta absolutos con los nombres de ruta relativos al momento de crear un archivo de almacenamiento, ya que todos serán relativos cuando se realice la restauración desde el archivo de almacenamiento. El comando tar puede anexar archivos adicionales a un archivo de almacenamiento usando la opción -r o --append. Esto puede provocar múltiples copias de un archivo en el archivo de almacenamiento. En tal caso, el último se restaurará durante una operación de restauración. Usted puede usar la opción --occurrence para seleccionar un archivo específico entre varios archivos. Si el archivo de almacenamiento se encuentra en un sistema de archivos normal en vez de en cinta, usted podrá usar la opción -u o --update para actualizar el archivo de almacenamiento. Esto funciona de la misma forma que cuando se anexa a un archivo de almacenamiento, excepto porque la fecha y hora de los archivos en el archivo de almacenamiento se compara con la fecha y hora de los sistemas de archivos y sólo se anexan los archivos modificados después de la versión archivada. Como ya lo hemos mencionado, esto no funciona en el caso de los archivos de cinta. Al igual que en el caso de otros comandos que hemos discutido en el presente, existen muchas opciones que no se mencionan en esta breve introducción. Vea las páginas man o de información para obtener más detalles al respecto.

Integridad de la copia de seguridad La integridad de la copia de seguridad es fundamental. No tiene sentido hacer una copia de seguridad si el archivo está corrupto. Una buena estrategia de copias de seguridad también involucra la verificación de las copias de seguridad. El primer paso para garantizar la integridad de las copias de seguridad consiste en garantizar que usted haya capturado adecuadamente los datos que deseaba incluir en la copia de seguridad. Si el sistema de archivos está desmontado o está montado pero es de sólo lectura, esto resulta bastante simple porque los datos que usted está incluyendo en la copia de seguridad no se pueden modificar durante el proceso. Si debe realizar copias de seguridad de sistemas de archivos, directorios o archivos que están sujetos a modificaciones mientras se realiza la copia de seguridad en cuestión, usted debería verificar que no se hayan realizado cambios durante la realización de la copia de seguridad. Si se realizaron cambios, usted deberá contar con una estrategia para capturarlos (ya sea repitiendo la copia de seguridad o reemplazando o substituyendo los archivos afectados en su copia de seguridad). No hace falta decir que esto también afectará sus procedimientos de restauración. Asumiendo que realizó las copias de seguridad adecuadamente, usted deberá verificarlas de manera periódica. Una forma de hacer esto consiste en recuperar la copia de seguridad en un volumen extra y verificar que se corresponda con la información que usted incluyó en la copia de seguridad. Esto es lo más fácil que usted puede hacer antes de permitir la actualización del sistema de archivos que está incluyendo en la copia de seguridad. Si realiza la copia de seguridad en un medio como un CD o un DVD, es posible que usted pueda usar el comando diff como parte

30

de su procedimiento de realización de copias de seguridad para garantizar que su copia de seguridad sea adecuada. Recuerde que incluso las copias de seguridad adecuadas se pueden llegar a deteriorar durante el período de almacenamiento. Por lo tanto, usted debería realizar controles periódicos, incluso cuando también haya realizado la verificación en el momento de realizar la copia de seguridad. Conservar ficheros usando programas como md5sum o sha1sum también es una buena forma de controlar la integridad de la copia de seguridad.

Recuperación de sistemas de archivos desde las copias de seguridad La contraparte de hacer copias de seguridad es la capacidad de recuperarlas cuando sea necesario. De vez en cuando, usted querrá recuperar un sistema de archivos completo, pero lo más común es que usted sólo necesite recuperar archivos específicos o quizá un conjunto de directorios. Casi siempre, usted recuperará la información en algún volumen temporal y verificará que todo lo recuperado sea lo deseado y que sea consistente con el estado actual de su sistema antes de ejecutar la recuperación de los archivos. Un problema relacionado consiste en la necesidad de verificar que los elementos que necesita recuperar se encuentran en una copia de seguridad en particular, como suele ocurrir cuando un usuario necesita acceder a una versión de un archivo que se modificó o borró "en algún momento de la semana pasada o de los últimos quince días". Teniendo esto en cuenta, analicemos algunas de las opciones de recuperación.

Recuperación de un archivo de almacenamiento dd Recuerde que el comando dd no tenía conciencia de la existencia del sistema de archivos. Por ende, usted deberá recuperar un volcado de una partición para encontrar todo lo que forma parte de ella. El Listado 46 le muestra cómo recuperar la partición que se volcó en el Listado 39 en una partición (/dev/sdc7) creada específicamente en una unidad USB removible para este propósito. Listado 46. Recuperación de una partición usando dd [root@lyrebird ~]# dd if=backup-1 of=/dev/sdc7 2040255+0 records in 2040255+0 records out 1044610560 bytes (1.0 GB) copied, 44.0084 s, 23.7 MB/s

Recuerde que agregamos algunos archivos al sistema de archivos en /dev/sda3 luego de realizar la copia de seguridad. Si usted monta la partición recientemente recuperada y la compara con la versión original, observará que éste es el caso (como se puede observar en el Listado 47). Tenga en cuenta que, a diferencia de lo que usted esperaría que ocurra, el archivo cuya fecha y hora se actualizó usando touch no aparece aquí. Listado 47. Comparación de la partición recuperada con el estado actual [root@lyrebird ~]# mount /dev/sdc7 /mnt/temp-dd/ [root@lyrebird ~]# diff -rq /grubfile/ /mnt/temp-dd/ Only in /grubfile/: newerfile Only in /grubfile/: newfile

Recuperación de un archivo de volcado usando restore Recuerde que el último uso de dump que analizamos era una copia de seguridad diferencial y que creamos una tabla de contenidos. El Listado 48 le muestra cómo usar restore para verificar los archivos que se encuentran en el archivo de almacenamiento creado por dump, usando el archivo de almacenamiento propiamente dicho (backup-5) o la tabla de contenidos (backup-6-toc).

31

Listado 48. Verificación de contenidos de archivos de almacenamiento [root@lyrebird ~]# restore -t -f backup-5 Dump tape is compressed. Dump date: Sun Jul 8 16:55:46 2007 Dumped from: Sun Jul 8 16:47:47 2007 Level 2 dump of /grubfile on lyrebird.raleigh.ibm.com:/dev/sda3 Label: GRUB 2 . 100481 ./ibshome 100482 ./ibshome/index.html 16 ./newfile [root@lyrebird ~]# restore -t -A backup-6-toc Dump date: Sun Jul 8 17:08:18 2007 Dumped from: Sun Jul 8 16:47:47 2007 Level 1 dump of /grubfile on lyrebird.raleigh.ibm.com:/dev/sda3 Label: GRUB Starting inode numbers by volume: Volume 1: 2 2 . 100481 ./ibshome 100482 ./ibshome/index.html 16 ./newfile 17 ./newerfile

El comando restore también puede comparar los contenidos de un archivo de almacenamiento con los contenidos del sistema de archivos usando la opción -C. En el Listado 49, actualizamos newerfile y, luego de esto, comparamos la copia de seguridad con el sistema de archivos. Listado 49. Comparación de un archivo de almacenamiento con un sistema de archivos usando restore [root@lyrebird ~]# echo "something different" >/grubfile/newerfile [root@lyrebird ~]# restore -C -f backup-6 Dump tape is compressed. Dump date: Sun Jul 8 17:08:18 2007 Dumped from: Sun Jul 8 16:47:47 2007 Level 1 dump of /grubfile on lyrebird.raleigh.ibm.com:/dev/sda3 Label: GRUB filesys = /grubfile ./newerfile: size has changed. Some files were modified! 1 compare errors

El comando restore puede efectuar la recuperación de manera interactiva o automática. El Listado 50 le muestra cómo recuperar newerfile en el directorio principal del usuario raíz (para que lo pueda examinar antes de remplazar el archivo actualizado de ser necesario) y, luego de esto, remplazar el archivo actualizado por la copia de seguridad. Este ejemplo ilustra la recuperación interactiva. Listado 50. Recuperación de un archivo usando restore

32

[root@lyrebird ~]# restore -i -f backup-6 Dump tape is compressed. restore > ? Available commands are: ls [arg] - list directory cd arg - change directory pwd - print current directory add [arg] - add `arg' to list of files to be extracted delete [arg] - delete `arg' from list of files to be extracted extract - extract requested files setmodes - set modes of requested directories quit - immediately exit program what - list dump header information verbose - toggle verbose flag (useful with ``ls'') prompt - toggle the prompt display help or `?' - print this list If no `arg' is supplied, the current directory is used restore > ls new* newerfile newfile restore > add newerfile restore > extract You have not read any volumes yet. Unless you know which volume your file(s) are on you should start with the last volume and work towards the first. Specify next volume # (none if no more volumes): 1 set owner/mode for '.'? [yn] y restore > q [root@lyrebird ~]# mv -f newerfile /grubfile

Recuperación de un archivo de almacenamiento cpio El comando cpio en modo copy-in (opción -i o --extract) puede mostrar una lista de los contenidos de un archivo de almacenamiento o recuperar los archivos seleccionados. Cuando visualiza la lista de los archivos, especificando la opción --absolute-filenames, se reduce la cantidad de mensajes extraños que, de otra forma, cpio emitiría a medida que se encuentra con una / inicial desde cada ruta que tiene una. El Listado 51 le muestra los datos de salida parciales del listado de nuestro archivo de almacenamiento anterior. Listado 51. Recuperación de los archivos seleccionados usando cpio [root@lyrebird ~]# cpio -id --list --absolute-filenames &1 |uniq cpio: Removing leading `/' from member names home/ian/crontab.samp cpio: Removing leading `/' from member names home/ian/sample.file cpio: Removing leading `/' from member names 18855 blocks

Recuperación de un archivo de almacenamiento tar El comando tar también puede comparar archivos de almacenamiento con el sistema de archivos actual y recuperar archivos desde los archivos de almacenamiento. Use la opción -d, --compare o -diff para realizar comparaciones. Los datos de salida mostrarán aquellos archivos cuyos contenidos difieren y aquellos archivos cuya fecha y hora difiere. El Listado 53 le muestra datos de salida detallados (usando la opción -v) a partir de una comparación entre el archivo creado con anterioridad y los archivos en /etc luego de modificar /etc/crontab para alterar su fecha y hora. La opción directory / le indica a tar la necesidad de realizar la comparación comenzando desde el directorio raíz en vez de desde el directorio actual. Listado 53. Comparación de archivos usando tar [root@lyrebird ~]# touch /etc/crontab [root@lyrebird ~]# tar --diff -vf backup-tar-1 --directory / etc/anacrontab etc/crontab etc/crontab: Mod time differs etc/cron.d/ etc/cron.d/sa-update etc/cron.d/smolt

El Listado 54 le muestra cómo extraer sólo /etc/crontab y /etc/anacrontab en el directorio actual. Listado 54. Extracción de archivos de almacenamiento usando tar [root@lyrebird ~]# tar -xzvf backup-tar-1 "*tab" etc/anacrontab etc/crontab

Tenga en cuenta que tar, a diferencia de cpio, crea la jerarquía de directorio por usted de manera automática. La próxima sección de este tutorial le muestra cómo actualizar la hora del sistema.

34

Hora del sistema En esta sección, usted aprenderá a: • Configurar la fecha y hora del sistema • Configurar el reloj del BIOS para corregir la hora UTC • Configurar su zona horaria • Configurar el servicio de Protocolo de Tiempo de Red (NTP), incluyendo la corrección de las diferencias en la velocidad de funcionamiento de diversos relojes

Configuración de la fecha y hora del sistema La hora del sistema en un sistema Linux es muy importante. Ya hemos visto cómo las facilidades cron y anacron cumplen funciones basadas en la hora. Por lo tanto, necesitan que la hora sea precisa para así poder basar sus decisiones en ella. La mayoría de las herramientas de realización de copias de seguridad y de recuperación que analizamos en la sección anterior, junto con las herramientas de desarrollo (como, por ejemplo, make), también dependen de una medición horaria confiable. La mayoría de las computadoras que se fabricaron desde 1980 incluyen algún tipo de mecanismo de reloj, y la de mayoría de las computadoras que se fabricaron desde alrededor de 1984 cuentan con un mecanismo de reloj persistente que mantienen el reloj en hora incluso cuando se apaga la computadora. Si instaló un sistema Linux gráficamente, usted probablemente configuró el reloj y eligió la zona horaria de acuerdo con sus necesidades. Es posible que haya elegido usar el Protocolo de Tiempo de Red (NTP) para configurar su reloj y que haya optado por conservar o no el reloj del sistema usando la Hora Universal Coordinada o UTC. Si, luego de esto, usted decidió configurar el reloj usando herramientas gráficas en un sistema Fedora o Red Hat similar, es probable que se haya encontrado con un recuadro de diálogo como el que se puede observar en la Figura 3. Figura 3. Actualización de la fecha y hora

¡Sorpresa! Usted no puede configurar el reloj usando este recuadro de diálogo. En esta sección, usted aprenderá más sobre la diferencia que existe entre los relojes locales y el NTP y cómo configurar la hora de su sistema. No importa si usted vive en Nueva York, en Budapest, en Nakhodka, en Ulan Bator, en Bangkok o en Canberra. La mayoría de los cómputos horarios de su sistema Linux se relacionan con la Hora Universal Coordinada o UTC. Si usted usa un sistema Linux exclusivo, lo más común es que el reloj del hardware se ajuste a la UTC. Pero si también inicia otro sistema operativo (como, por

35

ejemplo, Windows), es posible que usted deba configurar el reloj de hardware de acuerdo con la hora local. Esto no tiene una verdadera importancia en lo que hace a Linux, excepto por el hecho de que existen dos métodos diferentes de conservar un registro de las zonas horarias internamente en Linux y, si estos métodos no se condicen, es posible que aparezcan fechas y horas extrañas en los sistemas de archivos FAT (entre otras tantas cosas). El Listado 55 le muestra cómo usar el comando date para visualizar la fecha y hora actual. Esta visualización siempre se encuentra en hora local (incluso si su reloj dehardware se ajusta a la hora UTC. Listado 55. Visualización de la fecha y hora actual [root@lyrebird ~]# date;date -u Mon Jul 9 22:40:01 EDT 2007

El comando date soporta una gran variedad de formatos de salida posibles (algunos de los cuales ya vimos en el Listado 28). Vea la página man correspondiente a date si desea obtener mayor información sobre los diversos formatos de salida disponibles. Si necesita configurar la fecha, puede hacerlo ingresando una fecha y hora como un argumento. El formato requerido es histórico y suele ser algo extraño para los norteamericanos y algo completamente extraño para el resto del mundo. Usted debe especificar, por lo menos, el mes, el día y los minutos en el formato MMDDhhmm. Además, usted también puede anexar un año de dos o cuatro dígitos (CCYY o YY) y, de manera opcional, un punto (.) seguido por la cantidad de segundos (dos dígitos). El Listado 56 le muestra un ejemplo que altera la fecha del sistema por un poco más de un minuto. Listado 56. Configuración de la fecha y hora [root@lyrebird ~]# date; date 0709221407;date Mon Jul 9 23:12:37 EDT 2007 Mon Jul 9 22:14:00 EDT 2007 Mon Jul 9 22:14:00 EDT 2007

Configuración del reloj del BIOS según la hora UTC Su sistema Linux, al igual que casi todos los demás sistemas operativos actuales, tiene dos relojes. El primero es el reloj de hardware (al que se suele denominar Real Time Clock, RTC o reloj del BIOS), que generalmente está relacionado con un cristal de cuarzo oscilante que tiene una precisión que varía en unos pocos segundos por día. Éste está sujeto a diversas variaciones, como por ejemplo la temperatura ambiente. El segundo es el reloj de software interno, que funciona impulsado por el conteo de las interrupciones del sistema. Éste está sujeto a diversas variaciones provocadas por las grandes cargas del sistema y la latencia de las interrupciones. Sin embargo, su sistema suele leer el reloj de hardware durante el arranque y, desde ese momento en adelante, usa el reloj de software. El comando date que acabamos de discutir configura el reloj de software (y no el reloj de hardware). Si usa el Protocolo de Tiempo de Red (NTP), es posible que usted configure el reloj de hardware cuando instale el sistema por primera vez y que no se tenga que volver a preocupar por él. De no ser así, esta parte del tutorial le mostrará cómo visualizar y configurar la hora del reloj de hardware. Usted puede usar el comando hwclock para visualizar el valor actual del reloj de hardware. El Listado 57 le muestra el valor actual de los relojes de hardware y del sistema.

36

Listado 57. Valores de los relojes de hardware y del sistema [root@lyrebird ~]# date;hwclock Mon Jul 9 22:16:11 EDT 2007 Mon 09 Jul 2007 11:14:49 PM EDT -0.071616 seconds

Tenga en cuenta que los dos valores son diferentes. Usted puede sincronizar el reloj de hardware con el reloj del sistema usando la opción -w o --systohc de hwclock. Además, usted puede sincronizar el reloj del sistema con el reloj de hardware usando la opción -s o --hctosys (como se puede observar en el Listado 58). Listado 58. Configuración del reloj del sistema desde el reloj de hardware [root@lyrebird ~]# date;hwclock;hwclock -s;date Mon Jul 9 22:20:23 EDT 2007 Mon 09 Jul 2007 11:19:01 PM EDT -0.414881 seconds Mon Jul 9 23:19:02 EDT 2007

Usted puede especificar la opción --utc o --localtime para hacer que el reloj del sistema se ajuste a la UTC o a la hora local. Si no se especifica ningún valor, éste se toma de la tercera línea de /etc/adjtime. El kernel de Linux tiene un modo que copia la hora del sistema al reloj de hardware cada 11 minutos. Esta opción figura como desactivada de manera predeterminada, pero la activa el NTP. Al ejecutar cualquier cosa que configura la hora de la forma antigua (como, por ejemplo, hwclock -hctosys), se desactiva esta opción. Por lo tanto, conviene dejar que el NTP haga su trabajo si usted está usando NTP. Vea la página man correspondiente a adjtimex para aprender a verificar si el reloj se actualiza cada 11 minutos o no. Es posible que usted necesite instalar el paquete adjtimex, ya que no siempre viene instalado de manera predeterminada. El comando hwclock conserva un registro de los cambios realizados al reloj de hardware para compensar las imprecisiones en la frecuencia de reloj. Los puntos de datos necesarios se conservan en /etc/adjtime, que es un archivo ASCII. Si no está usando el Protocolo de Tiempo de Red, usted puede usar el comando adjtimex para compensar las diferencias entre los diversos relojes. De lo contrario, el NTP ajustará el reloj de hardware aproximadamente cada 11 minutos. Además de mostrarle si su reloj de hardware está en hora UTC o local, el primer valor en /etc/adjtime le muestra la diferencia (en segundos) que el reloj de hardware sufre a diario. El Listado 59 le muestra dos ejemplos de esto. Listado 59. /etc/adjtime le muestra la diferencia de reloj y la hora UTC o local [root@lyrebird ~]# cat /etc/adjtime 0.000990 1184019960 0.000000 1184019960 LOCAL root@pinguino:~# cat /etc/adjtime -0.003247 1182889954 0.000000 1182889954 LOCAL

37

Tenga en cuenta que estos dos sistemas conservan el reloj de hardware en hora local, pero las diferencias de reloj son diferentes.—0,000990 en lyrebird y -0,003247 en pinguino.

Configuración de su zona horaria Su zona horaria es una medición de la variación existente entre su hora local y la hora UTC. Puede encontrar información sobre las zonas horarias disponibles que usted puede configurar en /usr/share/zoneinfo. Tradicionalmente, /tec/localtime era un vínculo con uno de los archivos de zona horaria en este árbol de directorio (por ejemplo, /usr/share/zoneinfo/Eire o /usr/share/zoneinfo/Australia/Hobart). En los sistemas modernos, es mucho más probable que sea una copia del archivo de datos de la zona horaria adecuada, ya que el sistema de archivos /usr/share no se puede montar cuando la información sobre la zona horaria local es necesaria en las primeras etapas del proceso de arranque. De manera similar, otro archivo (/etc/timezone) era tradicionalmente un vínculo con /etc/default/init y se lo usaba para configurar la variable de entorno de zona horaria (TZ) y diversas variables de entorno relacionadas con el lugar. El archivo puede existir o no en su sistema. Si existe, es posible que incluya el nombre de la zona horaria actual. Usted también podrá encontrar información sobre la zona horaria en /etc/sysconfig/clock. El Listado 60 le muestra estos archivos desde un sistema Ubuntu 7.04 y desde un sistema Fedora 7. Listado 60. Información sobre la zona horaria en /etc root@pinguino:~# cat /etc/timezone America/New_York [root@lyrebird ~]# cat /etc/sysconfig/clock # The ZONE parameter is only evaluated by system-config-date. # The timezone of the system is defined by the contents of /etc/localtime. ZONE="America/New York" UTC=false ARC=false

Algunos sistemas, como por ejemplo, Debian y Ubuntu, tiene un comando tzconfig para configurar la zona horaria. Otros sistemas (como, por ejemplo, Fedora) usan system-config-date para configurar la zona horaria e indicar si el reloj usa la UTC o no. El Listado 61 ilustra el uso del comando tzconfig para visualizar la zona horaria actual. Listado 61. Configuración de la zona horaria con tzconfig root@pinguino:~# tzconfig Your current time zone is set to America/New_York Do you want to change that? [n]: Your time zone will not be changed

Configuración del Protocolo de Tiempo de Red El Protocolo de Tiempo de Red (NTP) es un protocolo que se usa para sincronizar los relojes de computadora en toda la red. Generalmente, se sincroniza con la UTC. El NTP versión 3 es un estándar borrador publicado en Internet y formalizado en RFC 1305. La versión que se está desarrollando en la actualidad (NTP versión 4) es un revisión muy importante que todavía no se formalizó por medio de un RFC. El RFC 4330 describe el Simple NTP (SNTP) versión 4. La sincronización horaria se logra enviando mensajes a los servidores horarios. La hora que estos brindan se ajusta por una diferencia de la mitad del retraso del circuito. Por lo tanto, la precisión

38

horaria depende de la latencia de la red y de hasta qué punto dicha latencia es igual en ambas direcciones. Cuanto más corta sea la distancia hasta un servidor horario, más precisa será la hora. Vea la sección denominada Recursos para mayor información que la que se incluye en esta simple descripción. Existe una gran cantidad de computadoras conectadas a Internet. Por lo tanto, los servidores horarios se organizan en estratos. Una relativamente pequeña cantidad de servidores de estrato 1 tienen una gran precisión horaria gracias a una fuente como, por ejemplo, un reloj atómico. Una gran cantidad de servidores de estrato 2 obtienen su hora de los servidores de estrato 1 y la ponen a disposición de una cantidad todavía mayor de servidores de estrato 3, etc. Para alivianar la carga que sufren los servidores horarios, una gran cantidad de voluntarios donan servicios horarios a través de pool.ntp.org. Vea la sección denominada Recursos y encontrará un vínculo con mayor información sobre esto. Los servidores Round Robin DNS logran equilibrar la carga del NTP mediante la distribución de las solicitudes de servidor NTP entre un grupo de servidores disponibles. Si usa una interfaz gráfica, es posible que pueda configurar sus servidores horarios NTP usando un recuadro de diálogo similar al que se puede observar en la Figura 4. El hecho de que este sistema tiene activadas las actualizaciones horarias automáticas usando el NTP es la razón por la que el recuadro de diálogo que se puede observar en la Figura 3 no permitió modificar la fecha y hora. Figura 4. Configuración de servidores NTP

La información de configuración de NTP se encuentra en /etc/ntp.conf. Por lo tanto, usted puede editar este archivo y reiniciar el daemon ntpd luego de guardarlo. El Listado 62 le muestra un ejemplo del archivo /etc/ntp.conf usando los servidores horarios de la Figura 4. Listado 62. Configuración de la zona horaria con tzconfig [root@lyrebird ~]# cat /etc/ntp.conf # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default kod nomodify notrap nopeer noquery # Permit all access over the loopback interface. This could

39

# be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 # Hosts on local network are less restricted. #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #broadcast 192.168.1.255 key 42 # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 key 42 # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 key 42 # manycast client # Undisciplined Local Clock. This is a fake driver intended for backup # and when no outside source of synchronized time is available. #server 127.127.1.0 # local clock #fudge 127.127.1.0 stratum 10 # Drift file. Put this in a directory which the daemon can write to. # No symbolic links allowed, either, since the daemon updates the file # by creating a temporary in the same directory and then rename()'ing # it to the file. driftfile /var/lib/ntp/drift # Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys # Specify the key identifiers which are trusted. #trustedkey 4 8 42 # Specify the key identifier to use with the ntpdc utility. #requestkey 8 # Specify the key identifier to use with the ntpq utility. #controlkey 8 server 0.us.pool.ntp.org restrict 0.us.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery server 1.us.pool.ntp.org restrict 1.us.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery server 2.us.pool.ntp.org restrict 2.us.pool.ntp.org mask 255.255.255.255 nomodify notrap noquery

Si está usando los servidores horarios pool.ntp.org, estos se pueden encontrar en cualquier lugar del mundo. Su hora generalmente será más precisa si usted restringe sus servidores de la forma que figura en este ejemplo donde se usa us.pool.ntp.org, lo que hace que sólo se elijan los servidores ubicados en los Estados Unidos de Norteamérica. Vea la sección denominada Recursos para mayor información sobre el proyecto ntp.pool.org.

40

Comandos NTP Usted puede usar el comando ntpdate para configurar la hora de su sistema desde un servidor horario NTP (como se puede observar en el Listado 63). Listado 63. Configuración de la hora del sistema desde un servidor NTP usando ntpdate [root@lyrebird ~]# ntpdate 0.us.pool.ntp.org 10 Jul 10:27:39 ntpdate[15308]: adjust time server 66.199.242.154 offset 0.007271 sec

Como los servidores operan en modo round robin, la próxima vez que ejecute este comando, usted probablemente vea un servidor diferente. El Listado 64 le muestra las primeras respuestas DNS para 0.us.ntp.pool.org al poco tiempo de ejecutar el comando ntpdate que figura con anterioridad. Listado 64. Grupo de servidores round robin NTP [root@lyrebird ~]# dig 0.pool.ntp.org +noall +answer | head -n 5 0.pool.ntp.org. 1062 IN A 217.116.227.3 0.pool.ntp.org. 1062 IN A 24.215.0.24 0.pool.ntp.org. 1062 IN A 62.66.254.154 0.pool.ntp.org. 1062 IN A 76.168.30.201 0.pool.ntp.org. 1062 IN A 81.169.139.140

Ahora, el comando ntpdate pierde valor, ya que se puede realizar la misma función usando ntpq con la opción -q (como se puede observar en el Listado 65). Listado 65. Configuración de la hora del sistema usando ntpd -q [root@lyrebird ~]# ntpd -q ntpd: time slew -0.014406s Tenga en cuenta que el comando ntpd usa la información del servidor horario de /etc/ntp.conf o un archivo de configuración que aparece en la línea de comandos. Vea la página man para mayor información sobre esto y otras opciones para ntpd. Además, no olvide que, si se está ejecutando el daemon ntpd, ntpd -q existirá silenciosamente y dejará un mensaje de error en /var/log/messages. Otro comando relacionado es ntpq, que le permite consultar el daemon NTP. Vea la página man para mayor información al respecto.

Cómo crear vínculos En primer lugar, veamos cómo se crean los vínculos físicos y blandos. Más tarde en este artículo analizaremos las maneras de identificar y usar los vínculos que creamos aquí.

Vínculos físicos Usted deberá usar el comando ln para crear vínculos físicos adicionales a un archivo existente (pero no a un directorio, incluso si el sistema establece . y .. como vínculos físicos). El Listado 1 muestra cómo crear un directorio que contiene dos archivos y un subdirectorio con dos vínculos físicos al file1 (archivo1), uno de ellos en el mismo directorio y el otro en el subdirectorio. Hemos agregado una palabra a file1, y luego otra palabra a file3 y mostramos los contenidos del vínculo en el subdirectorio para mostrar que todos ellos de hecho apuntan a los mismos datos.

41

Listado 1. Creación de vínculos físicos ian@attic4:~$mkdir -p lpi104-6/subdir ian@attic4:~$touch lpi104-6/file1 ian@attic4:~$touch lpi104-6/file2 ian@attic4:~$ln lpi104-6/file1 lpi104-6/file3 ian@attic4:~$ln lpi104-6/file1 lpi104-6/subdir/file3sub ian@attic4:~$echo "something" > lpi104-6/file1 ian@attic4:~$echo "else" >> lpi104-6/file3 ian@attic4:~$cat lpi104-6/subdir/file3sub something else Usted obtendrá un error si intenta crear vínculos físicos entre sistemas de archivos o para directorios. El Listado 2 muestra que mis directorios principal y de búsqueda se encuentran en sistemas de archivos diferentes y que falla el intento de crear un vínculo físico entre ellos, al igual que el intento de crear un vínculo físico al directorio lpi104-6. Listado 2. Fallas en la creación de vínculos físicos ian@attic4:~$ df . research Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda7 71205436 9355052 58233352 14% / /dev/sdb3 137856204 27688208 103165264 22% /home/ian/ian-research ian@attic4:~$ ln lpi104-6/file1 research/lpi104-6/file3 ln: creating hard link `research/lpi104-6/file3' => `lpi104-6/file1': No such file or dir ectory ian@attic4:~$ ln lpi104-6 lpidir104-6 ln: `lpi104-6': hard link not allowed for directory

Vínculos blandos Usted deberá usar el comando ln con la opción-spara crear vínculos blandos. Los vínculos blandos usan nombres de archivos o directorios que pueden ser relativos o absolutos. Si usted está usando nombres relativos, por lo general le convendrá que el directorio de trabajo actual sea el directorio donde usted crea el vínculo; de otro modo, el vínculo que usted cree estará relacionado a otro punto del sistema de archivos. El Listado 3 muestra dos maneras de crear un vínculo blando para el file1 que acabamos de crear, y también cómo crear vínculos blandos en lugar de los dos vínculos físicos que fallaron en el Listado 2. Listado 3. Creación de vínculos blandos ian@attic4:~$# Create symlink using absolute paths ian@attic4:~$ln -s ~/lpi104-6/file1 ~/lpi104-6/file4 ian@attic4:~$# Create symlink using relative paths ian@attic4:~$cd lpi104-6/ ian@attic4:~/lpi104-6$ln -s file1 file5 ian@attic4:~/lpi104-6$cd .. ian@attic4:~$# Create symlink across file systems ian@attic4:~$mkdir ~ian/research/lpi104-6 ian@attic4:~$ln -s ~/lpi104-6/file1 ~ian/research/lpi104-6/file4 ian@attic4:~$# Create symlink for directory ian@attic4:~$ln -s lpi104-6 lpidir104-6

42

Al igual que antes, usted puede usar cualquiera de los vínculos o el nombre del archivo de destino para hacer referencia al archivo o directorio. El Listado 4 muestra algunos ejemplos. Listado 4. Uso de vínculos blandos ian@attic4:~$echo "another line" >> ~ian/research/lpi104-6/file ian@attic4:~$# cat a symlink ian@attic4:~$cat lpi104-6/file5 something else another line ian@attic4:~$# cat a hard link ian@attic4:~$cat lpi104-6/file1 something else another line ian@attic4:~$# display directory contents using symlink ian@attic4:~$ls lpidir104-6 file1 file2 file3 file4 file5 subdir Mientras creamos el vínculo, creemos también un vínculo que use rutas relativas cuando nuestro directorio en funcionamientonosea el directorio donde deseamos el vínculo. Veremos qué es lo que esto hace en la siguiente sección. Listado 5. Creación de un mal vínculo blando ian@attic4:~$ln -s lpi104-6/file1 lpi104-6/file6

Cómo identificar los vínculos En la sección anterior, usted vio cómo se crean los vínculos, pero no como se distinguen los vínculos que usted ha creado. Veamos esto a continuación.

Cómo buscar información En muchos sistemas actuales, el comando ls recibe el alias de ls --color=auto, el cual imprime diferentes tipos de objetos de sistemas de archivos en diferentes colores. Los colores son configurables. Si usted usa esta opción, los vínculos físicos pueden aparecer con un fondo azul oscuro, y los symlinks con un texto color cian, como se ilustra en la Figura 1. Figura 1. Cómo usar la opción --colors de ls para identificar vínculos

Si bien los colores pueden resultar convenientes para las personas que pueden distinguirlos, no son de mucha utilidad para los demás, y ciertamente no resultan de mucha utilidad para armar shells de scripts o programas. Si no se utilizan colores, se necesita más información como la que brinda un listado extenso que usa ls -l. En el Listado 6 nosotros desactivamos explícitamente el resultado con color, pero usted podrá también llamar de manera explícita al comando/bin/ls.

43

Listado 6. Identificación de los vínculos ian@attic4:~$ ls --color=none -lR lpi104-6 lpi104-6: total 12 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file1 -rw-r--r-- 1 ian ian 0 2010-05-26 14:11 file2 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file3 lrwxrwxrwx 1 ian ian 24 2010-05-27 17:15 file4 -> /home/ian/lpi104-6/file1 lrwxrwxrwx 1 ian ian 5 2010-05-27 17:15 file5 -> file1 lrwxrwxrwx 1 ian ian 14 2010-05-27 17:37 file6 -> lpi104-6/file1 drwxr-xr-x 2 ian ian 4096 2010-05-26 14:11 subdir lpi104-6/subdir: total 4 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file3sub ian@attic4:~$/bin/ls -l ~ian/research/lpi104-6/file4 lrwxrwxrwx 1 ian ian 24 2010-05-25 11:51 /home/ian/research/lpi104-6/file4 -> /home/ian/ lpi104-6/file1 ian@attic4:~$/bin/ls -l lpidir104-6 lrwxrwxrwx 1 ian ian 8 2010-05-27 17:16 lpidir104-6 -> lpi104-6

La segunda columna de resultados es unconteo de vínculosque muestra la cantidad de vínculos físicos hacia este archivo, de manera que sepamos que file1, file3, y file3sub tienen múltiples vínculos físicos que apuntan al objeto que representan, aunque aún no poseamos información suficiente para saber que todos ellos representan al mismo objeto. Si usted elimina un archivo que posee un conteo de vínculos mayor que 1, el conteo de vínculos del inodo se reduce en 1, pero el archivo no se elimina hasta que su conteo de vínculos no llegue a 0. El resto de los vínculos físicos al mismo archivo mostrará un conteo de vínculos que ahora estará reducido en 1. En la primera columna de resultados, usted podrá ver que el primer carácter es una 'l' (L minúscula) para los vínculos simbólicos. También podrá ver elobjetivodel vínculo después de los caracteres ->. Por ejemplo, file4 -> /home/ian/lpi104-6/file1. Otro indicio es que el tamaño es el número de caracteres del nombre del objetivo del vínculo. Observe que los conteos de vínculos dentro del directorio Listings no se actualizan con vínculos simbólicos. La eliminación del vínculo no afecta al archivo objetivo. Los symlinks no evitan que los archivos sean eliminados; si se mueve o elimina un archivo objetivo, entonces se romperá el symlink. Por este motivo muchos sistemas usan colores en el directorio Listings, a menudo celeste para los vínculos activos y rojo para los vínculos rotos. Usted puede usar la opción-idel comandolspara visualizar las cantidades de inodos para las entradas de los archivos y directorios. El Listado 7 muestra tanto resultados extensos y breves para nuestro directorio lpi104-6. Listado 7. Cómo mostrar la información de los inodos ian@attic4:~$ls -i lpi104-61680103 file1 1680103 file3 1680107 file5 1680101 subdir 1680104 file2 1680108 file4 1680110 file6 ian@attic4:~$ls -il lpi104-6total 12 1680103 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file1 1680104 -rw-r--r-- 1 ian ian 0 2010-05-26 14:11 file2 1680103 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file3 1680108 lrwxrwxrwx 1 ian ian 24 2010-05-27 17:15 file4 ->

44

/home/ian/lpi104-6/file1 1680107 lrwxrwxrwx 1 ian ian 5 2010-05-27 17:15 file5 -> file1 1680110 lrwxrwxrwx 1 ian ian 14 2010-05-27 17:37 file6 -> lpi104-6/file1 1680101 drwxr-xr-x 2 ian ian 4096 2010-05-26 14:11 subdir Usted también podrá usar el comando find (buscar) para buscar vínculos simbólicos usando la expresión find -type lcomo se muestra en el Listado 8. Listado 8. Uso de find para ubicar symlinks ian@attic4:~$ find lpi104-6 research/lpi104-6 -type l lpi104-6/file6 lpi104-6/file5 lpi104-6/file4 research/lpi104-6/file4

Symlinks rotos En el Listado 5, afirmamos haber creado un mal vínculo blando. Éste es un ejemplo de symlink roto. Debido a que los vínculos físicos siempre apuntan a un inodo que representa un archivo, siempre son válidos. Sin embargo, los symlinks pueden romperse por muchas razones, que incluyen: • No existían el archivo original o el objetivo del vínculo cuando el vínculo fue creado (como en el Listado 5). • El objetivo de un vínculo fue eliminado o se le cambió el nombre. • Se eliminó o se le cambió el nombre a algún elemento de la ruta al objetivo. Ninguna de estas condiciones causa un error, de manera que usted debe pensar con detenimiento acerca de lo que le podría pasar a sus symlinks mientras los crea. Sobre todo, su elección entre rutas de acceso absolutas o relativas probablemente será influenciada por lo que usted espera que suceda con los objetos que está vinculando sobre la vida de los vínculos. Si usted usa una salida de datos coloreada, los symlinks rotos probablemente aparezcan con texto de color rojo sobre un fondo negro, como en el caso del file6 en la Figura 1. De otro modo, usted deberá usar las opciones -H o -L de ls para eliminar la referencia del vínculo y obtener información sobre el objetivo. La opción -H elimina la referencia de los vínculos en la línea de comandos y la opción -L elimina la referencia de los vínculos adicionales que son parte de la visualización. El Listado 9 muestra la diferencia en la salida de datos creada por estas dos opciones. Listado 9. Eliminación de la referencia de los vínculos con ls -H y con ls -L ian@attic4:~$/bin/ls -lH lpidir104-6total 12 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file1 -rw-r--r-- 1 ian ian 0 2010-05-26 14:11 file2 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file3 lrwxrwxrwx 1 ian ian 24 2010-05-27 17:15 file4 -> /home/ian/lpi104-6/file1 lrwxrwxrwx 1 ian ian 5 2010-05-27 17:15 file5 -> file1 lrwxrwxrwx 1 ian ian 14 2010-05-27 17:37 file6 -> lpi104-6/file1 drwxr-xr-x 2 ian ian 4096 2010-05-26 14:11 subdir ian@attic4:~$/bin/ls -lL lpidir104-6/bin/ls: cannot access lpidir104-6/file6: No such file or directory total 20 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file1 -rw-r--r-- 1 ian ian 0 2010-05-26 14:11 file2 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file3 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file4 -rw-r--r-- 3 ian ian 28 2010-05-27 17:17 file5 l????????? ? ? ? ? ? file6 drwxr-xr-x 2 ian ian 4096 2010-05-26 14:11 subdir Observe el mensaje de error que indica que el file6 no existe y también el resultado del mismo con los caracteres '?', que nuevamente indican que el archivo no fue encontrado. Un último asunto sobre nuestro vínculo simbólico roto. Los intentos para leer el archivo fallarán, ya que el archivo no existe. Sin embargo, los intentos de escribirlo funcionarán si usted posee el

45

permiso apropiado para el archivo objetivo, como se muestra en Listado 10. Observe que necesitamos crear el lpi104-6/lpi104-6 antes de poder escribir el archivo. Listado 10. Lectura y escritura desde y hasta un symlink roto ian@attic4:~$ cat lpi104-6/file6 cat: lpi104-6/file6: No such file or directory ian@attic4:~$ echo "Testing file6" > lpi104-6/file6 bash: lpi104-6/file6: No such file or directory ian@attic4:~$ mkdir lpi104-6/lpi104-6 ian@attic4:~$ cat lpi104-6/file6 cat: lpi104-6/file6: No such file or directory ian@attic4:~$ echo "Testing file6" > lpi104-6/file6 ian@attic4:~$ cat lpi104-6/file6 Testing file6 ian@attic4:~$ ls lpi104-6/lpi104-6 file1

¿Quién crea vínculos hacia mí? Para averiguar qué archivos son vínculos físicos hacia un inodo en particular, usted puede usar el comando find y la opción -samefile con un nombre de archivo o la opción -inum con un número de inodo, como se muestra en el Listado 11. Listado 11. Cómo encontrar vínculos físicos al mismo archivo ian@attic4:~$find lpi104-6 -samefile lpi104-6/file1lpi104-6/subdir/file3sub lpi104-6/file3 lpi104-6/file1 ian@attic4:~$ls -i lpi104-6/file11680103 lpi104-6/file1 ian@attic4:~$find lpi104-6 -inum 1680103lpi104-6/subdir/file3sub lpi104-6/file3 lpi104-6/file1 Para averiguar qué archivos crean vínculos simbólicos a un archivo determinado, usted puede usar el comando find y la opción -lname con un nombre de archivo, como se muestra en el Listado 12. Los vínculos pueden usar una ruta de acceso relativa o absoluta, de manera que a usted probablemente le convenga un asterisco al principio del nombre para encontrar todas las concordancias. Listado 12. Cómo encontrar los vínculos simbólicos a un archivo o directorio ian@attic4:~$ find lpi104-6 research/lpi104-6 -lname "*file1" lpi104-6/file6 lpi104-6/file5 lpi104-6/file4 research/lpi104-6/file4

Copiar versus vincular Según lo que usted intenta lograr, en algunas ocasiones usará vínculos y en otras será mejor crear una copia de un archivo. La diferencia principal es que los vínculos proveen múltiples nombres para un solo archivo, mientras que una copia crea dos grupos de datos idénticos bajo dos nombres diferentes. Usted seguramente usará copias para crear una copia de seguridad y también para probar un nuevo programa sin poner en riesgo sus datos operativos. Usted usa vínculos cuando necesita un alias para un archivo (o directorio), posiblemente para proveer una ruta de acceso más conveniente o corta. In la siguiente sección, veremos otros usos para los vínculos. Como usted ha visto, cuando se actualiza un archivo, todos los vínculos hacia él ven la actualización, lo cual no sucede cuando usted copia un archivo. También ha observado que los vínculos simbólicos pueden romperse pero que con operaciones de escritura posteriores se pueden crear un nuevo archivo. Use los vínculos cuidadosamente.

46

Vínculos y administración de sistemas Los vínculos, especialmente los simbólicos, se usan con frecuencia en la administración de sistemas Linux. Los comandos a menudo tienen alias, para que el usuario no tenga que conocer el número de versión para el comando actual, pero pueda acceder a otras versiones usando nombres más largos de ser necesario. Como se muestra en el Listado 13, el comando gcc es un symlink y dentro de mi sistema hay tres nombres diferentes para él. Listado 13. Comandos para poner alias a una versión en particular ian@attic4:~$which gcc/usr/bin/gcc ian@attic4:~$ls -l /usr/bin/gcclrwxrwxrwx 1 root root 7 2009-12-28 23:17 /usr/bin/gcc -> gcc-4.4 ian@attic4:~$find /usr/bin -lname "*gcc-4.4"/usr/bin/x86_64-linux-gnu-gcc-4.4 /usr/bin/gcc /usr/bin/x86_64-linux-gnu-gcc

Otros usos entran en juego cuando varios nombres de comandos usan el mismo código subyacente, como por ejemplo los diversos comandos que sirven para detener o reiniciar un sistema. A veces, un nuevo nombre de comando, como genisofs, reemplazará un nombre de comando más antiguo, pero el nombre antiguo (mkisofs) se guarda como un vínculo al nuevo comando. Y la facilidad de alternativas usa vínculos de manera amplia, para que usted pueda elegir qué alternativa usar para un comando, como por ejemplojava. El Listado 14 muestra algunos ejemplos. Listado 14. Ejemplos del comando alias ian@attic4:~$ find /sbin -lname "initctl" /sbin/restart /sbin/start /sbin/stop /sbin/status /sbin/reload ian@attic4:~$ ls -l $(which mkisofs) lrwxrwxrwx 1 root root 11 2009-12-28 23:17 /usr/bin/mkisofs -> genisoimage ian@attic4:~$ ls -l $(which java) lrwxrwxrwx 1 root root 22 2010-01-17 15:16 /usr/bin/java -> /etc/alternatives/java Los nombres de biblioteca son también administrados en gran medida usando symlinks, ya sea para permitir que los programas se vinculen a un nombre general mientras se consigue la versión actual, o también para administrar sistemas como los sistemas de 14-bit que son capaces de ejecutar programas de 32-bit. En el Listado 15 se muestran algunos ejemplos. Observe que algunos usan rutas absolutas, mientras que otros usan rutas relativas. Listado 15. Vínculos de biblioteca ian@attic4:~$ ls -l /usr/lib/libm.so lrwxrwxrwx 1 root root 14 2010-05-27 11:23 /usr/lib/libm.so -> /lib/libm.so.6 ian@attic4:~$ find /usr/lib/ -lname "*libstdc++*" /usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.so /usr/lib/libstdc++.so.6 ian@attic4:~$ ls -l /usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.so lrwxrwxrwx 1 root root 23 2010-01-19 08:49 /usr/lib/gcc/x86_64-linux-gnu/4.4/libstdc++.s o -> ../../../libstdc++.so.6 Para obtener más información sobre vinculación, consulte las páginas man para el comando ln y los demás comandos que usted ha visto en este artículo.

47

Recursos Aprender • Para ver ejemplos adicionales sobre cómo usar los vínculos simbólicos en la administración de sistemas Linux, consulte: o "Learn Linux, 101: Manage shared libraries" [Conozca Linux, 101: Cómo administrar bibliotecas compartidas] (developerWorks, marzo de 2010) o "Dissecting shared libraries" [Cómo analizar bibliotecas compartidas] (developerWorks, enero de 2005) o "Boot Linux faster" [Arranque más rápido de Linux] (developerWorks, septiembre de 2003)



En la zona Linux de developerWorks, usted podrá encontrar cientos de tutoriales y artículos explicativos, así como descargas, foros de discusión, y muchos otros recursos para desarrolladores y administradores de Linux.

Cómo crear y configurar las opciones de los sistemas de archivos Sin respetar el orden, comencemos por la creación y la configuración de los sistemas de archivos y las opciones.

Cómo crear particiones Antes de estar en condiciones de trabajar con sistemas de archivos de Linux, usted deberá crearlos. Pero antes de poder crear un sistema de archivos, deberá crear una partición donde colocarlo. A modo de breve introducción, en las máquinas x86, los discos rígidos se pueden dividir en cuatro particiones primarias, pero la última de estas particiones primarias puede incluir una cantidad de particiones extendidas. En el pasado, había un número de restricciones sobre los cilindros más altos donde se pueden producir las particiones de arranque, los tamaños máximos de disco, las ubicaciones de las particiones primarias en los discos de gran tamaño, etc. Sin embargo, en los últimos cinco años o más, casi todos los sistemas BIOS pueden manejar con flexibilidad discos de un tamaño prácticamente ilimitado, y los bootloaders modernos (por lo menos para Linux) no tienen restricciones importantes sobre los tamaños o las ubicaciones de las particiones. La única regla que sigue preocupándonos hoy en día se refiere a los sistemas operativos que no sean Linux. En algunas ocasiones, ellos siguen insistiendo en vivir en particiones primarias cerca del frente del disco rígido. Las particiones Linux están más que felices por residir en particiones extendidas y en cualquier lugar de la unidad de disco que sea accesible. Existen diversas herramientas ampliamente usadas en el mundo de Linux para la creación y manipulación de particiones en discos rígidos. La más antigua de estas herramientas es fdisk. Más tarde, se hicieron populares las curses -based cfdisk.Parted de GNU también se usa en muchas distribuciones. Más aún, los sistemas de instalación para la mayoría de las distribuciones Linux y/o sus entornos gráficos vienen con front-ends de particionamiento que brindan interfaces más amigables para visualizar y modificar las particiones. De estas herramientas, fdisk sigue siendo la más flexible y la más indulgente de las herramientas. Pero "indulgente" parece ser un término algo extraño para usar aquí. La escritura de información de tablas de particiones involuntaria es una receta para el desastre independientemente de la herramienta que utilice. Pero si sus particiones han sido creadas de maneras no estándar, a menudo por sistemas operativos y herramientas que no sean de Linux, fdisk por lo general hará grandes progresos en los lugares donde otras herramientas se negarían a intentarlo. Si funciona, sin embargo, cfdisk resulta en general más amigable y más interactivo. Y parted brinda opciones

48

más poderosas que fdisk o cfdisk para el redimensionamiento y el movimiento de las particiones existentes de manera no destructiva. Cualquiera sea la herramienta que use para crear particiones, los conceptos son similares. En primer lugar, usted deberá realizar estas operaciones como raíz, idealmente en modo de usuario único. Y no está de más enfatizar este punto: Tenga cuidado cuando modifique las particiones: idealmente, usted deberá tener una copia de respaldo de todos los datos importantes, y deberá prestar especial atención a los cambios que realice. Antes de comenzar a modificar una tabla de particiones, es conveniente tener una idea clara de cuáles son las particiones que existen actualmente. El comando fdisk -l /dev/hda (o uno similar para otros discos, como por ejemplo /dev/hdb o /dev/sda) le brinda la información sobre las particiones existentes. mount también sirve de ayuda para comprender de qué manera las particiones existentes se usan en realidad. Si usted desea crear nuevas particiones, tenga en cuenta cualquier sector extra dentro de la cuarta partición primaria que pueda estar disponible para particiones extendidas adicionales. Veamos un ejemplo de una tabla de particiones en un sistema Linux mío: Listado 1. Tabla de particiones de muestra % fdisk -l /dev/sda Disk /dev/sda: 80.0 GB, 80026361856 bytes 255 heads, 63 sectors/track, 9729 cylinders Device Boot Start End Blocks Id System /dev/sda1 * 1 1216 9767488+ 7 HPFS/NTFS /dev/sda3 1217 4255 24410767+ 83 Linux /dev/sda4 4256 9729 43969905 5 Extended /dev/sda5 4256 4380 1004031 82 Linux swap / Solaris /dev/sda6 4381 5597 9775521 83 Linux Esto nos dice varias cosas. En primer lugar, podemos ver que la partición uno está usada probablemente por un sistema operativo externo. Y la ejecución de mount nos hará saber: % mount | head -1 /dev/sda3 on / type reiserfs (rw,noatime,notail,commit=600) Es decir, el sistema existente tiene su raíz en /dev/sda3. Quizás lo que es más interesante es que la partición /dev/sda4 se extiende al cilindro 9729, pero las particiones extendidas dentro de ella usan sólo parte de ese espacio. Una vez descubierto algo del espacio libre disponible en la unidad, creemos una partición dentro de ella usando fdisk: % fdisk /dev/sda La cantidad de cilindros para el disco se fija en 9729. No hay nada malo en ello, pero esto es más que 1024 y podría, en ciertas configuraciones, generar problemas con: 1. el software que se ejecuta al momento del arranque (como por ejemplo las versiones antiguas de LILO). 2. el arranque de software de particionamiento desde otros sistemas operativos (como por ejemplo, DOS FDISK, OS/2 FDISK). Listado 2. Cómo crear una partición Command (m for help): n Command action l logical (5 or over) p primary partition (1-4) l First cylinder (5598-9729), default 5598): Using default value 5598 Last cylinder or +size or +sizeM or +sizeK (5598-9729, default 9729): +10000M Command (m for help): w The partition table has been altered! Todo lo que sigue a los dos puntos está escrito por el usuario (usted). En este momento, hemos creado una nueva partición Linux de 10 GB: /dev/sda7 5598 6814 9775521 83 Linux Siga leyendo para descubrir cómousaresta partición. Observe que quizás deba reiniciar el sistema para hacer que las nuevas particiones sean accesibles.

49

Cómo hacer un sistema de archivos en una partición No es suficiente sólo contar con una partición; usted deberá hacer el sistema de archivos. Anteriormente creamos una nueva partición de Linux partición en /dev/sda7, pero deberemos decidir cuál de los numerosos sistemas de archivos que soporta Linux usar dentro de dicha partición. ¿Deseamos el histórico predeterminado ext2? ¿O el formato de extensión más nuevo ampliado por journaling ext3? Quizás nos convenga uno de los sistemas de archivos ampliados aportados a Linux por terceros: ReiserFS, XFS, JFS. O quizás sea necesario un sistema de archivos que interactúe con otro sistema operativo, como por ejemplo Minix, MSDOS, o VFAT (algunos otros pueden ser leídos si ya han sido creados, pero no siempre han sido creados con herramientas de Linux). Todas las herramientas para hacer estos nuevos sistemas de archivos siguen la convención de nombre mkfs.*. Es ecir que su sitema podrá tener mkfs.ext2, mkfs.minix, mkfs.xfx, etc., instalado generalmente en /sbin/. Además, usted podrá acceder a cualquiera de ellos usando el switch básico mkfs -t . Muchos, pero no todos, los sistemas de archivos tienen además formas compactas como mke3fs. Los sistemas de archivos que se encuentran disponibles dependen de su distribución y versión específicas de Linux, y de cualquier herramienta adicional que usted haya instalado. mkfs.ext2 se encuentra disponible en casi todas las distribuciones. Los fundamentos básicos para hacer un sistema de archivos son simples. Simplemente ejecute la herramienta mkfs.* que desee contra la partición en donde desea que exista el sistema de archivos. Por ejemplo: % mkfs.xfs /dev/sda7 Los mensajes que se muestran varían con el tipo de sistema de archivos que use. Por lo general, los mensajes le brindan información sobre el número de inodos, bloques, tipo de registro en diario (si lo hubiera), extensiones, y fragmentos de relevancia para dicha estrategia de utilización de sistemas de archivos en particular. Muchas de las herramientas de creación de sistemas de archivos le advertirán si intenta crear un nuevo sistema de archivos en una partición con un sistema de archivos existente, pero no todas lo harán, de modo que usted deberá proceder con gran cuidado (la creación de un nuevo sistema de archivos sobre uno antiguo probablemente ocasionará la pérdida de datos).

Cómo hacer un sistema de archivos ISO con mkisofs Un caso especial de realización es un sistema de archivos es la creación de un sistema de archivos ISO, que es una imagen del sistema que se puede escribir en un dispositivo de CD o DVD grabable. Un sistema de archivos ISO es especial en el sentido de que es simplemente un archivo (de gran tamaño) con datos dispuestos de un modo específico más que una disposición de un dispositivo sin formato como /dev/cdrom o /dev/hdb3. La idea básica de la creación de un sistema de archivos ISO –que en realidad significa un volumen híbrido HFS o un ISO9660– es simplemente tomar los archivos de una o más jerarquías existentes y disponerlos en una imagen ISO. ISO9660 en sí mismo está limitado a simples nombres 8.3 del estilo DOS, pero las extensiones Rock Ridge y Joliet permiten el almacenamiento de nombres más extensos y/o atributos de archivos adicionales. Por ejemplo, para crear la imagen de un proyecto, usted podrá usar un comando como: % mkisofs -o ProjectCD.iso -r ~/project-files ~/project-extras En este caso, creamos una imagen ISO que usa atributos Rock Ridge (pero diferente de los valores más útiles de los conjuntos -R, como por ejemplo todos los archivos legibles) y contiene una fusión de todos los archivos en dos directorios. Otras opciones nos permitirían agregar cabezales de arranque a la imagen, crear una imagen HFS, adjuntar directorios en ubicaciones específicas que no sean root y ajustar las opciones de archivos.

Cómo hacer un sistema de archivos ISO con cdrecord La transferencia de una imagen ISO a un CD o DVD grabable se logra a menudo en la actualidad usando una herramienta del front-end, que por lo general es una interfaz GUI. Por ejemplo, tanto Gnome como KDE hacen que la masterización de CDs sea parte de la interfaz archivoadministrador. También existen algunas herramientas comerciales. Pero para un administrador de

50

sistemas, la Antigua herramienta de la línea de comandos cdrecord constituye una utilidad fiable que se encuentra presente en la mayoría de las distribuciones modernas y es mucho más cercana a los “estándar” que otros front-ends. Por lo general, la utilización básica requiere simplemente la especificación del dispositivo en el que usted desea escribir y el archivo ISO que desea escribir. Como suele suceder con las utilidades Linux, usted también podrá especificar una cantidad de opciones para el proceso de grabación, como por ejemplo -overburn para CDs de más de 650 MB o una masterización específica para su grabadora. Consulte la manpage para cdrecord para ver los detalles actuales. Usted podrá buscar el dispositivo con la opción -scanbus. El dispositivo que usted desea se nombra con un triple numérico que indica el bus, y no un dispositivo de bloques regular en el sistema de archivos. Por ejemplo, quizás vea algo como (abreviado): Listado 3. Cómo buscar un dispositivo grabable % cdrecord -scanbus [...] scsibus0: 0,0,0 0) 'ATA ' 'WDC WD800UE-00HC' '09.0' Disk 0,1,0 1) * [...] scsibus1: 1,0,0 100) 'Slimtype' 'DVDRW SOSW-852S ' 'PSB2' Removable CD-ROM [...] Con la información del bus a mano, usted puede masterizar una imagen: % sudo cdrecord -overburn -v speed=16 dev=1,0,0 /media/KNOPPIX_V3.6-2004-08-16-EN.iso En este caso, la imagen es de gran tamaño y yo sé que mi masterizador soporta 16x. El resultado del comando de acción es bastante detallado por la opción -v, pero esto ayuda a comprender el proceso completo.

Cómo hacer un sistema de archivos ISO con dd Como observación final, a veces deseamos crear una imagen ISO totalmente nueva no de algunos directorios de su sistema de archivos principal, sino de un CD o DVD existente. Para hacer una imagen ISO de un CD, simplemente use el comando dd, pero refiérase al dispositivo de bloques en crudo para el CD en lugar de a la ubicación montada: % dd if=/dev/cdrom of=project-cd.iso Quizás se pregunte por qué no usar simplemente cp si la meta es copiar bytes. En realidad, si usted ignora un error de E/S informado cuando el dispositivo sin formato se queda sin bytes para copiar, el comando cp será el que probablementefuncione. Sin embargo, dd tiene mejor estilo (y no se queja, sino que informa un resumen de actividad).

Cómo operar el sistema de archivos de Linux Montaje y desmontaje con mount y umount Una característica flexible de los sistemas Linux es el control afinado que usted tiene sobre el montaje y desmontaje de sistemas de archivos. A diferencia de lo que sucede con Windows y algunos otros sistemas operativos, a las particiones no el kernel de Linux no les asigna automáticamente ubicaciones, sino que en cambio se las adjunta a la única / jerarquía de raíces mediante el comando mount. Más aún, los distintos tipos de sistemas de archivos (en diferentes unidades, incluso) pueden montarse dentro de la misma jerarquía. Usted podrá desmontar una partición determinada con el comando umount, que especifica ya sea el punto de montaje (como por ejemplo, /home) o el dispositivo sin formato (como por ejemplo, /dev/hda7). Con fines de recuperación, la capacidad de controlar los puntos de montaje le permite realizar un análisis forense de las particiones --usando fsck u otras herramientas– sin riesgo de dañar aún más un sistema de archivos dañado. Además, usted podrá montar un sistema de archivos usando diversas opciones, la más importante de las cuales es el montaje de sólo lectura usando cualquiera de los sinó0nimos -r o -o ro. A modo de ejemplo breve, quizás usted desee substituir una dirección de directorio de usuarios por otra, ya sea debido a un daño en una de ellas o simplemente para expandir el espacio de disco o pasar a un disco más veloz. Quizás pueda realizar este cambio usando algo similar a:

51

# umount /home # old /dev/hda7 home dir # mount -t xfs /dev/sda1 /home # new SCSI disk using XFS # mount -t ext3 /dev/sda2 /tmp # also put the /tmp on SCSI

Montaje predeterminado Para la operación diaria, en general es conveniente contar con un conjunto relativamente fijo de montajes que se produzcan al iniciar el sistema. Usted controla los montajes que se producen en el arranque colocando líneas de configuración en el archivo /etc/fstab. La típica configuración será similar a la siguiente: Listado 4. Ejemplo de configuración para montaje en el arranque # proc /proc proc defaults 0 0 /dev/sda3 / reiserfs notail 0 1 /dev/sda5 none swap sw 0 0 /dev/sda6 /home ext3 rw 0 2 /dev/scd0 /media/cdrom0 udf,iso9660 ro,user,noauto 0 0 /media/Ubuntu-5.04-install-i386.iso /media/Ubuntu_5.04 iso9660 rw,loop 0 0

En el Listado anterior, el primer campo () es por lo general el dispositivo de bloques a montar. El segundo campo () es la ubicación con el montaje. En algunos casos especiales, en primer lugar se proporciona algo que no sea el dispositivo de bloques. En el caso de los dispositivos supermount, usted verá none (ninguno). /proc constituye otro caso extraño. Usted también podrá montar dispositivos de bloque invertido, que por lo general son archivos regulares. El tercer campo () y el cuarto campo () son bastante directos; las opciones se basan en el tipo y la utilización del sistema de archivos. El quinto campo () por lo general es cero. El sexton campo () deberá ser 1 para el sistema de archivos root y 2 para los otros sistemas de archivos que deberán pasar por fsck en el arranque del sistema.

Montaje automático con AMD y automount Linux cuenta con varias maneras de montar automáticamente medios removibles (discos flexibles, CDs, unidades USB) o que no tengan disponibilidad fija (como por ejemplo los sistemas de archivos NFS). La meta de todas estas herramientas es similar, pero cada una de ellas funciona de manera levemente diferente. El AMD de la herramienta (daemon de montaje automático) es algo más antiguo y opera en el espacio del usuario. Básicamente, AMD se ejecuta periódicamente para ver si hay disponibles nuevos sistemas de archivos montables, en general para los sistemas de archivos NFS. En gran medida, AMD ha sido reemplazado en las distribuciones de Linux por Autofs, que se ejecuta como un proceso de kernel. Autofs se configura recopilándolo dentro del kernel que usted usa. Más tarde, el comportamiento del daemon de Autofs (por lo general /etc/init.d/autofs) es controlado por el archivo /etc/auto.master, que a su vez hace referencia a un archivo map. Por ejemplo: # Sample auto.master file # Format of this file: mountpoint map options /mnt /etc/auto.mnt --timeout=10 El /etc/auto.mnt al que se hace referencia especifica uno o más subdirectorios de /mnt a montarse (si se solicita el acceso). El desmontaje será automático, en este caso, 10 segundos después del último acceso. # Sample /etc/auto.mnt floppy -fstype=auto,rw,sync,umask=002 :/dev/fd0 cdrom -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom remote -fstype=nfs example.com:/some/dir

52

Montaje automático con supermount y submount Las herramientas supermount y submount son herramientas del nivel del kernel (recopiladas en el kernel de base o en los módulos del kernel) que sirven para montar automáticamente los medios removibles cuando se accede a los mismos.submount es algo más nueva, pero supermount probablemente se sigue usando en más distribuciones. Ninguna de las herramientas resulta útil para los montajes remotos de NFS, pero ambas están mejor integradas que Autofs para los medios locales. En cualquier caso, los dispositivos que requieren montaje automático generalmente aparecen en la configuración de /etc/fstab. Las herramientas usan sintaxis algo diferentes en /etc/fstab, pero ambas son directas. Un /etc/fstab con supermount -activado puede incluir lo siguiente: # Example of supermount in /etc/fstab none /mnt/cdrom supermount fs=auto,dev=/dev/cdrom 0 0 none /mnt/floppy supermount fs=auto,dev=/dev/fd0,--,user,rw 0 0 submountespecifica el dispositivo de bloques en la ubicación regular en lugar de una opción de mount. Por ejemplo: /dev/cdrom /mnt/cdrom subfs fs=cdfss,ro,users 0 0 /dev/fd0 /mnt/floppy subfs fs=floppyfss,rw,users 0 0

¿Qué es lo que se monta actualmente? El usuario de Linux tiene diversas maneras de ver una lista de montajes actuales. El comando mount sin opciones (o con la opción -l) incluye las rutas montadas actualmente. Si lo desea, usted puede filtrar los resultados con la opción -t fstype. La información dinámica subyacente en los sistemas de archivos montados reside en /etc/mtab. Los comandos mount yumount, al igual que otros procesos de sistemas, actualizarán este archivo para reflejar el estado actual; usted deberá tratar a este archivo como si fuera de sólo lectura. Además, se incluye un subconjunto de la información de estado de mount en /proc/mounts.

Herramientas especiales La herramienta sync envía por la fuerza los bloques no escritos modificados al disco. Usted no necesitará usar esto en situaciones normales, pero en ocasiones podrá verificar si hay problemas de disco controlando que no haya un estado de salida que no sea cero. Los sistemas de archivos modernos, en especial los sistemas de archivos de journaling como ext3, Reiser y JFS, de hecho realizan el syncing en toda escritura. Si lo desea, podrá desactivar o activar manualmente el uso del swapping o activar/desactivar el swapping para ciertos dispositivos. Por lo general, se usan para el swapping todos los dispositivos marcados como tipo swap en /etc/fstab.

Actualización de un sistema de archivos de Linux Cómo reparar un sistema de archivos con fsck Su mejor amigo para reparar un sistema de archivos roto es fsck. La herramienta denominada fsck es en realidad simplemente un front-end para una cantidad de herramientas fsck.* --fsck.ext2, fsck.ext3, o fsck.reiser. Usted puede especificar el tipo de manera explícita usando la opción -t, pero fsckhará un esfuerzo por calcularlo por sí sola. Lea la página man sobre fsck o fsck.* para ver más detalles al respecto. Lo más importante que le conviene saber es que la opción -a tratará de reparar todo lo que pueda de manera automática. Usted puede verificar un sistema de archivos desmontado mencionando su dispositivo sin formato. Por ejemplo, use fsck /dev/hda8 para verificar una partición que no está en uso. Además, puede verificar un sistema de archivos con raíz como por ejemplo fsck /home, pero por lo general sólo haga esto si el sistema de archivos ya se encuentra montado como sólo de lectura, y no como de lectura y escritura..

Cómo verificar bloques con badblocks La utilidad badblocks realiza una prueba de más bajo nivel sobre la calidad de un dispositivo de bloques (o partición) que la que realiza fsck. badblocks puede –destructivamente o no—examinar

53

la confiabilidad de los bloques en un dispositivo escribiendo y leyendo patrones de prueba. La opción predeterminada es -n para un modo a más lento que preserva los datos existentes. Para una partición totalmente nueva que no tiene archivos, se puede (y probablemente se debería) usar -w. Esta herramienta simplemente informa sobre bloques defectuosos; no los repara ni marca. Sin embargo, en la práctica, le resultará más conveniente usar el contenedor de verificación de badblock de la herramientafsck.* para su sistema de archivos. Por ejemplo, e2fsck (también denominado fsck.ext2) cuenta con la opción -c para buscar y marcar los badblocks que puede detectar la herramienta badblocks. ReiserFS tiene un --check similar y las opciones -badblocks (pero no es tan automático). Lea la documentación correspondiente a su sistema de archivos para ver más detalles sobre los contenedores de badblocks.

Cómo buscar otras utilidades de actualización Existen diversas herramientas disponibles para examinar y ajustar los sistemas de archivos de Linux. En la utilización normal, las configuraciones predeterminadas para los sistemas de archivos están bien diseñadas, pero en ocasiones será más conveniente usar herramientas del sistema de archivos para realizar un análisis forense de los sistemas caídos o ajustar el rendimiento en los sistemas con patrones de utilización bien definidos. Cada tipo de sistema de archivos posee su propio conjunto de herramientas; consulte la documentación para el sistema de archivos que usted usa para ver más detalles al respecto. La mayoría tiene un conjunto de herramientas similares. Algunos ejemplos incluyen: • dumpe2fs: Información de salida sobre un sistema de archivos ext2/3. • tune2fs: Ajuste de los parámetros del sistema de archivos en un sistema de archivos ext2/3. • debugfs: Ajuste y examen interactivos de un sistema de archivos ext2/3. • •

debugreiserfs: Información de salida sobre un sistema de archivos Reiser. reiserfstune: Ajuste d elos parámetros del sistema de archivos en un sistema de archivos Reiser.



xfs_admin: Ajuste de los parámetros del sistema de archivos en un sistema de archivos XFS.

Recursos Aprender •

"Hilos de ejecución comunes: Guía avanzada para el implementador de sistemas de archivos: Partes 1 - 13" (developerWorks, desde junio de 2001) es una serie excelente sobre los sistemas de archivos Linux.



"Uso de utilidades de texto GNU" (developerWorks, marzo 2004) muestra cómo usar la colección de utilidades de texto GNU para procesar archivos de registro, documentación, base de datos de textos estructurados y otras fuentes en texto de datos o contenidos.



"Comprensión de archivos de configuración Linux" (developerWorks, diciembre 2001) explica los archivos de configuración en un sistema Linux, que controlan los permisos del usuario, las aplicaciones del sistema, los daemons, los servicios y otras tareas administrativas en un ámbito de múltiples tareas para múltiples usuarios.



"Windows-to-Linux roadmap: Part 8. Backup and recovery" (developerWorks, noviembre 2003) es una rápida guía a las copias de seguridad y recuperación de Linux.



Encuentre más recursos para desarrolladores en la zona developerWorks de Linux.

54

Autor:

David Mertz es Turing completo, pero probablemente no apruebe la Prueba de Turing. Para conocer más acerca de su vida, consulte su página Web personal. David escribe las columnas developerWorks Charming Python y XML Matters desde el año 2000. Consulte su libroText Processing in Python [Procesamiento de texto en Python]. Compilación y edición: Ing. Sergio Aguilera. Facultad de Tecnología Informática. Universidad de Belgrano. [email protected] Todos los Derechos Reservados a IBM Corp. – Marzo 2012.

55