G A C E T A   D E   L I N U X
...haciendo a Linux un poco más divertido!
Instalación y seguridad en Slackware
Por Cezary M Kruk
Traducción al español por José Antonio Magro Cortés
el día 24 de Junio 2003, para La Gaceta de Linux
 

Este artículo ha sido traducido del polaco por su autor. El original se publicará en el número de verano de CHIP Special Linux.

Siempre que aparece una nueva versión de nuestra versión favorita, nos encontramos con el mismo dilema: ¿instalar todo desde el principio o intentar actualizar el sistema, o continuar con algo a lo que esta acostumbrado hasta ese momento?

Tengamos en cuenta dos consideraciones extremas: la instalación y configuración desde cero nos permite descubrir y utilizar todas las características nuevas; al mismo tiempo, si nos quedamos simplemente con lo que tenemos, estamos seguros de que podemos continuar los proyectos sin ningún obstáculo. Nos enfrentamos a la típica oposición entre innovación y estabilidad.

La configuración básica del sistema no es difícil. Sin embargo, cuanto más se necesita, mayor es el esfuerzo que se pone en ello. ¿Es posible simplificar la instalación y la configuración del sistema para que sea más fácil? Una base completa y diseñada con claridad, que contenga la información sobre los cambios que se han realizado trabajando con versiones anteriores del sistema, facilitan considerablemente la puesta a punto. Este método no resulta especialmente complicado cuando se recopilan datos; sin embargo, requiere un mayor trabajo cuando se restaura la configuración. ¿Cómo se podría automatizar y simplificar?

Afortunadamente, Linux almacena la información sobre la configuración de cada servicio individual en ficheros de texto. Es más, ofrece una gran variedad de muy buenas herramientas para el procesamiento de dichos ficheros. De esta forma, debería ser suficiente preparar los scripts adecuados y utilizarlos cuando se necesitase instalar de nuevo el sistema.

De la instalación a la seguridad

En este artículo se describen dos grupos de scripts: uno que se utiliza para instalar y eliminar paquetes individuales y otro que se utiliza para asegurar el sistema frente a una agresión potencial. Ambos están diseñados para Slackware Linux. Las herramientas para instalar y eliminar paquetes no son tan sofisticadas como los programas de SlackPkg o los paquetes de Packware; sin embargo, ofrecen un control total sobre el sistema. Lo mismo se aplica a los scripts para asegurar el sistema. Sólo realizan operaciones elementales. Ambos activan las herramientas que se encuentran en el grupo slack*more.

Tomándolo como modelo, se pueden preparar otras herramientas para automatizar el proceso de configuración de cualquier servicio o programa. Si decidimos no ajustar el sistema a mano completamente, sino complementar el script adecuado con el procedimiento siguiente, rápidamente obtendremos nuestro propio kit de programas para configurar el sistema. Además, debido a que nosotros mismos prepararemos estos scripts, se ajustarán perfectamente a nuestras necesidades.

Para ello, hemos tomado como ejemplo Slackware Linux debido a que es una distribución en la que, de forma natural, los usuarios manejan directamente los ficheros de configuración. Otras distribuciones Linux, que ofrecen programas complejos para estas tareas, ocultan a los usuarios estos ficheros que contienen información acerca de la configuración. Los programas, por tanto, o bien no obligan al usuario a realizar ninguna tarea o bien les fuerza a realizar complejas investigaciones para establecer en qué y dónde ha cambiado realmente su sistema gracias a los programas supuestamente amigables.

Slack*more está compuesto de dos partes. El fichero INSTALL.tgz, que contiene las herramientas para instalar, eliminar o actualizar programas, y el fichero SECURE.tgz: herramientas para asegurar el sistema durante la primera fase.

paquetes del grupo d

Imagen 1. El script SCRIPT.sh del directorio ./Slackware-9.0 generará un conjunto de lista listas de paquetes a partir de los grupos individuales. En la imagen se muestra la lista de paquetes del grupo d (desarrollo)

Instalación y eliminación de paquetes

Los componentes más importantes del paquete INSTALL.tgz son el script INSTALL.sh y el directorio ./Slackware-9.0, que contienen el script SCRIPT.sh y el fichero Slackware.

Para iniciar estas herramientas, es necesario montar en el directorio /mnt/cdrom la versión de instalación de Slackware y, a continuación, ejecutar el script SCRIPT.sh del directorio ./Slackware-9.0. Este script buscará en los directorios del CD-ROM y, guiado por los ficheros de etiquetas situados en dicha ubicación, creará los ficheros que contendrán la información sobre los paquetes (Imagen 1). Cada fichero tendrá el nombre correspondiente al nombre del grupo determinado. Por ejemplo: en el fichero e, al registrar los paquetes durante la generación de Emacs, encontraremos, entre otras, las siguientes entradas:

emacs: ADD 
emacs-misc: REC 
emacs-nox: OPT 

Los usuarios que conozcan Slackware Linux saben que la categoría ADD señala los paquetes esenciales que se utilizan en el programa dado, que la categoría REC indica los paquetes recomendados y que la categoría OPT sugiere los opcionales.

Si tenemos esta información básica sobre los paquetes, podremos decidir los componentes que deseemos y los que no son necesarios. Así, si modificamos el contenido del fichero e anteriormente mencionado de la forma siguiente:

emacs: ADD 
#emacs-misc: REC 
!emacs-nox: OPT 

se supone que se instalará el paquete emacs, se ignorará el emacs-misc y no sólo se ignorará el emacs-nox, sino que también se eliminará si se instaló anteriormente.

En el fichero Slackware del directorio ./Slackware-9.0 se puede encontrar información sobre los grupos individuales de los paquetes:

a 
ap 
d 
e 
f 
... 

En función de esta información, el script decidirá qué grupos de los paquetes deben tenerse en cuenta. Si personalizamos el fichero de la siguiente forma:

a 
ap 
#d 
!e 
f 
... 

se ignorará el grupo d; asimismo, se eliminarán todos los paquetes del grupo e instalados previamente.

Por tanto: si escribe # antes del nombre del paquete o del grupo, se omitirá; en cambio, si escribe !, se eliminarán del sistema los componentes correspondientes. Si un paquete o grupo de paquetes aún no se han instalado, el significado de los signos # y ! es equivalente. Las entradas de los ficheros que contienen los nombres de los grupos tienen prioridad sobre las entradas de los ficheros que contienen los nombres de los paquetes. De esta forma, si decidimos ignorar el grupo completo o eliminar los paquetes que pertenecen a él, el script lo hará, independientemente de la información que aparezca en los ficheros en los que se encuentran los nombres de los paquetes individuales.

Cuando hayamos preparado el fichero Slackware y los ficheros que contienen la información sobre los paquetes individuales, podremos ejecutar el script INSTALL.sh. El script añadirá o eliminará los componentes correspondientes en el sistema. Si se trata de una instalación preliminar de Slackware y aún no hemos puesto a punto el sistema, sería una buena idea optimizar el trabajo del disco duro utilizándolo como plataforma para la nueva distribución. Para ello, puede utilizar el script INSTALL.hda o el script INSTALL.hdb. Gracias a esto, el proceso de instalación y eliminación de paquetes será más rápido.

INSTALL.sh tiene varias utilidades. Si no hay ninguna tarea que realizar, no hará nada. El uso de este script nos permite realizar la instalación básica de Slackware. Es suficiente para instalar los paquetes del grupo a, utilizando en primer lugar el programa de instalación de Slackware y, a continuación, ubicando dicho script en el sistema, para comentar los nombres de los paquetes o grupos que no son necesarios y para instalar el resto, llamando a INSTALL.sh.

Información sobre paquetes

En el directorio ./Packages hay otro script SCRIPT.sh. Si montamos el CD-ROM de Slackware y ejecutamos el script anteriormente mencionado, creará la estructura de los directorios que contienen los ficheros con información sobre los paquetes individuales del sistema. Es conveniente tener esta base de datos de referencia sobre los paquetes, ya que así no será necesario montar el disco de instalación cada vez que desee comprobar para qué sirve el paquete seleccionado. Construir una base como esta sólo resulta razonable si no se ha decidido instalar Slackware Linux completamente. De lo contrario, encontrará toda la información sobre los paquetes en el directorio /var/log/packages.

Los parches

El directorio ./Patches contiene dos scripts. Si desea utilizarlos, ejecute 0.check en primer lugar. Accederá al servidor sunsite.icm.edu.pl, buscará las actualizaciones disponibles para Slackware 9.0 y creará el fichero Packages.html con la información sobre las actualizaciones y el fichero Packages.txt con los nombres de los paquetes:

mutt-1.4.1i-i386-1 
sendmail-8.12.9-i386-1 
sendmail-cf-8.12.9-noarch-1 

El script 1.get utilizará el último fichero para obtener los paquetes, los ficheros .txt adecuados y los ficheros .tgz.asc. Para ello, el script utilizará el comando wget -c -t0, de forma que no haya ningún riesgo de obtener los mismo ficheros repetidamente. Por otra parte, si queremos comprobar si ya tenemos un fichero dado nos llevará bastante de tiempo, de manera que sería adecuado buscar en el fichero Packages.txt antes de iniciar 1.get y eliminar de este fichero los nombres de los paquetes que ya tengamos o los que no nos interesen. Sin embargo, no es necesario.

Es posible cambiar el comando que permite obtener los ficheros por wget -c -t0 -b. De esta forma, todos obtendremos los ficheros del servidor simultáneamente, en segundo plano. Aunque no todos los servidores permiten establecer este tipo de conexiones. Si el servidor sunsite.icm.edu.pl no se adapta a nuestras necesidades, podemos registrar otro host en los scripts 0.check y 1.get. A continuación, deberíamos personalizar el contenido del comando en consecuencia, generando el fichero Packages.txt a partir del fichero Packages.html. En un principio, es el comando:

cat Packages.html | grep ".tgz.asc" | sed 's/.tgz.asc//g' | sed \ 
's/.*A HREF="//' | sed 's/">.*//' > Packages.txt 

El script 1.get sólo registra información sobre paquetes temporales. Los grandes grupos de actualizaciones para Slackware se ubican en directorios separados (kde, kdei, etc.). Si desea obtenerlos, tendrá que hacerlo manualmente o modificar el script de manera adecuada.

El directorio ./usr/local/bin

En el directorio ./usr/local/bin se encuentra el script catpkg, que facilita la revisión de la información sobre los paquetes instalados en el sistema que se encuentra en los ficheros disponibles del directorio /var/log/packages. El script INSTALL.sh copia todo el contenido del directorio ./usr/local/bin local a su equivalente en el sistema, de forma que podamos poner en este directorio los diferentes scripts que deseemos utilizar durante el trabajo inicial con el sistema.

bits SUID y SGID eliminados

Imagen 2. El script SECURE.sh elimina los bits SUID y SGID de los ficheros seleccionado y muestra información relacionada.

Asegurando...

El script principal del fichero SECURE.tgz es SECURE.sh. Realiza las tareas siguientes:

Estas acciones aumentan significativamente la seguridad del sistema, aunque sólo es el comienzo para inmunizarlo ante un posible crack. El script SECURE.sh está escrito de forma que pueda ejecutarse de forma repetida. De esta forma, podemos añadirle cualquier procedimiento y aplicarlo sin ningún problema.

El script modifica varios servicios, aunque no los sobrecarga. Para volver a leer /etc/inetd.conf, utilice el comando killall -HUP inetd. Para ejecutar el fichero /etc/inittab modificado, ejecute el comando init q. Para reiniciar sendmail, utilice los comandos /etc/rc.d/rc.sendmail restart o kill -HUP `head -1 /var/run/sendmail.pid`.

Podríamos incluir estos comandos en el script; sin embargo, conlleva un riesgo potencial que deberíamos tener en cuenta. Si cometemos un pequeño error en la llamada al programa sed, en lugar de obtener un fichero /etc/inittab modificado podríamos obtener un fichero vacío. Como resultado, después de reiniciar init, perderemos el acceso al sistema y nos veremos obligados a restaurar el fichero /etc/inittab desde la copia, utilizando el sistema Linux instalado en la otra partición o en el otro disco. No siempre resulta agradable, sobre todo si no tenemos otra partición con Linux.

ficheros de gran tamaño

Imagen 3. Lista de ficheros de gran tamaño. Como se puede observar, los más importantes son los ficheros de la suite OpenOffice.org instalada en el directorio /opt, así como los ficheros de RealPlayer y Pingus

Las pruebas

El script TEST-SECURE.sh busca algunos tipos de ficheros en el sistema:

La información sobre cada categoría de fichero se registra en el fichero de registro separado. Además, TEST-SECURE.sh utiliza los resultados de la acción del script SECURE.sh, mostrando los contenidos del fichero de registro con información sobre programas que no tienen bits SUID o SGID.

Debido a que no siempre querremos realizar todas estas pruebas conjuntamente, en el directorio /root/bin encontraremos los scripts 1.suid, 2.huge+old, 3.huge, y 4.nobody, cada uno de los cuales sólo realiza una prueba concreta.

Etcétera...

Merece la pena ampliar el script SECURE.sh con otros procedimientos que se encarguen de la configuración e instalación de protecciones futuras. Si seguimos los procedimientos utilizados en este script, podremos preparar futuros scripts para poner a punto otros servicios: configurar las cuentas de los usuarios, configurar los clientes y servicios de red, correo electrónico y WWW, el entorno X Window, etc. La única limitación es la imaginación, ya que Linux nos permite gestionar prácticamente todo. De esta forma, cuando terminemos de crear estos scripts podremos configurar todo el sistema exactamente en función de nuestras necesidades, con tan sólo presionar Intro unas cuantas veces.

Recursos

Slack*more:

freshmeat.net/projects/slackmore

SlackPkg:

freshmeat.net/projects/slackpkg

Packware (sitio Web polaco):

hacking.pl/packware.php

[BIO] Cezary vive en Wroclaw, Polonia. Es redactor de la publicación trimestral CHIP Special Linux (en polaco).


Copyright © 2003, Cezary M Kruk. Copying license http://www.gacetadelinux.com/en/lg/copying.html
Published in Issue 91 of Linux Gazette, June 2003