BLOQUE IV. ADMINISTRACION DEL SISTEMA UNIX
1. Tareas administrativas básicas
Los comandos y archivos relativos a la administración del sistema varía de una versión a otra del UNIX, pero la filosofía es siempre la misma. A continuación se verá la administración en UNIX System V Release 4 (SVR4) como ejemplo de administración de UNIX, los pasos a seguir son prácticamente los mismos para cualquier otra versión.
El kernel inicializa sus estructuras de datos internas, monta el sistema de archivos principal y prepara el entorno para el proceso 0. Una vez preparado el entorno, el sistema comienza a ejecutarse como el proceso 0; luego se bifurca (se desdobla con la llamada al sistema fork) creando un nuevo proceso, el proceso 1. El proceso 0 se convierte en el proceso swapper (intercambiador) que será el encargado de manejar la asignación de espacio de direccionamiento entre la memoria principal y los dispositivos de swap. El proceso 0 o proceso swapper se ejecutará en modo kernel.
Por otra parte, el proceso 1 realiza varias inicializaciones y pasa a ejecutarse en modo usuario. Luego ejecuta el programa /usr/etc/init. Al proceso 1 se le llama normalmente como el proceso init porque es el responsable de la inicialización de nuevos procesos; o dicho de otra forma, todos los procesos en el sistema, excepto el proceso swapper, descienden del proceso init.
El proceso init es un proceso dispatcher (despachador) y produce, entre otros, los procesos para que los usuarios puedan conectarse al sistema. Normalmente ejecuta la secuencia de órdenes del script /etc/rc.boot para comprobar los sistemas de archivos y posteriormente ejecuta las órdenes del etc/rc y /etc/rc.local para comenzar las operaciones de multiusuario; en otro caso, se comenzaría en modo monousuario.
En operaciones de multiusuario, el papel de init es crear un proceso por cada puerto del terminal en el cuál un usuario pueda conectarse. Para iniciar estas operaciones, lee el archivo /etc/ttytab y ejecuta, normalmente, la orden /usr/etc/getty por cada terminal especificado en el archivo que tenga el campo de status a on. getty abre e inicializa la línea del terminal y ejecuta la orden login para permitir la conexión de usuarios. Básicamente, la orden login actualiza los archivos de accounting, imprime el mensaje del día, informa de la existencia de algún correo y muestra la fecha de la última conexión. Por último, login inicia un intérprete de órdenes basándose en las especificaciones encontradas en el archivo /etc/passwd.
Cuando se abandona el shell, el proceso init elimina la entrada apropiada del archivo /etc/utmp, el cuál registra los usuarios actuales, y realiza una entrada en el archivo /etc/wtmp, el cuál contiene un histórico de las conexiones y desconexiones.
Los procesos en un sistema UNIX pueden ser procesos de usuario, procesos daemon o procesos del kernel. Los procesos de usuarios, la mayoría, se asocian con usuarios de un terminal. Los procesos daemon no se asocian con ningún usuario pero hace funciones del sistema, tales como la administración y control de redes, ejecución de actividades dependientes del tiempo, spooling de impresión, etc... Los procesos daemon se ejecutan en modo usuario.
Los procesos del kernel se ejecutan sólo en modo kernel. Son creados por el proceso 0 antes de que éste se convierta en el proceso swapper. Los procesos del kernel son similares a los procesos daemon (proporcionan servicios del sistema) pero ellos tienen un mayor control sobre las prioridades de ejecución ya que su código es parte del kernel. Ellos pueden acceder a algoritmos del kernel y a estructuras de datos directamente sin tener que usar llamadas al sistema; por ello son extremadamente potentes. Sin embargo no son tan flexibles como los procesos daemon, porque el núcleo del sistema operativo debe ser recompilado para poder cambiarlos.
La ejecución de este procedimiento puede variar ligeramente dependiendo de que el sistema esté en modo multiusuario o monousuario. En el primer caso es conveniente comprobar si hay algún usuario conectado al sistema. Si hay alguien trabajando deberá notificársele la situación y concederle un tiempo para que pueda cerrar sus archivos y hacer logoff. A continuación puede lanzarse el proceso shutdown.
Para que se pueda ejecutar el proceso shutdown, es necesario tener privilegios de administrador y estar posicionado en el directorio raíz. Una vez ejecutado el proceso, aparecerá un mensaje indicando que ya se puede desconectar la máquina.
Normalmente, cada partición se utiliza como un sistema de archivos, sin embargo también pueden utilizarse para otros propósitos, como el área de swap.
En un sistema que disponga de varios discos físicos se denomina disco primario al que contiene el directorio raíz. Las particiones del disco primario se crean durante la instalación del sistema operativo.
Aparte de estos tipos de sistemas de archivos que se asocian a particiones de disco, existen otros sistemas de archivos virtuales, de uso interno del sistema, que quedan residentes en memoria.
Dado que comandos genéricos trabajan sobre cualquier tipo de sistema de archivos, es necesario que se les suministre una información específica. Esta información puede ser proporcionada explícitamente desde la línea de comandos o implícitamente desde la tabla de sistemas de archivos (/etc/vfstab). Este archivo contiene entradas para los sistemas de archivos que se pueden montar en el sistema. Cada entrada consta de una línea de la forma siguiente:
especial carácter p.montaje tipo pasos automont. opcióndonde:
especial | Nombre del archivo especial tipo bloque asociado a la partición. |
carácter | Archivo especial tipo carácter que corresponde a la partición. Si no es utilizable se usa el de tipo bloque. En caso de que no sea un dispositivo aplicable se pone un "-". |
p.montaje | Nombre del directorio punto de montaje de ese sistema de archivos. |
tipo | Tipo de sistema de archivos creado en la partición. |
pasos | Este número indica el número de pasos de comprobación que realiza el comando fsck (file system check) automáticamente (durante la carga). Un guión "-" en este campo indica que no se realizará comprobación automática. |
automont. | Indica si se realizará automáticamente el montaje de ese sistema de archivos desde los scripts de inicialización del sistema (durante la carga). |
opción | Opciones utilizadas cuando se monta el sistema de archivos. |
En caso de que en este archivo aparezca una línea que
comience por #, será tomada como comentario.
3.6 Area de desplazamiento (swap):
Dado que pertenece al primer disco, que es formateado y construidas sus particiones durante el proceso de instalación, la reconfiguración del espacio destinado a este área implica una tarea complicada (copias de seguridad de todos los sistemas de archivos del disco, nueva instalación, etc.). Para evitarlo, dentro de lo posible, se ha proporcionado la posibilidad de asignar y liberar recursos de disco, de forma dinámica al área de swap.
Resumiendo, cada usuario puede tener especificados límites (hard y soft) para la utilización de bloques y de i-nodos. También puede definirse un límite de tiempo, que se aplica a todos los usuarios del sistema de archivos, indicando durante cuanto tiempo puede excederse el límite soft. Puede especificarse un límite de tiempo diferentes para cada sistema de archivos. Además, los usuarios pueden tener diferentes límites en diferentes sistemas de archivos.
Para que un usuario pueda acceder al sistema, debe estar previamente registrado ante el mismo. Esta tarea, realizada por el administrador del sistema, afecta a tres archivos: /etc/passwd, /etc/shadow y /etc/group. Sin embargo, estos archivos no deben ser editados directamente, para evitar errores que los corrompan, pues son críticos para el acceso al sistema. Por tanto, el registro de usuarios se realiza por medio de un conjunto de utilidades suministradas con el sistema.
En este archivo existe una línea por cada usuario registrado ante el sistema. Cada registro consta de siete campos, separados por el carácter ":" de la siguiente forma:
usuario:contraseña:user-id:group-id:comentario:directorio:shellcon el significado siguiente:
usuario | Nombre con el que puede identificarse un usuario cuando el sistema el login a un terminal. |
contraseña | En versiones anteriores, en este campo se almacenaba la contraseña de acceso del usuario, en forma encriptada. Actualmente contiene un carácter "x" y la contraseña y sus características están en el archivo /etc/shadow. |
user-id | Número asignado al usuario para identificarlo internamente. Este número es utilizado por el sistema para efectuar los controles de propiedad de archivos y subdirectorios. Los números más bajos quedan reservados para los usuarios con privilegios de administrador. |
group-id | Número que identifica el grupo al que se asocia ese usuario. Debe tener una correspondencia con el archivo /etc/group. Afectará a los permisos de acceso a archivos a nivel de grupo. |
comentario | Normalmente contiene información sobre el propietario del login, como puede ser su nombre completo, su dirección, etc. |
directorio | Ruta completa del directorio HOME, en el que sitúa al usuario cuando tanto el identificativo como la contraseña son correctos. |
shell | Nombre completo del proceso que se arrancará automáticamente para el usuario cuando se identifica. Aunque puede ser cualquier programa ejecutable, normalmente será un intérprete de comandos (shell). |
usuario:contraseña:cambio:mínimo:máximo:aviso:inactividad:expiración:flagdonde cada campo adquiere el siguiente significado:
usuario | Nombre del usuario al que corresponde la información que va a continuación. Debe coincidir con un usuario registrado en el /etc/passwd. |
contraseña | Este campo contiene la contraseña puesta por el usuario después de ser encriptada por un algoritmo. Ocupa un total de trece caracteres. Sin embargo, si se acaba de crear el usuario puede aparecer vacío para indica que no tiene contraseña. |
cambio | Cantidad de días que han pasado desde el 1 de Enero de 1970 hasta la fecha del último cambio de la contraseña. Se utiliza como base de cálculos para los campos siguientes. |
mínimo | Cantidad de días, a partir desde el último cambio de contraseña en que el usuario no puede volver a cambiarla. |
máximo | Cantidad máxima de días, desde el último cambio de contraseña, en que ésta es válida. Pasado este tiempo el usuario se verá obligado a volver a cambiarla. |
aviso | Cantidad de días antes de llegar a máximo, en que el sistema avisa de que hay que cambiar la contraseña. |
inactividad | Máximo de días de inactividad permitidos al usuario. En caso de que se exceda ese número de días el sistema dé de baja al mismo. |
expiración | Fecha, en absoluto, a partir de la cual no puede utilizarse ese identificativo de usuario. |
flag | Está reservado para uso futuro. Actualmente aparece siempre en blanco. |
grupo:contraseña:group-id:usuariosdonde cada campo tiene el siguiente significado:
grupo | Nombre asignado a ese grupo. |
contraseña | Contiene la contraseña encriptada de grupo. En versiones modernas de UNIX este campo no se utiliza pero se mantiene en blanco por compatibilidad con versiones antiguas. |
group-id | Número que identifica al grupo internamente para el sistema. Se utiliza para comprobar los permisos al nivel de grupo. |
usuarios | Lista con los nombres de los usuarios (que aparecen en /etc/passwd) que están asignados a cada grupo. Aparecen separados por comas. Un mismo usuario puede estar asignado simultáneamente a varios grupos, pero el principal será aquel que figura en el campo correspondiente de /etc/passwd. No es necesario incluirse en el grupo en el que se creó un usuario. |
Con este objetivo existen el archivo /etc/profile y un
archivo .profile en el directorio Home de cada usuario.
4.5.1 Archivo /etc/profile:
Una vez que el usuario se identifica correctamente, se ejecuta de forma automática el shellscript contenido en este archivo. Dado de que este contenido es el mismo para todos los usuarios, permite crear el entorno general.
Durante la ejecución de este shellscript se pueden efectuar una serie de operaciones de interés general para los usuarios, tales como:
El archivo /etc/profile, es de propiedad del administrador y,
por lo tanto, puede ser modificado cuando lo desee para eliminar aquello que no le guste o para
añadir todo lo que quiera que se ejecute cada vez que se identifica un usuario.
4.5.2 Archivo $HOME/.profile:
Este archivo se crea en el directorio Home del usuario cuando es añadido al sistema. Normalmente se copia desde el existente en /etc/skel. El archivo .profile, salvo que así lo disponga el administrador, es de propiedad del usuario y por lo tanto cada uno puede modificarlo a su gusto para crearse su entorno individual.
Por otro lado suele ser normal que usuarios inexpertos del sistema, creen archivos para hacer pruebas y después no los borren, ocupando innecesariamente grandes espacios de disco.
Estas son las características del spool de impresión:
Para realizar la configuración de una impresora es necesario parar este planificador. Al parar el servicio de impresión, todas las impresoras que estén funcionando pararán, reanudándose la impresión cuando vuelva a arrancarse.
Al configurar una impresora se suministra el nombre que se desea dar a la impresora (el nombre lógico), el archivo especial asociado a la puerta en que se conecta la impresora (ya sea serie o paralelo), el archivo de interface, etc. Después de configurarla hay que arrancar el spool de impresión, indicar a la impresora que acepte solicitudes de impresión y activarla.
Se puede configurar una impresora como default printer (impresora por defecto), a la que irán todas las solicitudes que no incluyan una especificación de impresora.
Por una parte puede impedirse el acceso de determinados usuarios a una impresora concreta.
Otra forma de controlar a los usuarios es proporcionarles una limitación a las prioridades que adquieren las solicitudes realizadas. Cuando un usuario realiza una petición de impresión, el sistema le asigna una prioridad entre 0 (la más alta) y 39 (la más baja), por defecto se le asigna el valor 20. El usuario puede variar la prioridad de una solicitud por lo que puede ser conveniente el limitarle los valores en que puede moverse.
El administrador, o un administrador del sistema de spool de impresión, puede en cualquier momento cambiar la prioridad de una solicitud realizada por un usuario.
La preparación del formato incluye especificar detalles como longitud y anchura de papel, cantidad de líneas por pulgada, caracteres por pulgada, tipo de cinta entintada, etc.
Hay que tener en cuenta que ésto es diferente al caso en que se desea ejecutar un proceso o procesos determinados en un día y hora concreta, pero una sóla vez, tarea que se realiza con medio del comando at.
Aunque diferentes casos, ambos son manejados por el mismo sistema del UNIX, el proceso cron (cronómetro del sistema).
Un proceso daemon es arrancado por el sistema para realizar tareas rutinarias que no necesitan ningún tipo de supervisión, y que continúa ejecutándose mientras el sistema esté trabajando, aunque no haya ningún usuario activo.
El sistema cron planifica la ejecución de programas previamente planificados por el administrador o usuarios autorizados, contenidos en los archivos-tablas correspondientes.
Es un sistema especialmente útil para planificar tareas de administración que necesiten mucho tiempo para su ejecución en momentos de baja utilización del sistema. Por ejemplo para lanzar el proceso de copias de seguridad, efectuar procesos de contabilidad o manejar los archivos de log del sistema.
El proceso cron se lanza automáticamente durante el proceso de inicialización del sistema (cuando pasa a modo multiusuario).
El proceso cron analiza los archivos contenidos en el directorio /var/spool/cron/crontabs de forma periódica, para detectar los procesos a ejecutar.
Aunque normalmente este sistema es utilizado por el administrador, también puede serlo por usuarios normales, siempre y cuando estén previamente autorizados. Para ello se creará un archivo con el nombre del usuario dentro del directorio analizado por cron.
El sistema cron copia el contenido de sus archivos a memoria y lo analiza cada minuto, pero cualquier cambio realizado no será tenido en cuenta a menos que se ejecute por medio del comando crontab o el sistema sea parado y rearrancado, por esta razón no es conveniente hacer cambios directamente sobre estos archivos.
Todos los procesos ejecutados por el sistema cron, se efectúan en background.
Cada entrada o registro de estos archivos deben contener seis campos separados por espacios o tabuladores. En caso de que alguna de las líneas comience por un carácter #, será tomada por el cron como comentario y por lo tanto no ejecutada.
Formato de la entrada:
1 2 3 4 5 6Donde:
1 Minuto (0-59) 2 Hora (0-23) 3 Día del mes (1-31) 4 Mes del año (1-12) 5 Día de la semana (0=Domingo, 6=Sábado) 6 Nombre completo del archivo que contiene el proceso shell a ser ejecutado.
El último campo indica una línea de comando shell a ser ejecutado, pudiendo incluir encadenamiento de comandos, redireccionamientos, etc.
Cualquier salida por los comandos especificados, será enviada al buzón de correo del propietario del archivo cron, salvo que esté redireccionada.
Dentro de los cinco primeros campos de cada una de las entradas de los archivos cron, pueden aparecer los símbolos siguientes:
Ejemplo:
0,30 1-3 * * 5 /root/prog1 > /salida/prog1
Que indica que cada media hora (minutos 0 y 30) de las
comprendidas entre 1 y 3, de cualquier día del mes, de todos los meses del año, que sean viernes,
se ejecutará el proceso /root/prog1, cuya salida será almacenada en el archivo /salida/prog1.
El primero de estos casos se usa para mejorar la utilización de los recursos de disco, y consiste en copiar a otros medios (cintas o disquetes) los archivos de datos u otro tipo, que no se utilizan habitualmente para, a continuación, borrarlos del disco. Cuando sea necesario volver a utilizar la información "archivada", se recuperarán desde el medio correspondiente. Lógicamente, este caso puede variar de importancia dependiendo de la capacidad de los discos instalados.
Sin duda alguna, el segundo caso es de una importancia especial. Se trata de mantener copias de seguridad de toda la información contenida en el disco, lo más actualizada posible para poder recuperarla en caso de que, ya sea por fallo hardware de la máquina o por error humano, esta información se pierda.
Para solucionar cualquiera de los dos casos, UNIX incorpora una serie de comandos y utilidades.
Tarea fundamental del administrador del sistema será precisamente el establecer una estrategia para la realización de las copias de seguridad, de acuerdo a la importancia de los datos y de la repercusión que su pérdida pueda suponer sobre el rendimiento del sistema.
Una parte fundamental de esta estrategia consiste en la elección del tipo de "backup" y la periodicidad con que se realiza. Se pueden distinguir tres tipos de copias de seguridad: completas (full backups), parciales e incrementales.
Las copias de seguridad completas se refieren al salvado de todos los archivos de un file system, las parciales a la copia de archivos o directorios concretos, y las incrementales a los archivos que han sido modificados desde un momento determinado, por ejemplo desde el último backup completo o desde el incremental más próximo.
La periodicidad con que se realicen las copias de seguridad, dependerá de las características propias de la instalación y de la organización de los sistemas de archivos.
El comando volcopy se utiliza para realizar una copia de seguridad de un sistema de archivos completo al dispositivo elegido (normalmente a cinta). Realiza una copia byte a byte del sistema de archivos origen creando una imagen exacta, incluyendo errores, sobre el dispositivo destino.
Para utilizar el comando volcopy es necesario que el sistema de archivos a copiar esté desmontado.
Para restaurar la información salvada con volcopy se utiliza el mismo comando. La restauración se realiza a nivel de sistema de archivos, es decir, el sistema de archivos completo.
Ventajas:
Inconvenientes:
Probablemente el comando cpio es el más utilizado para realizar copias de seguridad, debido a que se encuentra en todos los sistemas y es muy versátil. La principal desventaja de su utilización en los sistemas más antiguos ha sido solucionada actualmente al convertirlo en multivolumen.
Ventajas:
Inconvenientes:
El comando tar permite almacenar archivos, estructura de directorios y sistema de archivos en cinta magnético y su posterior recuperación.
Ventajas:
Inconvenientes:
En el directorio /dev existe un archivo especial, tipo bloque y/o carácter, asociado a cada dispositivo y, en el caso de los discos, a cada una de las particiones realizados.
Se puede observar haciendo un listado del directorio /dev que en los archivos especiales, donde debe aparecer la longitud del archivo, aparecen dos cifras que corresponden al numero principal y secundario.
Esta información y los comandos tienen asignados unos nombres que pueden ser utilizados por aplicaciones, lo que permite que éstas puedan efectuar una función general sin necesidad de conocer el comando específico requerido.
Para identificar cada dispositivo, se utiliza un "alias" que debe ser único.
El formato para cada entrada en el archivo /etc/device.tab consiste en 5 campos separados por ":" de la siguiente forma:
alias:cdevide:bdevice:path:atributosDonde cada campo significa:
alias | Nombre único por el que será conocido el dispositivo. Su tamaño máximo es de catorce caracteres. |
cdevice | Archivo especial, tipo carácter, asociado a ese dispositivo. |
bdevice | Archivo especial, tipo bloque, asociado a ese dispositivo. |
path | Nombre completo de archivo, para identificar el i-nodo del dispositivo. Sólo se utiliza cuando no es ni de tipo carácter ni bloque. |
atributos | Lista de expresiones, en el formato atributo=valor, en la que se especifican los comandos y atributos específicos del dispositivo. Por ejemplo, el comando de borrado, el de formateado, la capacidad para dispositivos removibles, etc. |
Para almacenar la información relativa a los grupos de dispositivos, se utiliza el archivo /etc/dgroup.tab.
Cada entrada de este archivo consta de dos campos separados por ":". El primer campo de los registros de este archivo es el nombre asignado al grupo de dispositivos (máximo 14 caracteres). El segundo campo incluye los nombres de los miembros del grupo separados por comas.