Capítulo 4


Administración del Sistema

4.1 Acerca de Raíces, Sombreros y la Sensación de Poder

4.1.1 La cuenta root
4.1.2 Abusando del sistema
4.1.3 Como proceder con los usuarios
4.1.4 Fijando las reglas
4.1.5 Lo que todo esto significa

4.2 Arrancando el Sistema

4.2.1 Utilizando un disquete de arranque
4.2.2 Utilizando LILO

4.3 Cerrando el Sistema

4.4 Gestión de Usuarios

4.4.1 Conceptos de gestión de usuarios
4.4.2 Añadiendo usuarios
4.4.3 Borrando usuarios
4.4.4 Poniendo atributos de usuario
4.4.5 Grupos

4.5 Archivando y Comprimiendo Ficheros

4.5.1 Utilizando tar
4.5.2 gzip y compress
4.5.3 Juntándolo todo

4.6 Usando Disquetes y Haciendo Copias de Seguridad

4.6.1 Utilizando disquetes para copias de seguridad
4.6.2 Utilizando disquetes como sistemas de ficheros

4.7 Actualizando e Instalando Nuevo Software

4.7.1 Actualizando el núcleo
4.7.2 Actualizando las librerías
4.7.3 Actualizando gcc
4.7.4 Actualizando otro software

4.8 Gestionando Sistemas de Ficheros

4.8.1 Montando sistemas de ficheros
4.8.2 Comprobando sistemas de ficheros

4.9 Utilizando un fichero de intercambio

4.10 Tareas Varias

4.10.1 Ficheros de arranque del sistema
4.10.2 Estableciendo el nombre del ordenador

4.11 Que Hacer En Una Emergencia

4.11.1 Recuperación utilizando un disquete de mantenimiento
4.11.2 Arreglando la password de root
4.11.3 Arreglando sistemas de ficheros corrompidos
4.11.4 Recuperando ficheros perdidos
4.11.5 Arreglando librerías corrompidas

Administración del Sistema
Anterior- Siguiente - Índice

Este capitulo es una visión general de la administración de un sistema Linux, incluyendo un número de posibilidades avanzadas que no son, necesariamente, solo para administradores de sistemas. Igual que cada perro tiene su día, cada sistema tiene su administrador, y poner en marcha el sistema es un trabajo muy importante y a veces consume mucho tiempo, incluso si se es el único usuario en el sistema.
Hemos intentado cubrir aquí los elementos más importantes acerca de la administración de sistemas que se necesitan conocer cuando se use Linux, en suficiente detalle para empezar confortablemente. Para mantenerlo corto y agradable, solo hemos cubierto los niveles más básicos y nos hemos saltado muchos e importantes detalles. Se debe leer el Linux System Administrator's Guide si se quiere ejecutar Linux en serio. Le ayudara a comprender mejor como funcionan las cosas y como se ensamblan juntas. Al menos hojéelo para que pueda conocer que contiene y que tipo de ayuda puede esperar de él.

4.1 Acerca de Raíces, Sombreros y la Sensación de Poder
Anterior- Siguiente - Índice

Como sabe, UNIX distingue entre diferentes usuarios para que lo que hagan a los demás y al sistema pueda ser regulado (uno no desearía que nadie pudiese leer nuestras cartas de amor, por ejemplo).
Cada usuario recibe una cuenta que incluye un nombre de usuario, un directorio inicial, y otras cosas por el estilo. Además de las cuentas dadas a personas reales, existen cuentas especiales, definidas por el sistema, que tienen privilegios especiales. La más importante de estas es la cuenta raíz, con el nombre de usuario root.

4.1.1 La cuenta root
Anterior- Siguiente - Índice

Los usuarios normales están restringidos normalmente para que no puedan dañar a nadie mas en el sistema, solo a ellos mismos. Los permisos de los ficheros en el sistema están preparados para que los usuarios normales no tengan permitido borrar o modificar ficheros en directorios compartidos por todos los usuarios (como son /bin y /usr/bin. Muchos usuarios también protegen sus propios ficheros con los permisos adecuados para que otros usuarios no puedan acceder o modificar estos ficheros.
Estas restricciones desaparecen para root. El usuario root puede leer, modificar o borrar cualquier fichero en el sistema, cambiar permisos y pertenencias en cualquier fichero, y ejecutar programas especiales, como pueden ser los que particionan un disco o crean sistemas de ficheros. La idea básica es que la persona o personas que ejecutan y cuidan del sistema entren como root cuando sea necesario para realizar tareas que no pueden ser ejecutadas por un usuario normal. Puesto que root puede hacer todo, es fácil cometer errores que tengan consecuencias catastróficas cuando se trabaja utilizando esta cuenta.
Por ejemplo, como un usuario normal, si inadvertidamente se intentase borrar todos los ficheros en /etc, el sistema no lo permitiría. Sin embargo, como usuario root, el sistema no diría nada. Es muy simple el dañar el sistema utilizando root. La mejor forma de evitar accidentes es:

o Pensárselo dos veces antes de apretar |_return_| en un comando que pueda causar daño. Por ejemplo, si se va a borrar un directorio, antes de pulsar |_return_|, releer el comando completo y asegurarse que es correcto.
o No acostumbrarse a utilizar root. Cuanto más confortable se encuentre uno trabajando con el usuario root, más seguro que se confundirán los privilegios con los de un usuario normal.
Por ejemplo, puede uno pensar que se esta conectado como larry, cuando realmente se esta conectado como root.
o Utilice un marcador distinto para la cuenta root. Se debe cambiar el fichero .bashrc o el .login de root para poner el marcador del interprete a algo distinto del marcador de usuario normal. Por ejemplo, mucha gente utiliza el carácter "$" como marcador para los usuarios normales, y reserva el carácter "#" como marcador para el usuario root.
o Conectarse como root solo cuando sea absolutamente necesario. Y desconectarse tan pronto como se haya terminado el trabajo. Cuanto menos se use la cuenta root, menos posibilidades habrá de dañar el sistema.

Por supuesto, existe una variante de hackers de UNIX que utilizan root para prácticamente todo. Pero cada uno de ellos ha cometido, en algún momento, algún error tonto como root y corrompido el sistema. La regla general es que hasta que se familiarice con la falta de restricciones de root, y este cómodo utilizando el sistema sin dichas restricciones, procure conectarse como root lo menos posible.
Por supuesto, todo el mundo comete errores. El mismo Linus Torvalds borró accidentalmente una vez el árbol de directorios completo del núcleo de su sistema. Horas de trabajo se perdieron para siempre. Afortunadamente, sin embargo, gracias a su conocimiento del código del sistema de ficheros, fue capaz de reiniciar el sistema y reconstruir el árbol de directorios del disco a mano.
Pongámoslo de otra forma, si se imagina la utilización de la cuenta root como la utilización de un sombrero mágico especial que le da montones de poderes, pudiendo, con un gesto de la mano, destruir ciudades enteras, es una buena idea de lo que es ser un poco cauto con lo que se hace con las manos. Puesto que es fácil mover la mano de manera destructiva por accidente, no es una buena idea el llevar el sombrero mágico cuando no es necesario, a pesar de la maravillosa sensación.

4.1.2 Abusando del sistema
Anterior- Siguiente - Índice

Junto con el sentimiento de poder llega la tendencia a hacer daño. Este es uno de los puntos oscuros de la administración de sistemas UNIX, pero todo el mundo pasa por ello en algún momento. Muchos usuarios de sistemas UNIX nunca tienen la posibilidad de manejar este poder en los sistemas UNIX de universidad y de empresas, solo los altamente cualificados (y altamente pagados) administradores de sistemas llegan a conectarse como root. De hecho, en muchas de esas instituciones, la clave de root es un secreto celosamente guardado: es tratado como el Sagrado Grial de la institución. Se monta mucho jaleo con la conexión como root; esta visto como un sabio y a la vez espantoso poder, dado solo a un reducido grupo de elegidos.
Este tipo de actitud hacia la cuenta root es, sencillamente, el tipo de actitud que alimenta la malicia y el desprecio. Ya que root es tan atractivo, cuando algunos usuarios tienen su primera oportunidad de conectarse como root (ya sea en un sistema Linux, o en cualquier otro sitio), la tendencia es a utilizar los privilegios de root de forma descuidada. Yo he conocido "administradores de sistemas" (por llamarlos de alguna forma) que leen el correo de otros usuarios, borran ficheros de usuario sin avisar y que, de forma general, se comportan como niños cuando se les da un "juguete" poderoso.
Puesto que root tiene tantos privilegios en el sistema, se necesita una cierta madurez y autocontrol para utilizar la cuenta de la forma para la que esta diseñada para ejecutar el sistema.
Existe un código de honor no hablado entre el administrador y los usuarios del sistema. ¿Cómo se sentiría si su administrador de sistemas leyese su correo electrónico o mirase sus ficheros? Aun no hay ningún precedente legal firme acerca de la intimidad electrónica en sistemas de ordenadores de tiempo compartido. En sistemas UNIX, el usuario root tiene la posibilidad de saltarse todos los mecanismos de seguridad y privacidad del sistema. Es importante que el administrador del sistema desarrolle una relación de confianza con los usuarios del sistema. Es algo en lo que nunca se puede insistir lo suficiente.

4.1.3 Como proceder con los usuarios
Anterior- Siguiente - Índice

La seguridad en UNIX es bastante laxa por diseño. La seguridad del sistema fue un pensamiento posterior, el sistema se desarrollo originalmente en un entorno donde las intrusiones de un usuario en otro eran algo inaudito. Por esto, incluso con medidas de seguridad, aun existe la posibilidad de que usuarios normales hagan daño.
Los administradores de sistemas pueden tomar dos posturas cuando traten con usuarios abusivos: ser paranoicos o confiados.
El administrador de sistemas paranoico normalmente causa mas daño que el que previene. Una de mis citas favoritas es, "nunca atribuyas a la malicia nada que pueda ser atribuido a la estupidez." Dicho de otra forma, muchos usuarios no tienen la habilidad o el conocimiento para hacer daño real al sistema. El 90% del tiempo, cuando un usuario causa problemas en el sistema (por ejemplo, rellenando la partición de usuarios con grandes ficheros, o ejecutando múltiples instancias de un gran programa), el usuario simplemente desconoce que lo que esta haciendo es un problema. He ido a ver a usuarios que estaban causando una gran cantidad de problemas, pero su actitud estaba causada por la ignorancia no por la malicia.
Cuando se enfrente con usuarios que puedan causar problemas potenciales no sea acusativo.
La antigua regla de "inocente hasta que se demuestre lo contrario" sigue siendo valida. Es mejor una simple charla con el usuario, preguntándole acerca del problema, en lugar de causar una confrontación. Lo ultimo que se desea es estar entre los malos desde el punto de vista del usuario.
Esto levantaría un montón de sospechas acerca de si usted (el administrador de sistemas) tiene el sistema correctamente configurado. Si un usuario cree que usted le disgusta o no le tiene confianza, le puede acusar de borrar ficheros o romper la privacidad del sistema. Esta no es, ciertamente, el tipo de situación en la que quisiera estar.
Si encontrase que un usuario ha estado intentando "romper" el sistema, o ha estado haciendo daño al sistema de forma intencionada, no devuelva el comportamiento malicioso a su vez. En vez de ello, simplemente, dele un aviso pero sea flexible. En muchos casos, se puede cazar a un usuario "con las manos en la masa" dañando al sistema, avísele. Dígale que no lo vuelva a repetir. Sin embargo, si le vuelve a cazar haciendo daño, entonces puede estar absolutamente seguro de que es intencionado. Ni siquiera puedo empezar a describir la cantidad de veces que parecía que había un usuario causando problemas al sistema, cuando de hecho, era o un accidente o un fallo mío.

4.1.4 Fijando las reglas
Anterior- Siguiente - Índice

La mejor forma de administrar un sistema no es con un puño de hierro. Así puede ser como se haga lo militar, pero UNIX no fue diseñado para ese tipo de disciplina. Tiene sentido el escribir un conjunto sencillo y flexible de reglas para los usuarios, pero recuerde, cuantas menos reglas tenga, menos posibilidades habrá de romperlas. Incluso si sus reglas para utilizar el sistema son perfectamente razonables y claras, siempre habrá momentos en que los usuarios romperán dichas reglas sin pretenderlo. Esto es especialmente cierto en el caso de usuarios UNIX nuevos, que están aprendiendo los entresijos del sistema. No esta suficientemente claro, por ejemplo, que uno no debe bajarse un gigabyte de ficheros y enviárselo por correo a todos los usuarios del sistema. Los usuarios necesitan comprender las reglas y por que están establecidas.
Si especifica reglas de uso para su sistema, asegúrese de que el motivo detrás de cada regla particular este claro. Si no lo hace, los usuarios encontraran toda clase de formas creativas de saltársela y no saber que en realidad la están rompiendo.

4.1.5 Lo que todo esto significa
Anterior- Siguiente - Índice

No podemos decirle como ejecutar su sistema al ultimo detalle. Mucha de la filosofía depende en como se use el sistema. Si se tienen muchos usuarios, las cosas son muy diferentes de si solo tiene unos pocos o si se es el único usuario del sistema. Sin embargo, siempre es una buena idea en cualquier situación comprender lo que ser administrador de sistema significa en realidad.
Ser el administrador de un sistema no le hace a uno un mago del UNIX. Hay muchos administradores de sistemas que conocen muy poco acerca de UNIX. Igualmente, hay muchos usuarios "normales" que saben mas acerca de UNIX que lo que cualquier administrador de sistemas. También, ser el administrador de sistemas no le permite el utilizar la malicia contra sus usuarios. Aunque el sistema le dé el privilegio de enredar en los ficheros de los usuarios, no significa que se tenga ningún derecho a hacerlo.
Por ultimo, ser el administrador del sistema no es realmente una gran cosa. No importa si sus sistema es un pequeño 386 o un super ordenador Cray. La ejecución del sistema es la misma. El saber la clave de root no significa ganar dinero o fama. Tan solo le permitirá ejecutar el sistema y mantenerlo funcionando. Eso es todo.

4.2 Arrancando el Sistema
Anterior- Siguiente - Índice

Hay varias maneras de arrancar el sistema, bien sea desde disquete o bien desde el disco duro.

4.2.1 Utilizando un disquete de arranque
Anterior- Siguiente - Índice

Mucha gente arranca Linux utilizando un "disquete de arranque" que contiene una copia del núcleo de Linux. Este núcleo tiene la partición raíz de Linux codificada en el, para que sepa donde buscar en el disco duro el sistema de ficheros raíz. (El comando rdev puede ser utilizado para poner la partición raíz en la imagen del núcleo; ver mas adelante.) Por ejemplo, este es el tipo de disquete creado por Slackware durante la instalación.
Para crear su propio disquete de arranque, localice en primer lugar la imagen del núcleo en su disco duro. Debe estar en el fichero /Image o /etc/Image. Algunas instalaciones utilizan el fichero /vmlinux para el núcleo.
En su lugar, puede que tenga un núcleo comprimido. Un núcleo comprimido se descomprime a si mismo en memoria en tiempo de arranque, y utiliza mucho menos espacio en el disco duro. Si se tiene un núcleo comprimido, puede encontrarse en el fichero /zImage o /etc/zImage. Algunas instalaciones utilizan el fichero /vmlinuz para el núcleo comprimido.
Una vez que se sabe donde esta el núcleo, hay que poner el nombre de la partición raíz de un dispositivo raíz en la imagen del núcleo, utilizando el comando rdev. El formato de este comando es

rdev <nombre-de-nucleo> <dispositivo-raiz>

donde <nombre-del-nucleo> es el nombre de la imagen del núcleo, y <dispositivo-raiz> es el nombre de la partición raíz de Linux. Por ejemplo, para hacer que el dispositivo raíz en el núcleo /etc/Image sea /dev/hda2, utilice el comando

# rdev /etc/Image /dev/hda2

rdev también puede poner otras opciones en el núcleo, como puede ser el modo SVGA por defecto a utilizar en tiempo de arranque. Tan solo utilice "rdev -h" para obtener un mensaje de ayuda.
Una vez puesto el dispositivo raíz, tan solo hay que copiar la imagen del núcleo al disquete.
Siempre que se copia datos a un disquete, es una buena idea formatear previamente el disquete en MS-DOS. Esto establece la información de pista y sector en el disquete con la que puede detectarse como de alta o baja densidad.
Por ejemplo, para copiar el núcleo en el fichero /etc/Image al disquete en /dev/fd0, se puede utilizar el comando

# cp /etc/Image /dev/fd0

Este disquete debe arrancar ahora Linux.

4.2.2 Utilizando LILO
Anterior- Siguiente - Índice

Otro método de arranque es utilizar LILO, un programa que reside en el sector de arranque del disco duro. Este programa se ejecuta cuando el sistema se inicia desde el disco duro, y puede arrancar automáticamente Linux desde una imagen de núcleo almacenada en el propio disco duro.
LILO puede utilizarse también como una primera etapa de carga de varios sistemas operativos, permitiendo seleccionar en tiempo de arranque que sistema operativo (como Linux o MS-DOS) arrancar. Cuando se arranca utilizando LILO, se inicia el sistema operativo por defecto, a menos que pulse |_ctrl_|, |_alt_|, o |_shift_| durante la secuencia de arranque. Si se pulsa cualquiera de estas teclas, se le presentara un indicador de arranque, donde debe teclear el nombre del sistema operativo a arrancar (como puede ser "linux" o "msdos"). Si se pulsa la tecla |_tab_| en el indicador de arranque, se le presentara una lista de los sistemas operativos disponibles.
La forma mas simple de instalar LILO es editar el fichero de configuración, /etc/lilo.conf, y ejecutar el comando

# /sbin/lilo

El fichero de configuración de LILO contiene una "estrofa" para cada sistema operativo que se pueda querer arrancar. La mejor forma de mostrarlo es con un ejemplo de un fichero de configuración LILO. El ejemplo siguiente es para un sistema que tiene una partición raíz Linux en /dev/hda1 y una partición MS-DOS en /dev/hda2.

# Le indicamos a LILO que modifique el registro de arranque de
# /dev/hda (el primer disco duro no-SCSI). Si se quiere arrancar desde
# una unidad distinta de /dev/hda, se debe cambiar la siguiente línea
boot = /dev/hda

# Nombre del cargador de arranque. No hay razón para cambiarlo, a menos
# que se este haciendo una modificación seria del LILO
install = /boot/boot.b

# Dejemos a LILO efectuar alguna optimización.
compact

# Estrofa para la partición raíz de Linux en /dev/hda1.
image = /etc/Image # Ubicación del kernel
label = linux # Nombre del SO (para el menú de arranque de LILO)
root = /dev/hda1 # Ubicación de la partición raíz
vga = ask # Indicar al núcleo que pregunte por modos SVGA
# en tiempo de arranque

# Estrofa para la partición MSDOS en /dev/hda2.
other = /dev/hda2 # Ubicación de la partición
table = /dev/hda # Ubicación de la tabla de partición para /dev/hda2
label = msdos # Nombre del SO (para el menú de arranque)

La primera "estrofa" de sistema operativo en el menú del fichero de configuración será el sistema operativo que arrancara LILO por defecto. Se puede seleccionar otro sistema operativo en el indicador de arranque de LILO, tal y como se indico anteriormente.
Recuerde que cada vez que actualice la imagen del núcleo en disco, se debe reejecutar /sbin/lilo para que los cambios queden reflejados en el sector de arranque de su unidad.
También tenga en cuenta que si utiliza la línea "root =", no hay motivo para utilizar rdev para poner la partición raíz en la imagen del núcleo. LILO se encarga de ponerlo en tiempo de arranque.
Las FAQ (Preguntas frecuentemente formuladas) (ver Apéndice A) dan mas información sobre LILO, incluyendo como utilizar LILO con el "OS/2's Boot Manager".

4.3 Cerrando el Sistema
Anterior- Siguiente - Índice

Cerrar un sistema Linux tiene algo de truco. Recuerde que nunca se debe cortar la corriente o pulsar el botón de reset mientras el sistema este ejecutándose. El núcleo sigue la pista de la entrada/salida a disco en buffers de memoria. Si se reinicializa el sistema sin darle al núcleo la oportunidad de escribir sus buffers a disco, puede corromper sus sistemas de ficheros.
En tiempo de cierre se toman también otras precauciones. Todos los procesos reciben una señal que les permite morir airosamente (escribiendo y cerrando todos los ficheros y ese tipo de cosas).
Los sistemas de ficheros se desmontan por seguridad. Si se desea, el sistema también puede alertar a los usuarios de que se esta cerrando y darles la posibilidad de desconectarse.
La forma mas simple de cerrar el sistema es con el comando shutdown. El formato del comando es

shutdown <tiempo> <mensaje-de-aviso>

El argumento <tiempo> es el momento de cierre del sistema (en el formato hh:mm:ss), y <mensaje-de-aviso> es un mensaje mostrado en todos los terminales de usuario antes de cerrar. Alternativamente, se puede especificar el parámetro <tiempo> como "now", para cerrar inmediatamente. Se le puede suministrar la opción -r a shutdown para reinicializar el sistema tras el cierre.
Por ejemplo, para cerrar el sistema a las 8:00pm, se puede utilizar el siguiente comando

# shutdown -r 20:00

El comando halt puede utilizarse para forzar un cierre inmediato, sin ningún mensaje de aviso ni periodo de gracia. halt se utiliza si se es el único usuario del sistema y se quiere cerrar el sistema y apagarlo.
3 No apague o reinicialice el sistema hasta que vea el mensaje:

The system is halted

Es muy importante que cierre el sistema "limpiamente" utilizando el comando shutdown o el halt.
En algunos sistemas, se reconocerá el pulsar |_ctrl-alt-del_|, que causara un shutdown; en otros sistemas, sin embargo, el utilizar el "Apretón de Cuello de Vulcano" reinicializará el sistema inmediatamente y puede causar un desastre.

4.4 Gestión de Usuarios
Anterior- Siguiente - Índice

Independientemente de que tenga muchos usuarios o no en su sistema, es importante comprender los aspectos de la gestión de usuarios bajo Linux. Incluso si se es el único usuario, se debe tener, presumiblemente, una cuenta distinta de root para hacer la mayor parte del trabajo.
Cada persona que utilice el sistema debe tener su propia cuenta. Raramente es una buena idea el que varias personas compartan la misma cuenta. No solo es un problema de seguridad, sino que las cuentas se utilizan para identificar unívocamente a los usuarios al sistema. Se necesita ser capaz de saber quien esta haciendo que.

4.4.1 Conceptos de gestión de usuarios
Anterior- Siguiente - Índice

El sistema mantiene una cierta cantidad de información acerca de cada usuario. Dicha información se resume a continuación.

nombre de usuario El nombre de usuario es el identificador único dado a cada usuario del sistema. Ejemplos de nombres de usuario son larry, karl y mdw. Se pueden utilizar letras y dígitos junto a los caracteres "_" (subrayado) y "." (punto). Los nombres de usuario se limitan normalmente a 8 caracteres de longitud.

user ID El user ID, o UID, es un numero único dado a cada usuario del sistema. El sistema normalmente mantiene la pista de la información por UID, no por nombre de usuario.

group ID El group ID, o GID, es la identificación del grupo del usuario por defecto. En la sección 3.9 discutimos los permisos de grupo; cada usuario pertenece a uno o mas grupos definidos por el administrador del sistema. Mas sobre esto mas adelante.

clave El sistema también almacena la clave encriptada del usuario. El comando passwd se utiliza para poner y cambiar las claves de los usuarios.

nombre completo El "nombre real" o "nombre completo" del usuario se almacena junto con el nombre de usuario. Por ejemplo, el usuario schmoj puede tener el nombre "Jos Schmo" en la vida real.

directorio inicial El directorio inicial es el directorio en el que se coloca inicialmente al usuario en tiempo de conexión. Cada usuario debe tener su propio directorio inicial, normalmente situado bajo /home.

intérprete de inicio El interprete de inicio del usuario es el interprete de comandos que es arrancado para el usuario en tiempo de conexión. Ejemplos pueden ser /bin/bash y /bin/tcsh.

El fichero /etc/passwd contiene la información anterior acerca de los usuarios. Cada línea del fichero contiene información acerca de un único usuario; el formato de cada línea es

nombre:clave encriptada:UID:GID:nombre completo:dir.inicio:interprete

Un ejemplo puede ser:

kiwi:Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

Como puede verse, el primer campo , "kiwi", es el nombre de usuario.
El siguiente campo, "Xv8Q981g71oKK", es la clave encriptada. Las claves no se almacenan en el sistema en ningún formato legible por el hombre. Las claves se encriptan utilizándose a si mismas como clave secreta. En otras palabras, solo si se conoce la clave, esta puede ser desencriptada. Esta forma de encriptación es bastante segura.
Algunos sistemas utilizan "claves en sombra" en la que la información de las claves se relega al fichero /etc/shadow. Puesto que /etc/passwd es legible por todo el mundo, /etc/shadow suministra un grado extra de seguridad, puesto que este no lo es. Las claves en sombra suministran algunas otras funciones como puede ser la expiración de claves; no entraremos a detallar estas funciones aquí .
El tercer campo "102", es el UID. Este debe ser único para cada usuario. El cuarto campo, "100", es el GID. Este usuario pertenece al grupo numerado 100. La información de grupos, como la información de usuarios, se almacena en el fichero /etc/group. Véase la sección 4.4.5 para mas información.
El quinto campo es el nombre completo del usuario. "Laura Poole". Los dos últimos campos son el directorio inicial del usuario (/home/kiwi) y el interprete de conexión (/bin/bash), respectivamente. No es necesario que el directorio inicial de un usuario tenga el mismo nombre que el del nombre de usuario. Sin embargo, ayuda a identificar el directorio.

4.4.2 Añadiendo usuarios
Anterior- Siguiente - Índice

Cuando se añade un usuario hay varios pasos a seguir. Primero, se le debe crear una entrada en /etc/passwd, con un nombre de usuario y UID únicos. Se debe especificar el GID, nombre completo y resto de información. Se debe crear el directorio inicial, y poner los permisos en el directorio para que el usuario sea el dueño. Se deben suministrar ficheros de comandos de inicialización en el nuevo directorio y se debe hacer alguna otra configuración del sistema (por ejemplo, preparar un buzón para el correo electrónico entrante para el nuevo usuario).
Aunque no es difícil el añadir usuarios a mano (yo lo hago), cuando se esta ejecutando un sistema con muchos usuarios, es fácil el olvidarse de algo. La manera mas simple de añadir usuarios es utilizar un programa interactivo que vaya preguntando por la información necesaria y actualice todos los ficheros del sistema automáticamente. El nombre de este programa es useradd o adduser dependiendo del software que este instalado. Las paginas man para estos comandos deberían ser suficientemente autoexplicatorias.

4.4.3 Borrando usuarios
Anterior- Siguiente - Índice

De forma parecida, borrar usuarios puede hacerse con los comandos userdel o deluser dependiendo de que software fuera instalado en el sistema.
Si se desea "deshabilitar" temporalmente un usuario para que no se conecte al sistema (sin borrar la cuenta del usuario), se puede prefijar con un asterisco ("*") el campo de la clave en /etc/passwd.
Por ejemplo, cambiando la línea de /etc/passwd correspondiente a kiwi a  

kiwi:*Xv8Q981g71oKK:102:100:Laura Poole:/home/kiwi:/bin/bash

evitara que kiwi se conecte.

4.4.4 Poniendo atributos de usuario
Anterior- Siguiente - Índice

Después de que haya creado un usuario, puede necesitar cambiar algún atributo de dicho usuario, como puede ser el directorio inicial o la clave. La forma mas simple de hacer esto es cambiar los valores directamente en /etc/passwd. Para poner clave a un usuario, utilice el comando passwd.
Por ejemplo,

# passwd larry

cambiara la clave de larry. Solo root puede cambiar la clave de otro usuario de esta forma. Los usuarios pueden cambiar su propia clave con passwd también.
En algunos sistemas, los comandos chfn y chsh están disponibles, permitiendo a los usuarios el cambiar sus atributos de nombre completo e interprete de conexión. Si no, deben pedir al administrador de sistemas que los cambie por ellos.

4.4.5 Grupos
Anterior- Siguiente - Índice

Como hemos citado anteriormente, cada usuario pertenece a uno o mas grupos. La única importancia real de las relaciones de grupo es la perteneciente a los permisos de ficheros, como dijimos en la sección 3.9, cada fichero tiene un "grupo propietario" y un conjunto de permisos de grupo que define de que forma pueden acceder al fichero los usuarios del grupo.
Hay varios grupos definidos en el sistema, como pueden ser bin, mail, y sys. Los usuarios no deben pertenecer a ninguno de estos grupos; se utilizan para permisos de ficheros del sistema. En su lugar, los usuarios deben pertenecer a un grupo individual, como users. Si se quiere ser detallista, se pueden mantener varios grupos de usuarios como por ejemplo estudiantes, soporte y facultad.
El fichero /etc/group contiene información acerca de los grupos. El formato de cada línea es  

nombre de grupo:clave:GID:otros miembros

Algunos ejemplos de grupos pueden ser:

root:*:0:
usuarios:*:100:mdw,larry
invitados:*:200:
otros:*:250:kiwi

El primer grupo, root, es un grupo especial del sistema reservado para la cuenta root. El siguiente grupo, users, es para usuarios normales. Tiene un GID de 100. Los usuarios mdw y larry tienen acceso a este grupo. Recuérdese que en /etc/passwd cada usuario tiene un GID por defecto. Sin embargo, los usuarios pueden pertenecer a mas de un grupo, añadiendo sus nombres de usuario a otras líneas de grupo en /etc/group. El comando groups lista a que grupos se tiene acceso.
El tercer grupo, invitados, es para usuarios invitados, y otros es para "otros" usuarios. El usuario kiwi tiene acceso a este grupo.
Como se puede ver, el campo "clave" de /etc/group raramente se utiliza. A veces se utiliza para dar una clave para acceder a un grupo. Esto es raras veces necesario. Para evitar el que los usuarios cambien a grupos privilegiados (con el comando newgroup), se pone el campo de la clave a "*".
Se pueden usar los comandos addgroup o groupadd para añadir grupos a su sistema. Normalmente es mas sencillo añadir líneas a /etc/group uno mismo, puesto que no se necesitan mas configuraciones para añadir un grupo. Para borrar un grupo, solo hay que borrar su entrada de /etc/group.

4.5 Archivando y Comprimiendo Ficheros
Anterior- Siguiente - Índice

Antes de que podamos hablar acerca de copias de seguridad, necesitamos presentar las herramientas utilizadas para archivar ficheros y programas en los sistemas UNIX.

4.5.1 Utilizando tar
Anterior- Siguiente - Índice

El comando tar es utilizado normalmente para archivar ficheros. El formato del comando tar es

tar <opciones> <fichero1> <fichero2> ...<ficheroN>

donde <opciones> es la lista de comandos y opciones para tar, y <fichero1> hasta <ficheroN> es la lista de ficheros a añadir o extraer del archivo.
Por ejemplo, el comando

# tar cvf backup.tar /etc

empaquetara todos los ficheros de /etc en el fichero tar backup.tar. El primer argumento de tar ("cvf") es el "comando" tar. "c" le dice a tar que cree un nuevo fichero de archivo. La opción "v" fuerza a tar en el modo detallado, imprimiendo los nombres de los ficheros según se archivan. La opción "f" le dice a tar que el siguiente argumento (backup.tar) es el nombre del archivo a crear. El resto de los argumentos de tar son los nombres de ficheros y directorios a añadir al archivo.
El comando

# tar xvf backup.tar

extraerá el fichero tar backup.tar en el directorio actual. Esto puede ser peligroso a veces, cuando se extraen ficheros de un fichero tar, los ficheros antiguos se sobreescriben.
Por otra parte, antes de extraer ficheros tar es importante conocer donde se deben desempaquetar los ficheros. Por ejemplo, digamos que se archivaron los siguientes ficheros: /etc/hosts, /etc/group, y /etc/passwd. Si se uso el comando

# tar cvf backup.tar /etc/hosts /etc/group /etc/passwd

el nombre de directorio /etc se añadió al principio de cada nombre de fichero. Para poder extraer los ficheros en la localización correcta, se necesitara utilizar los siguientes comandos:

# cd /
# tar xvf backup.tar

Puesto que los ficheros se extraen con el nombre de camino almacenado en el fichero de archivo. Sin embargo, si se archivaron los ficheros con los comandos

# cd /etc
# tar cvf hosts group passwd

Los nombres de directorio no se salvaron en el fichero de archivo. Por esto se necesitara hacer "cd /etc" antes de extraer los ficheros. Como se puede ver, el cómo haya sido creado un fichero tar marca una gran diferencia en como se extrae. Se puede usar el comando

# tar tvf backup.tar

para mostrar un "índice" del fichero tar antes de desempaquetarlo. De esta forma se puede ver que directorio se utilizo como origen de los nombres de los ficheros, y se puede extraer el archivo desde la localización correcta.

4.5.2 gzip y compress
Anterior- Siguiente - Índice

A diferencia de los programas de archivo para MS-DOS, tar no comprime automáticamente los ficheros según los archiva. Por ello, si se están archivando dos ficheros de un megabyte, el fichero tar resultante tendrá dos megabytes. El comando gzip puede utilizarse para comprimir un fichero (el fichero a comprimir no necesita ser un fichero tar). El comando

# gzip -9 backup.tar

comprimirá backup.tar y le dejara con backup.tar.gz, que es la versión comprimida del fichero. La opción -9 le dice a gzip que utilice el mayor factor de compresión.
El comando gunzip puede ser utilizado para descomprimir un fichero comprimido con gzip. Equivalentemente, se puede utilizar "gzip -d". gzip es una herramienta relativamente nueva en la comunidad UNIX. Durante muchos años, se utilizo en su lugar el comando compress. Sin embargo, debido a varios factores1, compress se esta volviendo desfasado.
Los ficheros comprimidos con compress terminan en la extensión .Z. Por ejemplo, backup.tar.Z es la versión comprimida con compress de backup.tar, mientras que backup.tar.gz es la versión comprimida con gzip2. El comando uncompress se utiliza para expandir un fichero comprimido con compress; gunzip sabe también como tratar los ficheros comprimidos con compress.

4.5.3 Juntándolo todo
Anterior- Siguiente - Índice

Por lo tanto, para archivar un grupo de ficheros y comprimir el resultado, se pueden utilizar los comandos:

# tar cvf backup.tar /etc
# gzip -9 backup.tar

_____________________________________________

1 Estos factores incluyen una disputa por una patente software contra el algoritmo de compress y el hecho de que gzip es mucho mas eficiente que compress.
2 Para añadir mas confusión, durante algún tiempo la extensión .z ("z" minúscula) fue utilizada para los ficheros comprimidos con gzip. La extensión oficial de los ficheros gzip ahora es .gz.

El resultado será backup.tar.gz. Para desempaquetar este fichero, se usan los comandos contrarios:

# gunzip backup.tar.gz
# tar xvf backup.tar

Por supuesto, asegúrese siempre de que esta en el directorio correcto antes de desempaquetar un fichero tar.
Se pueden utilizar algunas mañas UNIX para hacer todo esto en una sola línea de comando, como por ejemplo:

# tar cvf - /etc | gzip -9c > backup.tar.gz

Aquí estamos enviando el fichero tar a "-", que representa la salida estándar de tar. Esto es encolado hacia gzip, que comprime el fichero tar de entrada, y el resultado se salva en backup.tar.gz.
La opción -c de gzip le dice que envíe su salida hacia la salida estándar, que es redirigida a backup.tar.gz.
Un comando único para desempaquetar este archivo seria:

# gunzip -c backup.tar.gz | tar xvf -

De nuevo, gunzip descomprime el contenido de backup.tar.gz y envía el fichero tar resultante hacia la salida estándar. Esta es redirigida hacia tar, que lee de "-", refiriéndose esta vez a la entrada estándar de tar.
Felizmente, el comando tar también incluye la opción z para comprimir/descomprimir automáticamente los ficheros al vuelo, utilizando el algoritmo de compresión de gzip.
Por ejemplo, el comando

# tar cvfz backup.tar.gz /etc

es equivalente a

# tar cvf backup.tar /etc
# gzip backup.tar

Igual que el comando

# tar xvfz backup.tar.Z

se puede utilizar en vez de

# uncompress backup.tar.Z
# tar xvf backup.tar

Remítase a las paginas man para obtener mas información acerca de tar y gzip.

4.6 Usando Disquetes y Haciendo Copias de Seguridad
Anterior- Siguiente - Índice

Los disquetes son utilizados normalmente como medio para copias de seguridad. Si no se tiene una unidad de cinta conectada al sistema, se pueden utilizar disquetes (a pesar de que sean mas lentos y ligeramente menos seguros).
También puede utilizar disquetes para contener sistemas de ficheros individuales, de esta forma, se puede montar mount el disquete para acceder a los datos contenidos en el.

4.6.1 Utilizando disquetes para copias de seguridad
Anterior- Siguiente - Índice


La forma mas simple de hacer una copia de seguridad es con tar. El comando

# tar cvfzM /dev/fd0 /

hará una copia de seguridad completa de su sistema utilizando el disquete /dev/fd0. La opción "M" de tar permite que la copia de seguridad sea una copia multi-volumen; esto es, cuando un disquete esta lleno, tar pedirá el siguiente. El comando  

# tar xvfzM /dev/fd0

ser utilizado para recuperar la copia de seguridad completa. Este método puede ser utilizado también si se tiene una unidad de cinta (/dev/rmt0) conectada al sistema.
Existen otros programas para hacer copias de seguridad multi-volumen; el programa backflops disponible en tsx-11.mit.edu puede ser útil.
Hacer una copia de seguridad completa del sistema puede ser costoso en tiempo y recursos. Muchos administradores de sistemas utilizan una política de copias de seguridad incrementales, en la que cada mes se hace una copia de seguridad completa, y cada semana solo se copian aquellos ficheros que hayan sido modificados en esa semana. En este caso, si el sistema se viene abajo a mitad de mes, solo tiene que restaurar la ultima copia de seguridad mensual completa y, después, las ultimas copias semanales según el caso.
El comando find puede ser útil para localizar ficheros que hayan cambiado desde una cierta fecha.
Se pueden encontrar varios ficheros de comandos para manejar copias de seguridad incrementales en sunsite.unc.edu.

4.6.2 Utilizando disquetes como sistemas de ficheros
Anterior- Siguiente - Índice

Puede crearse un sistema de ficheros en un disquete igual que lo haría en una partición de un disco duro. Por ejemplo,

# mke2fs /dev/fd0 1440

crea un sistema de ficheros en el disquete en /dev/fd0. El tamaño del sistema de ficheros debe corresponder al tamaño del disquete. Los disquetes de alta densidad de 3.5" tienen un tamaño de 1.44 megabytes, o 1440 bloques. Los disquetes de alta densidad de 5.25" tienen 1200 bloques.
Para poder acceder a un disquete, se debe montar mount el sistema de ficheros que contiene. El comando

# mount -t ext2 /dev/fd0 /mnt

montara el disquete en /dev/fd0 en el directorio /mnt. Ahora todos los ficheros del disquete aparecerán bajo /mnt en su unidad. "-t ext2" especifica el tipo de sistema de ficheros como ext2fs. Si crea otro tipo de sistema de ficheros en el disquete, necesitara especificárselo al comando mount.
El "punto de montaje" (el directorio donde esta montando el sistema de ficheros) debe existir en el momento de utilizar el comando mount. Si no existiese, deba crearlo con el comando mkdir.
Para mas información sobre sistemas de ficheros, montaje y puntos de montaje, ver sección 4.8.3 Tenga en cuenta que cualquier entrada/salida al disquete se gestiona con buffers igual que si fuese de disco duro. Si cambia datos en el disquete, puede que no vea encenderse la luz de la unidad hasta que el núcleo decida vaciar sus buffers. Es importante que no quite un disquete antes de haberlo desmontado; esto puede hacerse con el comando

# umount /dev/fd0

No cambie los disquetes como se hace en un sistema MS-DOS; siempre que cambie disquetes, desmonte umount el primero y monte mount el siguiente.

4.7 Actualizando e Instalando Nuevo Software
Anterior- Siguiente - Índice

Otra tarea del administrador de sistemas es la actualización e instalación de nuevo software.
La comunidad Linux es muy dinámica. Las versiones nuevas del núcleo aparecen cada pocas semanas, y otros programas se actualizan casi tan a menudo. Por esto, los nuevos usuarios de Linux sienten a menudo la necesidad de actualizar sus sistemas constantemente para mantener el paso de los cambios. No solo esto no es necesario, sino que es una perdida de tiempo. Para mantenerse al di a de todos los cambios del mundo Linux, debería utilizar todo su tiempo actualizando en vez de usando su sistema.
Pero entonces, ¿cuando se debe actualizar?. Alguna gente piensa que se debe actualizar cuando se libera una nueva versión de distribución, por ejemplo, cuando Slackware presenta una nueva versión. Muchos usuarios Linux reinstalan completamente sus sistemas con la nueva versión Slackware, cada vez. Esto, también, es una perdida de tiempo. En general, los cambios de las versiones Slackware son pequeños. Bajarse y reinstalar 30 discos cuando solo ha cambiado un 10% del software es, por supuesto, inútil.
La mejor forma de actualizar su sistema es haciéndolo a mano: actualizando solo aquellos paquetes de software que sepa que hay que actualizar. Esto asusta a un montón de gente: quieren saber que actualizar y como, y que se romperá si no actualizan. Para tener éxito con Linux, es importante superar los temores del "hágalo usted mismo", que es lo que Linux es, a fin de cuentas.
De hecho, una vez que tenga su sistema trabajando y todo el software correctamente configurado, la reinstalación de una nueva versión no dudara en limpiar toda la configuración y todo estará roto otra vez, igual que la primera vez que instalo su sistema. Volver atrás de esta forma no es necesario, todo lo que se necesita es algún conocimiento acerca de como actualizar el sistema y de cómo hacerlo bien.
Se encontrara con que cuando actualice un componente de su sistema, no tienen por que fallar los demás. Por ejemplo, la mayor parte del software de mi sistema se quedo en una instalación antigua basada en el nivel 0.96 MCC Interim. Ciertamente, utilizo la versión mas reciente del núcleo y de las librerías con este software sin problemas. Realmente, la actualización insensata para "mantenerse en la ola" no es tan importante. Esto no es MS-DOS o Microsoft Windows. No hay ninguna razón importante para ejecutar la versión mas reciente de todo el software. Si encuentra que desea o necesita funciones de una versión nueva, entonces actualice. Si no, no lo haga. En otras palabras, actualice solo lo que tenga que hacerlo y cuando tenga que hacerlo. No actualice solo por el mero hecho de actualizar. Hacerlo solo gastaría un montón de tiempo y esfuerzo intentando mantenerse al día.
El software mas importante para actualizar en su sistema es el núcleo, las librerías y el compilador gcc. Estas son las tres partes esenciales de su sistema, y en algunos casos cada uno depende de las otras para que todo funcione bien. La mayor parte del resto del software de su sistema no necesita ser actualizado periódicamente.

4.7.1 Actualizando el núcleo
Anterior- Siguiente - Índice

Actualizar el núcleo es simplemente asunto de coger los fuentes y compilarlos uno mismo. Debe compilar el núcleo por si mismo para poder activar o desactivar ciertas funciones, además de asegurarse de que el núcleo estará optimizado para correr en su maquina. El proceso es casi indoloro.
Los fuentes del núcleo pueden obtenerse de cualquiera de los servidores FTP de Linux (para una lista, véase Apéndice C). En sunsite.unc.edu, por ejemplo, los fuentes del núcleo se encuentran en /pub/Linux/kernel. Las versiones del núcleo se numeran utilizando un numero de versión y un nivel de "parche". Por ejemplo, la versión de núcleo 0.99, nivel de parche 11 es nombrada como 0.99.pl11, o simplemente 0.99.11.
Los fuentes del núcleo se presentan en un fichero tar comprimido con gzip3. Por ejemplo, el fichero conteniendo los fuentes del núcleo 0.99.pl11 es linux-0.99.11.tar.gz.
Se desempaqueta este fichero tar desde el directorio /usr/src; esto crea el directorio /usr/src/linux que contiene los fuentes del núcleo. Se debe borrar o cambiar de nombre el directorio /usr/src/linux existente antes de desempaquetar la nueva versión.
Una vez que se han desempaquetado los fuentes, es necesario asegurarse que dos enlaces simbólicos son correctos. Para crear estos enlaces, se utilizan los comandos:

_____________________________________________

3 A menudo, se suministra un fichero de parches para la versión actual del núcleo, que permite parchear los fuentes actuales desde el nivel anterior al actual (utilizando el programa patch). En muchos casos, sin embargo, es normalmente mas sencillo el instalar la nueva versión de los fuentes del núcleo completa.

# ln -sf /usr/src/linux/include/linux /usr/include/linux
# ln -sf /usr/src/linux/include/asm /usr/include/asm

Una vez creados estos enlaces una vez, no hay razón para crearlos de nuevo cuando se instale la siguiente versión de los fuentes del núcleo. (Véase sección 3.10 para mas información sobre enlaces simbólicos.)
Hay que advertir, que para poder compilar el núcleo, se debe tener gcc y g++, compiladores C y C++, instalados en el sistema. Puede necesitar tener la versión mas reciente de estos compiladores: ver sección 4.7.3, mas adelante, para mas información.
Para compilar el núcleo, primero cambie de directorio usando cd a /usr/src/linux. Ejecute el comando make config. Este comando le ira preguntando por un numero de opciones de configuración, como puede ser que tipos de sistemas de ficheros se desea incluir en el nuevo núcleo.
Después, edite /usr/src/linux/Makefile. Asegúrese que la definición para ROOT_DEV sea correcta, define el dispositivo utilizado como sistema de ficheros raíz en tiempo de arranque. La definición normal es

ROOT_DEV = CURRENT

A menos que este cambiando el dispositivo raíz del sistema de ficheros, no hay razón para cambiar esto.
Después, ejecute el comando make dep para asegurar que se cumplen todas las dependencias del fuente. Este es un paso muy importante.
Finalmente, se esta listo para compilar el núcleo. El comando make Image compilara el núcleo y dejara la nueva imagen del núcleo en el fichero /usr/src/linux/Image. Alternativamente, el comando make zImage compilara una imagen comprimida del núcleo, que se descomprime a si misma en tiempo de arranque y utiliza menos espacio en el disco.
Una vez que esta el núcleo compilado, se necesita, o bien copiarlo a un disquete de arranque (con un comando como "cp Image /dev/fd0") o bien instalarlo utilizando LILO para arrancar desde el disco duro. Ver sección 4.2.2 para mas información.

4.7.2 Actualizando las librerías
Anterior- Siguiente - Índice

Como se menciono antes, la mayor parte del software del sistema esta compilado para que utilice las librerías compartidas, que contienen subrutinas comunes compartidas entre distintos programas.
Si le aparece el mensaje

Incompatible library versión

cuando se intenta ejecutar un programa, entonces necesita actualizar a la versión de las librerías que el programa requiere. Las librerías son compatible-ascendentes; esto es, un programa compilado para utilizar una versión antigua de las librerías, debe trabajar con la nueva versión de las librerías instalada. Sin embargo, lo contrario no es cierto.
La ultima versión de las librerías se puede encontrar en los servidores FTP de Linux. En sunsite.unc.edu, están disponibles en /pub/Linux/GCC. Los ficheros de "versión" que se encuentran ahí deben explicar que ficheros se necesita obtener y como instalarlos. Rápidamente, se deben coger los ficheros image-version.tar.gz y inc-version.tar.gz donde versión es la versión de las librerías a instalar, por ejemplo 4.4.1. Son ficheros tar comprimidos con gzip; el fichero image contiene las imágenes de las librerías a instalar en /lib y /usr/lib. El fichero inc contiene los ficheros de inclusión a instalar en /usr/include.
El fichero release-version.tar.gz debe explicar el método de instalación detalladamente (las instrucciones exactas varían para cada versión). En general, se necesita instalar los ficheros de librerías .a y .sa en /usr/lib. Estas son las librerías utilizadas en tiempo de compilación.
Además, los ficheros imagen de las librerías compartidas libc.so.version se instalan en /lib. Estas son las imágenes de las librerías compartidas que son cargadas en tiempo de ejecución por los programas que utilizan las librerías. Cada librería tiene un enlace simbólico utilizando el numero de versión mayor de la librería en /lib
Por ejemplo, la versión 4.4.1 de la librería libc tiene un numero de versión mayor de 4. El fichero que contiene la librería es libc.so.4.4.1. Existe un enlace simbólico del nombre libc.so.4 en /lib apuntando a este fichero. Por ejemplo, cuando se actualiza de libc.so.4.4 a libc.so.4.4.1, necesita cambiar el enlace simbólico para apuntar a la nueva versión.
3 Es muy importante que se cambie el enlace simbólico en un solo paso, como se indica mas abajo.
Si de alguna forma borrase el enlace simbólico libc.so.4, los programas que dependen del enlace (incluyendo utilidades básicas como ls y cat) dejaran de funcionar. Utilice el siguiente comando para actualizar el enlace simbólico libc.so.4 para que apunte al fichero libc.so.4.4.1:

# ln -sf /lib/libc.so.4.4.1 /lib/libc.so.4

Se necesita también cambiar el enlace simbólico libm.so.version de la misma forma. Si se esta actualizando a una versión diferente de las librerías, sustituya lo anterior con los nombres adecuados.
La nota de la versión de la librería debe explicar los detalles. (Ver sección 3.10 para mas información acerca de los enlaces simbólicos).

4.7.3 Actualizando gcc
Anterior- Siguiente - Índice

El compilador de C y C++ gcc se utiliza para compilar software en su sistema, siendo el mas importante el núcleo. La versión mas reciente de gcc se encuentra en los servidores FTP de Linux.
En sunsite.unc.edu se encuentra en el directorio /pub/Linux/GCC (junto con las librerías). Debe existir un fichero reléase para la distribución gcc detallando que ficheros se necesitan obtener y como instalarlos.

4.7.4 Actualizando otro software
Anterior- Siguiente - Índice

La actualización de otro software solo suele consistir en obtener los ficheros apropiados e instalarlos.
Mucho software para Linux se distribuye como ficheros tar comprimidos con gzip, incluyendo, ya sea fuentes, ejecutables o ambos. Si los ejecutables no se incluyen con la versión, puede ser necesario recompilarlos uno mismo; normalmente esto significa teclear make en el directorio que tiene los fuentes.
Leer el newsgroup de USENET comp.os.linux.announce en busca de anuncios de nuevas versiones de software es la mejor manera de enterarse de la aparición de nuevo software. Siempre que busque software en un servidor FTP bájese el fichero de índice ls-lR del servidor FTP y utilice grep para encontrar los ficheros en cuestión, es la forma mas simple de localizar software. Si tiene la posibilidad de utilizar archie, este puede servirle de ayuda. Si no tiene archie, puede conectarse con telnet a un servidor archie como puede ser archie.rutgers.edu, identificarse como "archie" y utilizar el comando "help". Véase Apéndice A para mas detalles.
Una fuente útil de software para Linux, son las imágenes de los discos de la distribución Slackware.
Cada disco contiene varios ficheros .tgz que son simples ficheros tar comprimidos con gzip. En vez de bajarse los discos, puede bajar solo los ficheros .tgz deseados de los directorios Slackware del servidor FTP e instalarlos directamente. Si puede ejecutar la distribución Slackware, puede utilizar el comando setup para cargar e instalar automáticamente una serie completa de discos.
Insistimos, normalmente no es una buena idea el actualizar reinstalando desde cero la versión mas reciente de Slackware, u otra distribución. Si se reinstala de esta forma, no lo dude, arruinara su instalación actual. La mejor forma de actualizar software es por partes; esto es, si hay un programa que se usa a menudo y tiene una nueva versión, actualícelo. Si no, no se moleste. Regla practica: Si no tiene nada roto, no lo repare. Si su software actual funciona, no hay motivo para actualizar.

4.8 Gestionando Sistemas de Ficheros
Anterior- Siguiente - Índice

Otra tarea del administrador de sistemas es el cuidado de los sistemas de ficheros. Mucho de este trabajo se basa en comprobaciones periódicas del sistema de ficheros en busca de ficheros dañados o corrompidos; muchos sistemas comprueban automáticamente los sistemas de ficheros en tiempo de arranque.

4.8.1 Montando sistemas de ficheros
Anterior- Siguiente - Índice

Para empezar, algunos conceptos acerca de sistemas de ficheros. Antes de que un sistema de ficheros sea accesible al sistema, debe ser montado en algún directorio. Por ejemplo, si se tiene un sistema de ficheros en un disquete, se debe montar bajo algún directorio, digamos /mnt, para poder acceder a los ficheros que contiene (véase la sección 4.6.2). Tras montar el sistema de ficheros, todos los ficheros en dicho sistema aparecen en ese directorio. Tras desmontar el sistema de ficheros, el directorio (en este caso, /mnt) estará vacío.
Lo mismo es valido para los sistemas de ficheros del disco duro. El sistema monta automáticamente los sistemas de ficheros del disco duro en tiempo de arranque. El así llamado "sistema de ficheros raíz" es montado en el directorio /. Si se tiene un sistema de ficheros separado para /usr, por ejemplo, se monta en /usr. Si solo se tiene un sistema de ficheros raíz, todos los ficheros (incluyendo los de /usr) existen en ese sistema de ficheros.
El comando mount se utiliza para montar un sistema de ficheros. El comando

mount -av

se ejecuta desde el fichero /etc/rc (que es el fichero de inicialización del sistema, ejecutado en tiempo de arranque; véase la sección 4.10.1). El comando mount -av obtiene información de los sistemas de ficheros y puntos de montaje del fichero /etc/fstab. Este es un ejemplo de fichero fstab:

# dispositivo directorio tipo opciones
/dev/hda2 / ext2 defaults
/dev/hda3 /usr ext2 defaults
/dev/hda4 none swap sw
/proc /proc proc none

El primer campo es el dispositivo, el nombre de la partición a montar. El segundo campo es el punto de montaje. El tercero es el tipo de sistema de ficheros, como puede ser ext2 (para ext2fs) o minix (para sistemas de ficheros Minix). La tabla 4.1 lista los distintos tipos de sistemas de ficheros disponibles en Linux.4 Puede que no todos estos tipos de sistemas de ficheros estén disponibles en su sistema; el núcleo debe tener soporte para ellos compilado en el. Véase sección 4.7 para información sobre como construir un núcleo.

Sistema de ficheros

Nombre de tipo

Comentarios

Second Extended Filesystem

ext2

Sistema de ficheros mas común en Linux.

Extended Filesystem

ext

Reemplazado por ext2.

Minix Filesystem

minix

Sistema de ficheros Minix original; pocas veces usado.

Xia Filesystem

xia

Como ext2, pero raras veces usado.

UMSDOS Filesystem

umsdos

Usado para instalar Linux en una partición MS-DOS.

MS-DOS Filesystem

msdos

Utilizado para acceder a ficheros MS-DOS.

/proc Fliesystem

proc

Suministra información de proceso para ps, etc.

ISO 9660 Filesystem

iso9660

Formato utilizado por muchos CD-ROMs.

Xenix Filesystem

xenix

Sistema de ficheros Xenix.

System V Filesystem

sysv

Variantes del System V para el x86.

Coherent Filesystem

coherent

Acceso a ficheros de Coherent.

HPFS Filesystem

hpfs

Acceso en lectura a particiones HPFS (DoubleSpace)

Tabla 4.1: Tipos de Sistemas de Ficheros en Linux
El ultimo campo del fichero fstab contiene las opciones del comando mount, normalmente, esta puesto a "defaults" (defecto).
Como se puede ver, las particiones de intercambio están incluidas en /etc/fstab también. Tienen un punto de montaje de none y tipo swap. El comando swapon -a, que se ejecuta también desde /etc/rc, se utiliza para activar el intercambio en todos los dispositivos de intercambio listados en /etc/fstab.

__________________________________

4 Esta tabla es valida a la versión de núcleo 1.1.37.
El fichero fstab contiene una entrada especial para el sistema de ficheros /proc. Tal y como se menciono en la sección 3.11.1, el sistema de ficheros /proc se utiliza para almacenar información acerca de los procesos del sistema, memoria disponible, y otros datos del mismo tipo. Si /proc no esta montado, no funcionaran comandos como ps.
3 El comando mount solo puede ser utilizado por root. Esto es así para garantizar la seguridad del sistema; no es deseable que usuarios normales estén montando y desmontando sistemas de ficheros a su antojo. Existen varios paquetes disponibles que permiten a los usuarios normales montar y desmontar sistemas de ficheros (disquetes en particular) sin comprometer la seguridad del sistema.
El comando mount -av realmente monta todos los sistemas de ficheros excepto el sistema de ficheros raíz (en la tabla anterior, /dev/hda2). El sistema de ficheros raíz es montado automáticamente en tiempo de arranque por el núcleo.
En vez de utilizar el comando mount -av, se puede montar un sistema de ficheros a mano. El comando

# mount -t ext2 /dev/hda3 /usr

es equivalente a montar el sistema de ficheros con la entrada /dev/hda3 del ejemplo de fichero fstab anterior.
En general, nunca se debe montar o desmontar sistemas de ficheros a mano. El comando mount -av en /etc/rc se encarga de montar los sistemas de ficheros en tiempo de arranque. Los sistemas de ficheros son desmontados por los comandos shutdown o halt antes de cerrar el sistema.

4.8.2 Comprobando sistemas de ficheros
Anterior- Siguiente - Índice

Normalmente es una buena idea el comprobar de vez en cuando los sistemas de ficheros en busca de ficheros dañados o corrompidos. Algunos sistemas comprueban automáticamente sus sistemas de ficheros en tiempo de arranque (con los comandos apropiados en /etc/rc).
El comando utilizado para comprobar un sistema de ficheros depende del tipo de sistema de ficheros en cuestión. Para sistemas de ficheros ext2fs (el tipo mas utilizado normalmente), el comando es e2fsck. Por ejemplo, el comando

# e2fsck -av /dev/hda2

comprobara el sistema de ficheros ext2fs de /dev/hda2 y corregirá automáticamente cualquier error.
Normalmente es una buena idea el desmontar un sistema de ficheros antes de comprobarlo. Por ejemplo, el comando

# umount /dev/hda2

desmontara el sistema de ficheros en /dev/hda2, tras lo cual podrá ser comprobado. La única excepción es que no se puede desmontar el sistema de ficheros raíz. Para poder comprobar el sistema de ficheros raíz cuando esta desmontado, se debe utilizar un disquete de arranque/raíz (véase la sección 4.11.1). Tampoco se puede desmontar un sistema de ficheros si alguno de sus ficheros esta "ocupado", esto es, siendo utilizado por un proceso en ejecución. Por ejemplo, no se puede desmontar un sistema de ficheros si el directorio de trabajo de algún usuario esta en ese sistema de ficheros. Se recibirá un error "Device busy" (dispositivo ocupado) si se intenta desmontar un sistema de ficheros que este en uso.
Otros tipos de sistemas de ficheros utilizan formas diferentes del comando e2fsck, como pueda ser efsck y xfsck. En algunos sistemas, se puede utilizar el comando fsck, que determina el tipo de sistema de ficheros y ejecuta el comando apropiado.
3 Es importante que se reinicialice el sistema inmediatamente después de comprobar un sistema de ficheros montado, si es que se hizo alguna corrección al sistema de ficheros. (Sin embargo, en general, no se deben comprobar sistemas de ficheros que estén montados.) Por ejemplo, si e2fsck informa que ha corregido algún error en el sistema de ficheros, se debe apagar el sistema con shutdown -r para rearrancarlo. Esto permite al sistema resincronizar su información acerca del sistema de ficheros cuando e2fsck lo modifica.
El sistema de ficheros /proc no necesita nunca ser comprobado de esta forma. /proc es un sistema de ficheros en memoria, gestionado directamente por el núcleo.

4.9 Utilizando un fichero de intercambio
Anterior- Siguiente - Índice

En vez de reservar una partición individual para espacio de intercambio, se puede usar un fichero.
Sin embargo, hay que instalar todo Linux y hacer todas las tareas de configuración antes de crear el fichero de intercambio.
Si tiene un sistema Linux instalado, puede utilizar los siguientes comandos para crear un fichero de intercambio. A continuación vamos a crear un fichero de intercambio de 8208 bloques de tamaño (unos 8 megas).

# dd if=/dev/zero of=/swap bs=1024 count=8208

Este comando crea el fichero de intercambio propiamente dicho. Reemplace "count=" con el tamaño del fichero de intercambio en bloques.

# mkswap /swap 8208

Este comando inicializará el fichero de intercambio swap; como antes, se debe cambiar el nombre y tamaño del fichero de intercambio a los valores apropiados.

# /etc/sync
# swapon /swap

Ahora, tras sincronizar, lo que asegura que el fichero haya sido escrito a disco, ya estamos utilizando el fichero /swap que habíamos creado como fichero de intercambio.
El principal inconveniente de utilizar un fichero de intercambio de esta forma es que todos los accesos al fichero de intercambio se realizan a través del sistema de ficheros. Esto significa que los bloques que forman el fichero de intercambio pueden no ser contiguos. Por esto, el rendimiento no puede ser tan alto como cuando se utiliza una partición de intercambio, en la que los bloques están siempre contiguos y las peticiones de entrada/salida se hacen directamente al dispositivo.
Otra desventaja a la hora de utilizar un fichero de intercambio es la posibilidad de corromper los datos del sistema de ficheros _cuando se utilizan grandes ficheros de intercambio, existe la posibilidad de que se pueda corromper el sistema de ficheros si algo va mal. Manteniendo los sistemas de ficheros y particiones de intercambio separados prevendrá la posibilidad de que esto llegue a ocurrir.
La utilización de un fichero de intercambio puede ser muy útil si se tiene una necesidad temporal de mas espacio de intercambio. Por ejemplo, si se esta compilando un gran programa y se quiere acelerar las cosas, se puede crear un fichero de intercambio de forma temporal y utilizarlo conjuntamente con el espacio habitual de intercambio.
Para eliminar un fichero de intercambio, primero se usa swapoff de esta forma

# swapoff /swap

Y ahora se puede borrar de forma segura el fichero.

# rm /swap

Recuerde que cada fichero de intercambio (o partición) puede ser de hasta 16 megabytes, pero se pueden usar hasta 8 ficheros o particiones de intercambio en un sistema.

4.10 Tareas Varias
Anterior- Siguiente - Índice

Lo crea o no, hay un numero de tareas domesticas para el administrador de sistemas que no caen en ninguna categoría principal.

4.10.1 Ficheros de arranque del sistema
Anterior- Siguiente - Índice

Cuando el sistema arranca, se ejecutan automáticamente una serie de ficheros de comandos (scripts) en el sistema, antes de que ningún usuario entre. Aquí tenemos una descripción de lo que ocurre:
En tiempo de arranque, el núcleo arranca el proceso /etc/init. init es un programa que lee su fichero de configuración, /etc/inittab, y arranca otros procesos basados en el contenido de este fichero. Uno de los procesos mas importantes arrancado desde inittab es el proceso /etc/getty, arrancado en cada consola virtual. El proceso getty dispone la consola virtual para ser utilizada y arranca un proceso login en ella. Esto le permite conectarse a cada consola virtual; si /etc/inittab no contiene un proceso getty para una consola virtual determinada, no se podrá conectar nadie a ella.
Otro proceso ejecutado desde /etc/inittab es /etc/rc, el fichero de inicialización principal del sistema. Este fichero es simplemente un fichero de comandos que ejecuta cualquier comando de inicialización necesario en tiempo de arranque, como es montar los sistemas de ficheros (véase sección 4.8) e inicializar el espacio de intercambio (memoria virtual).
Su sistema puede ejecutar otros ficheros de comandos de inicialización también, como puede ser /etc/rc.local. /etc/rc.local contiene normalmente comandos de inicialización específicos de su sistema, como puede ser el establecimiento del nombre del ordenador (véase la siguiente sección).
rc.local puede ser arrancado desde /etc/rc o directamente desde /etc/inittab.

4.10.2 Estableciendo el nombre del ordenador
Anterior- Siguiente - Índice


En un entorno de red el nombre del ordenador es utilizado para identificar unívocamente una maquina particular, mientras que en un entorno autónomo, el nombre del ordenador da a la maquina personalidad y encanto. Es como darle nombre a un animal domestico: siempre puede dirigirse a su perro como "El perro", pero es mucho mas interesante asignarle al perro un nombre como "Mancha" o "Tes". Poner el nombre del sistema se limita a utilizar el comando hostname. Si se esta en una red, su nombre debe ser el nombre completo de su maquina, por ejemplo, goober.norelco.com. Si no se esta en una red de ningún tipo, se pueden escoger nombre de ordenador y de dominio arbitrarios, como por ejemplo loomer.vpizza.com, shoop.nowhere.edu, o floof.org.
Cuando se pone el nombre del ordenador, dicho nombre debe aparecer en el fichero /etc/hosts, que asigna una dirección IP a cada ordenador. Incluso si su ordenador no esta en una red, se debe incluir el nombre del ordenador en /etc/hosts.
Por ejemplo, si no se esta en una red TCP/IP, y el nombre del ordenador es floof.org, incluya la línea siguiente en /etc/hosts:

127.0.0.1 floof.org localhost

Esto asigna el nombre del ordenador, floof.org, a la dirección de bucle 127.0.0.1 (utilizada si no se esta en una red). El alias localhost se asigna también a dicha dirección.
Si se esta en una red TCP/IP, sin embargo, su dirección y nombre de ordenador real deben aparecer en /etc/hosts. Por ejemplo, si su nombre de ordenador es goober.norelco.com y su dirección IP es 128.253.154.32, añada la siguiente línea a /etc/hosts:

128.253.154.32 goober.norelco.com

Si el nombre de su ordenador no aparece en /etc/hosts no será posible establecerlo. Para establecer el nombre de su ordenador, utilice el comando hostname. Por ejemplo, el comando

# hostname -S goober.norelco.com

pone el nombre del ordenador a goober.norelco.com. En muchos casos, el comando hostname se ejecuta en alguno de los ficheros de inicialización del sistema, como puede ser /etc/rc o /etc/rc.local. Edite estos ficheros y cambie el comando hostname existente para poner su propio nombre de ordenador; al rearrancar el sistema, el nombre del ordenador cambiara al nuevo valor.

4.11 Que Hacer En Una Emergencia
Anterior- Siguiente - Índice

En algunas ocasiones, el administrador de sistemas se encuentra con el problema de recuperarse de un desastre completo, como puede ser el olvidarse la palabra clave del usuario raíz, o el enfrentarse con sistemas de ficheros dañados. El mejor consejo es, obrar sin pánico. Todo el mundo comete errores estúpidos, esta es la mejor forma de aprender sobre administración de sistemas: la forma difícil.
Linux no es una versión inestable de UNIX. De hecho, he tenido menos problemas con cuelgues de sistemas Linux que con versiones comerciales de UNIX en muchas plataformas. Linux también se beneficia de un fuerte complemento de asistentes que pueden ayudar a salir del agujero.
El primer paso al investigar cualquier problema es intentar arreglarlo uno mismo. Hurgue alrededor, vea como funcionan las cosas. Demasiadas veces, un administrador de sistemas pondrá un mensaje desesperado rogando ayuda antes de investigar el problema. Muchas de las veces, encontrara que arreglar problemas por uno mismo es realmente muy fácil. Este es el camino que debe seguir para convertirse en un gurú.
Hay pocos casos en los que sea necesario reinstalar el sistema desde cero. Muchos nuevos usuarios borran accidentalmente algún fichero esencial del sistema, e inmediatamente acuden a los discos de instalación. Esta no es una buena idea. Antes de tomar medidas drásticas como esa, investigar el problema y preguntar a otros ayudara a solucionar las cosas. En prácticamente todos los casos, podrá recuperar el sistema desde un disquete de mantenimiento.

4.11.1 Recuperación utilizando un disquete de mantenimiento
Anterior- Siguiente - Índice

Una herramienta indispensable para el administrador de sistemas es el llamado "disco arranque/raíz" ("boot/root disk") _un disquete desde el que se puede arrancar un sistema Linux completo, independiente del disco duro. Los discos de arranque/raíz son realmente muy simples, se crea un sistema de ficheros raíz en el disquete, se ponen todas las utilidades necesarias en el y se instala LILO y un núcleo arrancable en el disquete. Otra técnica es usar un disquete para el núcleo y otro para el sistema de ficheros raíz. En cualquier caso, el resultado es el mismo: Ejecutar un sistema Linux completamente desde disquete.
El ejemplo mas claro de un disco de arranque/raíz son los discos de arranque Slackware5. Estos disquetes contienen un núcleo arrancable y un sistema de ficheros raíz, todo en disquete. Están diseñados para usarse en la instalación de la distribución Slackware, pero vienen muy bien cuando hay que hacer mantenimiento del sistema.
El disco de arranque/raíz de H.J Lu, disponible en /pub/Linux/GCC/rootdisk en sunsite.unc.edu, es otro ejemplo de este tipo de discos de mantenimiento. O, si se es ambicioso, se puede crear uno su propio disco. En muchos casos, sin embargo, la utilización de un disco de arranque/raíz prefabricado es mucho mas simple y probablemente será mas completo.

_____________________________________________

5 Véase la sección 2.1.1 para la información sobre como obtener esta desde Internet. Para este procedimiento, no se necesita obtener la versión completa de Slackware, solo los disquetes de arranque y raíz.

La utilización de un disco de arranque/raíz es muy simple. Tan solo arranque el sistema con el disco, y haga login como root (normalmente sin password). Para poder acceder a los ficheros del disco duro, se necesitara montar el sistema de ficheros a mano. Por ejemplo, el comando

# mount -t ext2 /dev/hda2 /mnt

montara un sistema de ficheros ext2fs existente en /dev/hda2 bajo /mnt. Recuerde que / es ahora el propio disco de arranque/raíz; se necesitara montar los sistemas de ficheros de su disco duro bajo algún directorio para poder acceder a los ficheros. Por lo tanto, el fichero /etc/passwd de su disco duro es ahora /mnt/etc/passwd si se monto el sistema de ficheros raíz bajo /mnt.

4.11.2 Arreglando la password de root
Anterior- Siguiente - Índice

Si se olvida de la password de root, no hay problema. Solo hay que arrancar del disco de arranque/raíz, montar su sistema de ficheros raíz en /mnt, y eliminar el campo de password de /root en /mnt/etc/passwd, como por ejemplo:

root::0:0:root:/:/bin/sh

Ahora root no tiene password; al rearrancar desde el disco duro debería ser capaz de hacer login como root y poner la password que desee utilizando passwd.
¿No le gusto el haber aprendido a utilizar vi? En su disco de arranque/raíz probablemente no estarán disponibles otros editores como pueda ser Emacs, pero vi debería estarlo.

4.11.3 Arreglando sistemas de ficheros corrompidos
Anterior- Siguiente - Índice

Si se corrompiese de alguna forma el sistema de ficheros, se puede ejecutar e2fsck (si se usa el sistema de ficheros ext2fs, por supuesto) para corregir desde disquete cualquier dato dañado en el sistema de ficheros. Otros tipos de sistemas de ficheros utilizan diferentes formas de comando fsck; véase la Sección 4.8 para mas detalles.
Cuando se comprueba el sistema de ficheros desde disquete, es mejor que no este montado.
Una causa común de daño en un sistema de ficheros es la corrupción del super bloque. El super bloque es la "cabecera" del sistema de ficheros que contiene información acerca del estado del sistema de ficheros, tamaño, bloques libres, y demás. Si se corrompe el super bloque (por ejemplo, escribiendo accidentalmente datos directamente a la partición del sistema de ficheros), el sistema no puede reconocer nada del sistema de ficheros. Cualquier intento de montar el sistema de ficheros fallara y e2fsck no será capaz de arreglar el problema.
Felizmente, el tipo de sistema de ficheros ext2fs salva copias del super bloque en los limites de "grupos de bloques" en el disco _normalmente cada 8K bloques. Para poder decirle al e2fsck que utilice una copia del super bloque, se puede utilizar un comando tal que

# e2fsck -b 8193 <partición>

donde <partición> es la partición en la que reside el sistema de ficheros. La opción -b 8193 le dice al e2fsck que utilice la copia del super bloque almacenada en el bloque 8193 del sistema de ficheros.

4.11.4 Recuperando ficheros perdidos
Anterior- Siguiente - Índice

Si accidentalmente se borrasen ficheros importantes del sistema no habría forma de "desborrarlos".
Sin embargo, se pueden copiar los ficheros relevantes desde el disquete al disco duro. Por ejemplo, si se hubiese borrado /bin/login de su sistema (que le permite hacer login), simplemente arranque del disquete de arranque/raíz, monte el sistema de ficheros raíz en /mnt, y use el comando  

# cp -a /bin/login /mnt/bin/login

La opción -a le dice a cp que conserve los permisos en los ficheros que se están copiando. Por supuesto, si los ficheros que se borraron no fueses ficheros esenciales del sistema que tengan contrapartidas en el disquete de arranque/raíz, se habrá acabado la suerte. Si se hicieron copias de seguridad, siempre se podrá recuperar de ellas.

4.11.5 Arreglando librerías corrompidas
Anterior- Siguiente - Índice

Si accidentalmente se llegasen a corromper las librerías de enlaces simbólicos en /lib, es mas que seguro que comandos que dependan de estas librerías no vuelvan a funcionar (Véase la sección 4.7.2).
La solución mas simple es arrancar del disquete de arranque/raíz, montar el sistema de ficheros raíz y arreglar las librerías en /mnt/lib.