ANTERIOR

SIGUIENTE

MANUAL DE LINUX

4

Capítulo 4

 

 

 

 

Administración del Sistema

 

 

 

Este capítulo es una visión general de la administración de un sistema Linux, incluyendo un número

de posibilidades avanzadas que no son, necesariamente, sólo 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, sólo 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 ayudará a comprender mejor como funcionan las cosas y como se en-

samblan juntas. Al menos hojéelo para que pueda conocer qué contiene y qué tipo de ayuda puede

esperar de él.

 

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

 

 

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 éstas es la cuenta raíz, con el nombre de usuario root.

 

4.1.1 La cuenta root

 

Los usuarios normales están restringidos normalmente para que no puedan dañar a nadie más en el

sistema, sólo 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 éstos

ficheros.

 

Estas restricciones desaparecen para root. El usuario root puede leer, modificar o borrar cu-

alquier 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 nor-

mal. Por ejemplo, puede uno pensar que se está conectado como larry, cuando realmente se

está 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 intérprete 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 sólo 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

esté 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

 

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; está visto como un sabio y a la vez espantoso poder, dado sólo 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 está diseñada _para ejecutar el sistema. Existe un

código de honor no hablado entre el administrador y los usuarios del sistema. Como se sentiría

si su administrador de sistemas leyese su correo electrónico o mirase sus ficheros? Aún 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

 

La seguridad en UNIX es bastante laxa por diseño. La seguridad del sistema fue un pensamiento

posterior _el sistema se desarrolló originalmente en un entorno donde las intrusiones de un usuario

en otro eran algo inaudito. Por esto, incluso con medidas de seguridad, aún 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 más daño

que el que previene. Una de mis citas favoritas es, ñunca 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 está 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 válida. Es mejor

una simple charla con el usuario, preguntándole acerca del problema, en lugar de causar una con-

frontación. Lo último 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

 

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 esté claro. Si no lo hace, los usuarios encontrarán 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

 

No podemos decirle como ejecutar su sistema al último 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 adminis-

tradores de sistemas que conocen muy poco acerca de UNIX. Igualmente, hay muchos usuarios normales" que saben más 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 último, 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

 

 

 

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

 

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 él, 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 más 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 sí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 está 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-núcleo> <dispositivo-raíz>

 

donde <nombre-del-núcleo> es el nombre de la imagen del núcleo, y <dispositivo-raíz> 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 sólo utilice "rdev -h" para obtener un mensaje de ayuda.

Una vez puesto el dispositivo raíz, tan sólo 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

 

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 qué 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 presentará 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 presentará una lista de los sistemas operativos disponibles.

La forma más 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 lnea

boot = /dev/hda

 

# Nombre del cargador de arranque. No hay razn para cambiarlo, a menos

# que se est haciendo una modificacin sera del LILO

install = /boot/boot.b

 

# Dejemos a LILO efectuar alguna optimizacin.

compact

 

# Estrofa para la particin raz de Linux en /dev/hda1.

image = /etc/Image # Ubicacin del kernel

label = linux # Nombre del SO (para el men de aranque de LILO)

root = /dev/hda1 # Ubicacin de la particin raiz

vga = ask # Indicar al ncleo que pregunte por modos SVGA

# en tiempo de arranque

 

# Estrofa para la particin MSDOS en /dev/hda2.

other = /dev/hda2 # Ubicacin de la particin

table = /dev/hda # Ubicacin de la tabla de particin 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 arrancará LILO por defecto. Se puede seleccionar otro sistema operativo en el indicador de arranque de LILO, tal y como se indicó 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 más información sobre

LILO, incluyendo como utilizar LILO con el "OS/2's Boot Manager".

 

4.3 Cerrando el Sistema

 

 

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 esté 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 está cerrando y darles la posibilidad de desconectarse.

La forma más 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 ñow", 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 causará 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

 

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 sólo 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 quién está haciendo qué.

4.4.1 Conceptos de gestión de usuarios

 

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 número ú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 más

grupos definidos por el administrador del sistema. Más sobre ésto más 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 ñombre real" o ñombre 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, normal-

mente situado bajo /home.

 

intérprete de inicio

El intérprete de inicio del usuario es el intérprete 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:intérprete

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 símismas

como clave secreta. En otras palabras, sólo si se conoce la clave, ésta 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 suminis-

tra un grado extra de seguridad, puesto que éste no lo es. Las claves en sombra suministran algunas

otras funciones como puede ser la expiración de claves; no entraremos a detallar éstas 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 más

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 intérprete de conexión (/bin/bash), respectiva-

mente. 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

 

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 está ejecutando un

sistema con muchos usuarios, es fácil el olvidarse de algo. La manera más 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 esté instalado. Las páginas man para estos comandos deberían ser

suficientemente autoexplicatorias.

4.4.3 Borrando usuarios

 

De forma parecida, borrar usuarios puede hacerse con los comandos userdel o deluser dependiendo

de qué 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

 

evitará que kiwi se conecte.

 

4.4.4 Poniendo atributos de usuario

 

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 más simple de hacer ésto es cambiar los

valores directamente en /etc/passwd. Para poner clave a un usuario, utilice el comando passwd.

Por ejemplo,

 

 

# passwd larry

 

 

cambiará la clave de larry. Sólo root puede cambiar la clave de otro usuario de ésta 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 usuari-

os el cambiar sus atributos de nombre completo e intérprete de conexión. Si no, deben pedir al

administrador de sistemas que los cambie por ellos.

 

4.4.5 Grupos

 

Como hemos citado anteriormente, cada usuario pertenece a uno o más 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 qué 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 qué grupos se tiene acceso.

El tercer grupo, invitados, es para usuarios invitados, y otros es para "otros" usuarios. El

usuario kiwi tiene acceso a éste 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. Nor-

malmente es más sencillo añadir líneas a /etc/group uno mismo, puesto que no se necesitan más

configuraciones para añadir un grupo. Para borrar un grupo, sólo hay que borrar su entrada de

/etc/group.

 

4.5 Archivando y Comprimiendo Ficheros

 

 

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

 

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

 

empaquetará 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 dónde se deben desem-

paquetar los ficheros. Por ejemplo, digamos que se archivaron los siguientes ficheros: /etc/hosts,

/etc/group, y /etc/passwd. Si se usó 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 necesitará 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 ésto se necesitará 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 cómo 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 utilizó 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

 

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 dejará 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.

Equivaléntemente, se puede utilizar "gzip -d".

gzip es una herramienta relativamente nueva en la comunidad UNIX. Durante muchos años,

se utilizó en su lugar el comando compress. Sin embargo, debido a varios factores (1), compress se

está volviendo desfasado.

_________________________________________

(1) Estos factores incluyen una disputa por una patente software contra el algoritmo de compress y el hecho de que gzip es mucho más eficiente que compress.

_________________________________________

 

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 gzip (2). El comando uncompress se utiliza para expandir un fichero comprimido con

compress; gunzip sabe también como tratar los ficheros comprimidos con compress.

_________________________________________

(2) Para añadir más confusión, durante algún tiempo la extensión .z ("z" minúscula) fué utilizada para los ficheros comprimidos con gzip. La extensión oficial de los ficheros gzip ahora es .gz.

_________________________________________

 

4.5.3 Juntándolo todo

 

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

 

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 está 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 sería:

 

# 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 ésta 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 páginas man para obtener mas información acerca de tar y gzip.

 

4.6 Usando Disquetes y Haciendo Copias de Seguridad

 

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 más lentos y

ligéramente menos seguros).

También puede utilizar disquetes para contener sistemas de ficheros individuales _de ésta forma,

se puede montar mount el disquete para acceder a los datos contenidos en él.

 

 

 

4.6.1 Utilizando disquetes para copias de seguridad

 

La forma más 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

está lleno, tar pedirá el siguiente. El comando

 

# tar xvfzM /dev/fd0

 

puede 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 sólo se copian aquellos

ficheros que hayan sido modificados en esa semana. En este caso, si el sistema se viene abajo a

mitad de mes, sólo tiene que restaurar la última copia de seguridad mensual completa y, después, las últimas 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

 

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

 

montará 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, necesitará especificárselo al comando mount.

El "punto de montaje" (el directorio donde está 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 más información sobre sistemas de ficheros, montaje y puntos de montaje, ver sección 4.8.

_____________________

Nota 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

 

 

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 sólo ésto no es necesario, sino que es una pérdida de tiempo. Para mantenerse al

día de todos los cambios del mundo Linux, debería utilizar todo su tiempo actualizando en vez de

usando su sistema.

Pero entonces, cuándo 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 pérdida de tiempo. En general, los cambios de las versiones Slackware son pequeños. Bajarse y reinstalar 30 discos cuando sólo 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 qué actualizar y cómo, y qué 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 dudará en limpiar toda la configuración y todo estará roto

otra vez, igual que la primera vez que instaló su sistema. Volver atrás de ésta forma no es necesario

todo lo que se necesita es algún conocimiento acerca de cómo actualizar el sistema y de cómo

hacerlo bien.

Se encontrará 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 quedó en una instalación antigua

basada en el nivel 0.96 MCC Interim. Ciertamente, utilizo la versión más reciente del núcleo y de las librerías con éste 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 más 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 sólo lo que tenga que hacerlo y cuando tenga que hacerlo. No actualice sólo por el mero hecho de actualizar. Hacerlo sólo gastaría un montón de tiempo y esfuerzo intentando mantenerse al día.

El software más 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

 

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 máquina. 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 número 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 gzip (3). Por ejemplo, el

fichero conteniendo los fuentes del núcleo 0.99.pl11 es linux-0.99.11.tar.gz.

_________________________________________

(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 más sencillo el instalar la nueva versión de los fuentes del núcleo completa.

_________________________________________

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 dir-

ectorio /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óli-

cos son correctos. Para crear estos enlaces, se utilizan los comandos:

 

# 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 más 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 más reciente de estos compiladores:

ver sección 4.7.3, más adelante, para más 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 irá preguntando por un número de opciones de config-

uración, como puede ser qué 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 cor-

recta _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 esté 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 está listo para compilar el núcleo. El comando make Image compilará el núcleo

y dejará la nueva imagen del núcleo en el fichero /usr/src/linux/Image. Alternativamente, el

comando make zImage compilará una imagen comprimida del núcleo, que se descomprime a símisma en tiempo de arranque y utiliza menos espacio en el disco.

Una vez que está 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 más información.

 

4.7.2 Actualizando las librerías

 

Como se mencionó antes, la mayor parte del software del sistema está compilado para que utilice las librerías compartidas, que contienen subrutinas comunes compartidas entre distintos programas.

Si le aparece el mensaje

 

Incompatible library version

 

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 última 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 encuen-

tran ahí deben explicar qué ficheros se necesita obtener y cómo instalarlos. Rápidamente, se deben

coger los ficheros image-versión.tar.gz y inc-versión.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-versión.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.versión 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 número 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 número 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 más 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) dejarán 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.versión de la misma forma. Si se está 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 más información

acerca de los enlaces simbólicos).

 

4.7.3 Actualizando gcc

 

El compilador de C y C++ gcc se utiliza para compilar software en su sistema, siendo el más

importante el núcleo. La versión más 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 release para la distribución gcc detallando qué ficheros se necesitan obtener y

como instalarlos.

4.7.4 Actualizando otro software

 

La actualización de otro software sólo 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 más simple de localizar software. Si tiene

la posibilidad de utilizar archie, éste 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 más 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 sólo 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

más reciente de Slackware, u otra distribución. Si se reinstala de esta forma, no lo dude, arruinará 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 práctica: Si

no tiene nada roto, no lo repare. Si su software actual funciona, no hay motivo para actualizar.

 

4.8 Gestionando Sistemas de Ficheros

 

 

Otra tarea del administrador de sistemas es el cuidado de los sistemas de ficheros. Mucho de éste

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

 

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 válido para los sistemas de ficheros del disco duro. El sistema monta automática-

mente 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 sólo 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 éstos tipos de sistemas de ficheros estén disponibles en su sistema; el núcleo debe tener soporte para ellos compilado en él. Véase sección 4.7 para información sobre cómo construir un núcleo.

_________________________________________

(4) Esta tabla es válida a la versión de núcleo 1.1.37.

________________________________________________________________________________

 

 

 

 

 

__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; raras veces utilizado.

Xia Filesystem xia Como ext2, pero raras veces utilizado.

UMSDOS Filesystem umsdos Utilizado para instalar Linux en una partición MS-DOS.

MS-DOS Filesystem msdos Utilizado para acceder a ficheros MS-DOS.

/proc Filesystem 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 de 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 último campo del fichero fstab contiene las opciones del comando mount _normalmente,

está 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.

El fichero fstab contiene una entrada especial _para el sistema de ficheros /proc. Tal y como

se mencionó 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

está montado, no funcionarán comandos como ps.

 

3 El comando mount sólo 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

 

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 más utilizado normalmente), el comando es e2fsck. Por ejemplo, el comando

 

# e2fsck -av /dev/hda2

 

comprobará 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

 

desmontará 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 está 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 está "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 está en ese sistema de ficheros. Se recibirá un error "Device busy" (dispositivo ocupado) si se intenta desmontar un sistema de ficheros que esté 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

 

 

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 intecambio 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 ésta 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 más espacio de intercambio. Por ejemplo, si se está 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

 

Recuérde 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

 

Lo crea o no, hay un número de tareas domésticas para el administrador de sistemas que no caen en

ninguna categoría principal.

 

4.10.1 Ficheros de arranque del sistema

 

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 más 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

 

En un entorno de red el nombre del ordenador es utilizado para identificar unívocamente una máquina

particular, mientras que en un entorno autónomo, el nombre del ordenador da a la máquina person-

alidad y encanto. Es como darle nombre a un animal doméstico: siempre puede dirigirse a su perro

como "El perro", pero es mucho más interesante asignarle al perro un nombre como "Mancha" o

"Tes". Poner el nombre del sistema se limita a utilizar el comando hostname. Si se está en una red,

su nombre debe ser el nombre completo de su máquina, por ejemplo, goober.norelco.com. Si no

se está 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 está en una red, se debe

incluir el nombre del ordenador en /etc/hosts.

 

Por ejemplo, si no se está 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

está en una red). El alias localhost se asigna también a dicha dirección.

 

Si se está 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

ó /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 cambiará al nuevo

valor.

 

4.11 Qué Hacer En Una Emergencia

 

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 _ésta 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 cómo funcionan las cosas. Demasiadas veces, un administrador de sistemas pon-

drá un mensaje desesperado rogando ayuda antes de investigar el problema. Muchas de las veces,

encontrará 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 ayudará 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

 

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 él 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 más claro de un disco de arranque/raíz son los discos de arranque Slackware (5). 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.

_________________________________________

(5) Véase la sección 2.1.1 para la información sobre cómo obtener ésta desde Internet. Para este procedimiento, no se necesita obtener la versión completa de Slackware _solo los disquetes de arranque y raíz.

________________________________________________________________________________

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 ambi-

cioso, 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 más simple y probablemente será más completo.

La utilización de un disco de arranque/raíz es muy simple. Tan sólo arranque el sistema con el

disco, y haga login como root (normalmente sin password). Para poder acceder a los ficheros del

disco duro, se necesitará montar el sistema de ficheros a mano. Por ejemplo, el comando

 

# mount -t ext2 /dev/hda2 /mnt

 

montará un sistema de ficheros ext2fs existente en /dev/hda2 bajo /mnt. Recuerde que / es ahora

el propio disco de arranque/raíz; se necesitará 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 montó el sistema de ficheros raíz bajo /mnt.

4.11.2 Arreglando la password de root

 

Si se olvida de la password de root, no hay problema. Sólo hay que arrancar del disco de ar-

ranque/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 gustó 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

 

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 más detalles.

Cuando se comprueba el sistema de ficheros desde disquete, es mejor que no esté 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

fallará y e2fsck no será capaz de arreglar el problema.

Felizmente, el tipo de sistema de ficheros ext2fs salva copias del super bloque en los límites 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

 

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

 

Si accidentalmente se llegasen a corromper las librerías de enlaces simbólicos en /lib, es más 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 más simple es arrancar del disquete de arranque/raíz, montar el sistema de ficheros raíz y arreglar las librerías en /mnt/lib.

 

 

ANTERIOR

SIGUIENTE