Escolar Documentos
Profissional Documentos
Cultura Documentos
Linux
esquematizado.
Versión 0.6
1.3 Distribuciones.
2. Licencia GPL.
2.1 Propósito.
2.2 Derechos.
2.3 Obligaciones.
3. Tareas básicas.
3.1 Moverse por el sistema.
3.2 Monitorización.
4. Uso avanzado.
4.1 El intérprete de mandatos. Manejo.
5. Configuración.
5.1 Configuración de red.
5.3 Seguridad
5.3.1 Hardware.
5.3.2 Comparticiones.
5.3.3 Programas inseguros. Virus.
5.3.4 Navegación.
6.3 Configuración.
6.4 Compilación.
7. Firewall Linux.
7.1 Funcionamiento. Comparación con otros cortafuegos.
7.2 Instalación.
8. Servicios de internet.
8.1 Servidor DNS (Bind).
Shared Source = El código del programa está disponible, pero sólo para ser consultado.
UNIX = Sistema operativo multitarea pensado para ser independente del hardware.
Segunda característica principal: Árbol de directorios único (no hay unidades: C, D, etc.).
Tercera característica principal: es notablemente caro.
Linux es una reescritura desde cero del núcleo de Unix.
Núcleo = Capa de software que se sitúa entre el hardware (CPU, RAM y periféricos) y el
resto de programas. Puede hacerlo de forma privilegiada (forzando entonces a los
programas a abstraerse totalmente del hardware, como en los Unix) o no privilegiada
(como Windows) lo que obliga en cada programa a plantearse la conveniencia o no de
manejar por sí mismo el hardware para aumentar el rendimiento, con lo que el conjunto
del sistema operativo pierde portabilidad (sus programas se vuelven específicos) y
seguridad (pueden provocarse conflictos) aunque permita un núcleo mucho más pequeño.
POSIX = Conjunto de normas que definen un sistema operativo ideal de tipo Unix.
shell = Intérprete de órdenes en modo texto. De forma genérica, interfaz con el núcleo.
El planteamiento alternativo es arrancar un programa que sirva de base para los demás,
lo que se llama sistema operativo.
Aparte de −idealmente− dejar de tener que reiniciar para ejecutar programas diferentes,
las partes que había que repetir dentro de cada programa (para manejo del teclado, etc.)
se pueden poner en el sistema operativo para que sean compartidas por todos ellos.
Bajo el primer planteamiento, los ejecutables son específicos de cada máquina. Bajo el
segundo lo son para cada máquina y también para cada sistema operativo. (La indepen−
dencia es posible, pero se debe alcanzar por otros caminos que ahora veremos).
Otra explicación más amplia se merecen también las siglas GNU “Gnu is Not Unix”:
El nombre Unix es una marca comercial que no se puede utilizar libremente. GNU es la
negación de todo ese conjunto de restricciones y prohibiciones. Desde el punto de vista
de la lógica estricta, la definición proporcionada no es recursiva, pues es equivalente a
decir “Not Unix is not Unix” o, lo que es lo mismo, “GNU is GNU”.
En la comunidad del código libre siempre ha existido una gran tendencia hacia el tipo
de sistema operativo Unix. La razón es más profunda que una mera cuestión histórica, de
calidad técnica o sencillamente de preferencias :
Igual que muchas otras grandes piezas de software (notablemente, el resto de lenguajes
de programación) Unix fue escrito en C para así poderse ejecutar en cualquier equipo sin
apenas necesitar cambios. Por eso Unix va ligado al lenguaje C, y continúa siendo por
ello el único sistema operativo verdaderamente portable.
Los programas de fuente abierta son pues los únicos que cumplen aquel objetivo
original de portabilidad del diseño de Unix: El software libre hace finalmente posible
disponer de los mismos programas independientemente de la máquina.
La otra alternativa (que casi parece haberse impuesto) es que solamente exista un único
tipo de procesador en el mercado. La futura libertad de elección en el hardware, tanto en
el plano individual como social, va unida al uso de software libre.
En rigor, el único requisito técnico indispensable para que un procesador pueda ejecutar
de forma apropiada un sistema de tipo Unix es que posea una MMU (Memory Manage−
ment Unit). Para equipos domésticos esto suele corresponderse con máquinas de 32 o
más bits de tamaño de registro del procesador.
Cuando los familiares PCs dieron el paso desde una arquitectura de procesador de sólo
16 bits a una de 32 bits, ya llevaban tiempo siendo el tipo de computador más usado y
extendido por todo el mundo, por lo que era necesario que siguieran siendo compatibles
con su sistema operativo −el D.O.S.− y que todos sus programas se continuasen pudiendo
ejecutar sobre los nuevos equipos. Por otro lado, los Unix comerciales resultaban
escandalosamente caros (igual que los programas hechos para ellos) y aún no existía el
suficiente software libre. Hasta entonces se había considerado la capacidad de proceso de
un PC insuficiente para funcionar como servidor.
En cuanto a la razón para producir sistemas operativos y programas sin cobrar por ello:
Aunque en el entorno Windows existe una enorme oferta de este freeware, se trata casi
siempre de proyectos reducidos (han de ser elaborados por un número comparativamente
pequeño de programadores) por lo que no terminan alcanzando el nivel de calidad ni
tanta difusión final como los de software libre, a pesar de ser también gratuitos.
VENTAJAS de Linux:
− RedHat
− Mandrake
− SuSE
− Slackware
Fue la primera distribución de Linux. Aún emplea para sus paquetes ficheros
simplemente comprimidos con el método zip, por lo que actualizar conduce
normalmente a tener que reinstalar todo.
− Debian
Hay que señalar que no se trata de una empresa, sino que la distribución está
hecha por la misma comunidad de usuarios y programadores de Linux.
− Fedora
− Esware
− Hispafuentes
− Conectiva
VENTAJAS de Debian:
* MULTIPLATAFORMA: Debian está disponible para casi todos los procesadores para
los que Linux lo está. La mayoría de las otras distribuciones están muy enfocadas al PC.
INCONVENIENTES de Debian:
Tanto a los profesionales que ejercen su actividad dentro del campo informático como a
los usuarios finales les resulta necesario conocer el marco legal en que se desenvuelven
con este tipo de software.
Se expondrá la GPL, aunque hay que recordar que no es la única licencia existente para
software libre (BSD, “Artistic License”...).
2.1 Propósito.
El objetivo básico de la licencia de software GPL (General Public License) es evitar que
compañías privadas puedan adueñarse del software de fuente libre, vendiéndolo como
propio y prohibiendo en lo sucesivo su copia.
2.2 Derechos.
a) Copiar y distribuir sin restricciones tanto el código fuente como los programas
ya compilados.
Ello implica no poder impedir a otros hacer lo mismo. De hecho se anima a ello.
b) Vender el software.
Siempre sin modificar la licencia, cosa que impediría a otros continuar haciendo
cambios, y advirtiendo en todo caso que no se trata del original.
2.3 Obligaciones.
¿Qué prohíbe la licencia GPL?
a) Atribuirse la autoría.
Principal diferencia respecto a otras licencias de software libre (tipo BSD) que
permiten introducir restricciones. Resulta frustrante para un programador ver productos
comerciales que incorporan su trabajo −mejorado− impidiéndole acceder a él.
La licencia GPL ha proporcionado al software libre una cobertura legal que resulta el
factor fundamental para explicar su éxito.
Por ejemplo, es la única forma de garantizar que el software no hace nada más aparte de
lo que se supone que hace. Eso le convierte en el único software sobre el que se puede
tener certeza acerca de su seguridad. Es difícil −y con frecuencia ilegal− llegar a saber si
un programa cerrado dispone de puertas traseras o está enviando información al
fabricante. Esto es especialmente importante en el caso de las administraciones públicas.
Nota : Esta tabla es de propósito meramente educativo y no pretende tener validez legal.
Libertad de copia NO SI SI SI SI
Libertad de modificar
el software NO NO SI SI SI
Libertad de modificar
la licencia NO NO NO SI SI
Obligación de aportar
las modificaciones NO NO SI NO NO
Obligación de recono−
cimiento a los autores NO NO NO SI NO
Obligación de renun−
ciar a reclamaciones SI SI SI SI SI
Observaciones :
− La obligación que impone la GPL de aportar en forma de código fuente los cambios y
mejoras hechas −para lo que es imprescindible que vuelvan a publicarse bajo la misma
licencia− retroalimenta el desarrollo, a diferencia de los programas con licencia BSD.
3 Tareas básicas.
Actualmente, sistemas operativos de tipo Unix como Linux o FreeBSD han llegado a
poderse manejar bastante cómodamente desde un entorno puramente gráfico. Sin
embargo, sigue siendo muy conveniente conocer las instrucciones más elementales para
poder hacer las cosas de un modo mucho más preciso, rápido y sobre todo automatizable.
En Linux, como en cualquiera de los BSD y todo Unix, se distingue el tipo de las letras
(se distingue entre mayúsculas y minúsculas), por lo que esto no es lo mismo que ESTO,
ni aquello es lo mismo que Aquello.
Las nombres de variables, por ejemplo, suelen escribirse en mayúsculas, mientras que
los nombres de usuario y todos los mandatos básicos se han de escribir en minúsculas:
halt Del alemán. Literalmente, alto, apagar el sistema (ver también shutdown).
help Por el momento, baste con saber que aquellos mandatos que carecen
de ayuda mediante man la tienen mediante help, y viceversa.
En primer lugar, podemos comprobar que pulsando simultáneamente las teclas Control,
Alt, y una de las teclas de función (F1, F2 ...) se cambia entre terminales virtuales:
Por ejemplo, Ctrl+Alt+F7 nos devolverá a la sesión gráfica si empezamos desde ella.
Con las flechas de desplazamiento arriba y abajo se puede volver a las lineas de texto
(órdenes) introducidas con anterioridad.
3.1.1 Mandatos básicos.
Por ejemplo, en las distribuciones RedHat, SuSE y Mandrake, el punto de montaje del
cdrom es /mnt/cdrom mientras que en Debian resulta ser simplemente /cdrom .
Algo similar ocurre con la disketera, /mnt/floppy en un caso y /floppy en el otro.
No obstante, estas son diferencias menores entre distribuciones. En general, la
disposición de los directorios es prácticamente idéntica en todos los Linux y muy
parecida a la del resto de sistemas Unix :
/sbin “system bin” para ejecutables que tendrían capacidad de volver inoperante
el sistema (como los de particionado de discos). Tenerlos aparte permite
tratarlos de forma diferente en cuanto a la seguridad, como quitarlos del
PATH normal de los usuarios, aunque al final acaba resultando
innecesario establecer para este directorio permisos especiales.
/var Dado que la norma dice que /usr debe poder ser capaz de montarse en
modo de sólo lectura, es necesario este otro directorio para cosas que en
principio hubieran debido ir allí. Principales subdirectorios:
/var/log (históricos) y /var/spool (colas de impresión, correo...).
/tmp Para archivos que no sólo son variables en contenido, sino en existencia.
De hecho, lo que hay en este directorio suele ser borrado a cada reinicio.
Cualquier usuario o programa debe poder ser capaz de escribir en /tmp
/mnt Directorio que contiene puntos de montaje y puede ser usado a su vez
como punto de montaje (como en realidad cualquier directorio).
/home Otros sistemas operativos ponen a disposición del usuario todos los
directorios excepto uno, que dedican al sistema. En los Unix es al revés:
Todos los directorios son de sistema excepto uno que dejan a disposición
de cada usuario, dentro de /home. En otros Unix se llama /users o /u
porque al principio se empleaba /usr también para esto.
El directorio es por ejemplo un caso de archivo especial, pues no es sino otro archivo que
contiene una lista de nombres de archivos y sus inodos (localizaciones en el disco).
Que en Unix cualquier cosa corresponda a un archivo simplifica mucho la programación.
/dev Común a todos los Unix. Sus archivos representan a los dispositivos.
Por ejemplo, se puede escribir en el floppy enviando datos a /dev/fd0
aunque no se podrá usar como sistema de ficheros hasta que se monte.
/dev/fd1 segunda disketera (B:)
/dev/hda master IDE primario (/dev/hda1, /dev/hda2... particiones)
/dev/hdb esclavo IDE primario (/dev/hdb1 primera partición)
/dev/hdd3 tercera partición del esclavo IDE secundario
/dev/lp0 primer puerto paralelo (LPT1:)
/dev/ttyS0 primer puerto serie (COM1)
/dev/null (des)memoria write−only
hard link Apunta al inodo (localización en el dispositivo) por lo que debe residir en la
misma partición que el fichero original, el cual puede incluso ser borrado posteriormente.
Es el tipo de enlace por omisión, y proporciona una rapidez de acceso igual al original.
symbolic link Más lento. Apunta al nombre del fichero, no al inodo, por lo que puede
encontrarse en otro dispositivo distinto, aunque si se borra el original se perderán los
datos de ambos. Como un nombre de fichero puede ser relativo, este enlace también.
Los enlaces proporcionan una gran flexibilidad al sistema de ficheros, y los directorios
también pueden ser enlazados. (Ver asimismo la orden mount con el modificador --bind).
ls − a Para ver los archivos ocultos (No se pueden considerar archivos especiales
ya que simplemente su nombre comienza con un punto.)
/mnt/c Únicamente para el caso de los PC. Aunque no se vaya a instalar winDOS
conviene al menos que exista una partición para que se detecte el disco
como ya configurado y evitar así cualquier posible peligro de reformateo.
Ha de ser una partición primaria. Si no va a contener winDOS puede ser
muy pequeña (menos de 32 MB), pero si va a contenerlo tiene que ser
bastante grande (1 GB mínimo para Office); usar vfat (ntfs sólo si es
preciso) y no es mala idea marcar la partición como botable.
swap La memoria virtual es algo más rápida usando una partición primaria,
aunque se pueda emplear una secundaria o incluso un archivo.
En cuanto al tamaño, la conocida regla de que sea el doble del de la RAM
es práctica sólo hasta los 64 MB de RAM, pues no debería superar nunca
en circunstancias normales los 128 MB. De hecho, para 256 MB de RAM
o más normalmente ni siquiera debería hacer falta swap.
/home Aparte de aislar de cambios en la (re)instalación del resto del sistema, una
partición /home asegura que los usuarios no sobrepasarán un máximo de
espacio en disco, se establezcan o no cuotas para cada uno de ellos.
Evidentemente, debe permitir la escritura, por lo que mientras no se
requiera un sistema de archivos con ACLs (listas de control de acceso)
se recomienda reiserfs por su mayor rendimiento.
Un tamaño holgado es de 1 GB por cada usuario activo.
/var Evita el caso (servidores de correo) de que las colas que guarda pudieran
crecer incontroladamente hasta agotar el disco (spam o ciertos ataques).
Un mínimo razonablemente seguro sería de 600MB, + 10 MB adicionales
por usuario activo, con reiserfs como sistema de archivos.
3.1.3 Mandatos de búsqueda.
Por ejemplo, find /cdrom −name palabra* mostraría la lista de todos los
archivos cuyo nombre comienza con la secuencia de caracteres “palabra”
dentro del directorio /cdrom (obviamente, antes se habrá debido montar).
locate Localiza el nombre dentro de una base de datos de archivos, por lo que es
mucho más veloz que find. Sin embargo, esta base de datos se debe haber
creado previamente, mediante la instrucción updatedb , lo cual es lento.
Además, cualquier archivo eliminado posteriormente continuará figurando
en ella (esto en ocasiones puede convertirse en una ventaja), mientras que
cualquier archivo nuevo no figurará hasta que vuelva a ser actualizada.
Su utilidad es escasa para dispositivos extraíbles.
Como ejemplo, locate bin/orden muestra todos los archivos cuyo nombre
comienza por “orden” en todos los directorios cuyo nombre acaba en “bin”
(/bin, /sbin, /usr/bin, /usr/X11R6/bin, /usr/sbin, /usr/local/bin, etc.)
grep Para buscar archivos que contengan un determinado texto (fgrep, egrep), y
para buscar un determinado texto dentro de un conjunto de archivos. (Re−
lacionado con esto último ver también look , sort , spell y strings ).
Dado que la estructura es de tipo árbol único, forzosamente debe existir un proceso raíz:
El primer proceso se llama init y se le asigna el número de proceso 1. Es el único que
es lanzado directamente por el kernel. Este proceso pone inicialmente en marcha otros,
en su mayor parte de los denominados “daemons”2, entre los que se puede destacar getty
a la escucha en cada una de las terminales, el cual a su vez crea un proceso login de
acceso al sistema que iniciará el intérprete de órdenes. A partir de ahí, todos los procesos
que emprenda el usuario serán descendientes de ese intérprete.
Todo proceso debe tener como máximo un proceso padre, pero puede tener en cambio
múltiples procesos hijos.
Matando el proceso padre deben morir también todos los hijos (o no se podría mantener
un árbol único). Esto se puede comprobar lanzando alguna aplicación gráfica desde una
emulación de terminal en X : Al cerrar la ventana correspondiente al terminal X
el kernel mata también la aplicación que se haya lanzado desde ella. (Esto puede resultar
útil en ocasiones para asegurar la capacidad de finalizar un programa).
Los procesos hijos heredan del padre diversas propiedades, como el directorio de
trabajo inicial (el que se muestra con la orden pwd) o el nombre del usuario que lo lanza.
Buena parte de esas propiedades son accesibles en forma de variables de entorno (ver
manuales de las instrucciones env y set , y las funciones de C getenv() y putenv() ).
Por tanto, las variables de entorno en realidad no forman parte −como se puede pensar−
del intérprete de mandatos (aunque existen variables específicas del mismo) sino de
cualquier proceso.
Mientras las colas de tareas de impresión son, como las de correo, colas de datos,
existen también colas de programas esperando ejecutarse. En Linux las hay de 3 tipos :
Al ser procesos ya iniciados, se admiten además todas las órdenes aplicables a procesos,
como renice o kill , sobre su número correspondiente dado por la instrucción jobs
precedido del signo % (o bien directamente sobre su número de proceso según ps ).
Precaución : Todos los procesos de esta cola morirán en cuanto se salga del intérprete,
salvo que hayan sido lanzados con nohup , o que se les haya aplicado disown o detach
una vez iniciados.
2− La proporcionada por el daemon atd es la cola clásica de trabajo por lotes propia−
mente dicha (esperando a ser iniciados), aunque no se suela instalar automáticamente por
las distribuciones de Linux. Se gestiona mediante las órdenes atrun , batch y at (para
enviar a cola), atrm (para eliminar de la cola trabajos), y atq (para mostrar la cola).
3− La cola que proporciona el daemon crond presenta la peculiaridad de ser cíclica, por
lo que se ha de gestionar a través de archivos de configuración (“crontabs”).
Grupos y usuarios son abstracciones. Lo único que tiene existencia real en el sistema
son los procesos, que son los que utilizan identidades de usuario o de grupo. Por ejemplo,
cuando un usuario lista el contenido de un directorio no es en realidad el usuario quien lo
hace, sino el proceso correspondiente a su intérprete de mandatos actuando en su nombre.
Cualquier proceso puede actuar no sólo sobre ficheros, sino sobre otros procesos,
por eso los conceptos de usuario y grupo se aplican tanto a unos como a otros, y lo hacen
a través de 2 características: la pertenencia del archivo o proceso, y los permisos sobre él.
No se van a repetir aquí las detalladas explicaciones sobre permisos y su manejo que se
pueden encontrar en cualquier guía elemental, siendo suficiente efectuar man sobre
chmod , chown , chattr (en los sistemas de archivos que le den soporte), y help sobre
umask . Tampoco se va a insistir acerca de las pertenencias, baste consultar man para las
instrucciones chown , chgrp , y la no tan conocida newgrp (muy cómoda para
actualizar los grupos a los que pertenece el usuario sin que deba salir y volver a entrar).
Ver también el manual para las instrucciones sg , su .
Se hace notar −sin embargo− que pertenencia, permisos y atributos no son en rigor
propiedades de un archivo, sino de su inodo: El inodo es −simplificando− todo lo que es
el archivo, pero sin el nombre. El nombre del archivo es lo único que no está contenido
en el inodo, sino en otros archivos destinados a ese efecto denominados directorios. Así
se consigue poder mover el archivo sin mover sus datos, al menos dentro de la partición.
Consecuencias :
− Al cambiar los permisos de un archivo se están cambiando los de todos sus enlaces (de
cualquier tipo), ya que apuntan al mismo inodo.
− En cambio, pasar a modo de sólo lectura un directorio no convierte a sólo lectura los
ficheros y directorios que contiene, puesto que están en otros inodos (aunque el no poder
renombrarlos o borrarlos pueda causar esa impresión).
− De forma recíproca, no poder escribir sobre un archivo no significa no poder borrarlo o
renombrarlo (es decir, escribir sobre el directorio que lo contiene). Atención pues a
aquellos procesadores de texto y otros programas que comienzan por cambiar el nombre
del fichero agregándole una extensión de tipo backup.
Precauciones
1) Para evitar los problemas que puede comportar quedarse sin espacio en disco se
pueden tomar medidas de tres tipos:
− Reservar en exclusiva al usuario root (es decir, a sistema) una parte del total disponible
en el momento de crear el sistema de ficheros. Esta opción no existe para todos los tipos
de sistemas de ficheros. En ext2 y ext3 se reserva siempre por omisión el 5%.
− Crear particiones distintas para / , /home , /var , etc. De esta forma se obtiene la total
seguridad, por ejemplo, de que los usuarios en conjunto no van a poder sobrepasar el
límite impuesto.
− Usar cuotas de disco en los sistemas de ficheros que lo admiten, aunque esto acarrea
mayor complejidad en su administración.
− Limitar el intérprete de órdenes (shell) para cada usuario. La forma más radical de
limitarlo es establecer /bin/false como intérprete de ingreso al sistema para ese usuario.
Esto debe hacerse por seguridad para todas aquellas cuentas que no precisen iniciar
sesión, como por ejemplo todos los usuarios Samba, los de sólo correo, etc. Sin llegar a
ese extremo, se pueden establecer límites específicos para cada usuario en cuanto al
máximo número de procesos, cantidad máxima de memoria que puede usar, etc. a través
del fichero de configuración /etc/limits.conf (o modernamente /etc/security/limits.conf).
Otra alternativa la constituye rbash que es una modalidad de bash con restricciones
( rksh es similar).
3.2 Monitorización.
A) Máquina.
Para identificar el sistema operativo y el equipo para el que fue compilado, los Unix
disponen del mandato uname (unix name). Ver también hostname .
Mediante date se sabe la fecha y hora del sistema (ver también cal), y con uptime el
tiempo que lleva funcionando ininterrumpidamente desde la última vez que se arrancó.
B) Memoria.
C) Disco duro.
Para localizar los ficheros que ocupan el mayor espacio en disco se usan combinaciones
de instrucciones tales como: find . −printf “%k %p\n” | sort −g o bien
find . −size +100000k −ls (substituyendo el punto por la barra / si se desea extender la
búsqueda a todo el sistema).
D) Procesos.
La instrucción ps crea una lista de todos los procesos en ejecución en el momento que
fue invocada. Como pueden llegar a ser varios cientos, normalmente se usa en
conjunción con grep . Un ejemplo típico: ps −auxw | grep smb
La instrucción pidof sirve para confirmar que un proceso concreto se está ejecutando,
y para obtener su número identificativo.
Pero top es sin duda la principal instrucción para monitorizar procesos, ya que muestra
repetitivamente la información anterior, pudiendo ordenar los procesos según su
consumo de CPU, consumo de memoria, etc.
Para conocer qué procesos, y por lo tanto qué usuarios, están utilizando un determinado
archivo o directorio, se dispone de los mandatos fuser y lsof .
Los procesos que manejan colas disponen normalmente de instrucciones especiales para
su comprobación, como mailq para la del correo, y lpq o lpstat para la cola de
impresión.
La otra orden que más se utiliza sobre los procesos tras haberlos monitorizado es renice
(ver también nice ). Hay que tener siempre presente que el valor que se maneja no es la
prioridad sino lo contrario a la prioridad.
E) Usuarios.
Con el mandato w se sabe quién está en el sistema y qué está haciendo. Las órdenes
who y users son formas parciales de dicha instrucción.
Una forma rápida de ver su estado en un momento dado es haciendo : netstat −na --ip
que proporciona la lista de quién está accediendo y a qué ports, en ese instante.
Para verlo de una forma continua existen varios programas, entre los que destaca iptraf.
El único sistema de ficheros sin journalling recomendable para Linux −ext2− posee
herramientas para su mantenimiento: Es necesario ejecutar e2fsck en caso de que haya
habido cortes de corriente o se sospeche mal funcionamiento del disco.
Una vez recuperado un sistema de archivos, conviene revisar el contenido del directorio
/lost+found de la partición afectada para comprobar la cantidad de ficheros“huérfanos”y
deducir la importancia de cada uno mirando su contenido (pues ya no habrá otra manera).
Por seguridad, es bueno tener las últimas versiones de todos los programas, sobre todo
de los que sirvan peticiones de red, fundamentalmente servidores http, de correo, DNS y
de bases de datos.
Los llamados backups −las sencillas copias de respaldo− constituyen la única garantía
verdaderamente universal frente a cualquier pérdida, voluntaria o fortuita, de datos, pues
protegen lo mismo de fallos mecánicos que de catástrofes naturales, ataques vía internet,
virus (cuando existan sistemas susceptibles a ellos), errores humanos, etc.
DATOS
SUBSTRATO
Anteriormente, el alto precio y baja capacidad de una unidad de disco duro justificaba el
empleo de cinta magnética para copias de seguridad. Sin embargo, el precio de los discos
continúa bajando mientras por otra parte el de las unidades de cinta no cesa de aumentar.
Ahora la ventaja económica ya no compensa la lentitud de acceso a los datos (de forma
secuencial) de una cinta, y la situación en cuanto a la mayor capacidad de almacena−
miento se ha invertido. Ninguna cinta considerada barata puede almacenar más de 80GB,
y menos aún a una velocidad utilizable. Eso sin mencionar la abundancia de formatos de
cinta incompatibles entre sí que además con el tiempo se acaban dejando de fabricar.
Si el volumen no supera los 700 MB, caso frecuente en pequeñas empresas, lo ideal en
estos momentos son los CDs regrabables. Es un soporte muy barato y relativamente
rápido con las últimas grabadoras que −a su vez− tampoco requieren una gran inversión.
Es también un soporte fácilmente manejable por otros sistemas operativos.
Para grandes volúmenes se ha vuelto práctico en la actualidad aprovechar algún equipo
en desuso −al que se pueden añadir discos duros si es necesario− para dedicarlo a hacer
copias a través de la red. Lo ideal sería ubicarlo en otro edificio, o bien que los discos
duros fuesen del tipo extraíble.
PERIODICIDAD
Variabilidad: Si los datos no sufren ningún cambio (por ejemplo, una base de datos de
sólo lectura, /etc, /usr/local, un CD...) es suficiente haber hecho copia una sola vez.
TIPO DE COPIA
Las copias incrementales siempre requieren menor espacio, y por lo tanto menor tiempo
de grabación, pero esto no significa que el tiempo total de copia sea menor. De hecho,
puede ser mayor debido al mayor procesamiento necesario.
Como norma general, aunque las copias diarias puedan ser incrementales, las semanales
es mejor que sean completas. Así será más rápida la posterior localización y recuperación
de archivos, que es una tarea más importante y el objetivo de hacer copias.
ROTACIÓN
Se recomienda pues una rotación corta para las copias incrementales. Para las completas
los niveles y su rotación se pueden decidir de forma externa al sistema (a partir del nú−
mero de soportes intercambiables de que se disponga) con un mínimo 2 copias por nivel.
AUTOMATIZACIÓN
Aunque también en Unix existen aplicaciones de backup en modo gráfico, hay varios
motivos que hacen aconsejable el uso de las herramientas en modo texto: el principal es
la variedad de posibilidades que da la orden cron para automatizarlas, en segundo lugar
las facilidades que ofrece el hecho de ser en modo texto para que sean usadas a través de
la red, la compatibilidad que aseguran con otros sistemas operativos, y −por último− lo
perfeccionadas que están después de tantos años. El no ser tan amigables para el usuario
carece de importancia si el usuario no necesita hacer nada (porque ha sido automatizado).
Herramientas de creación.
tar Ejemplos:
tar −czf MiBackup.tgz MiDir/
El significado de los modificadores c, z, f en inglés ’create zip file’ aclara
perfectamente lo que hace el ejemplo y, además, ayuda a recordarlo.
dd if=/dev/hdb of=/dev/st0
vuelca todo el disco IDE esclavo primario a la primera cinta SCSI.
Hay que destacar que se copian también todos los sectores vacíos
en el disco origen, por lo cual tarda mucho y ocupa todo el espacio
correspondiente al tamaño del disco, independientemente de que
contenga pocos datos o incluso ninguno.
Al ser las copias algo que no necesita estar disponible de una manera instantánea,
resultan ideales para aplicarles compresión.
pak / pack / unpack Utilizan el método de Huffman, que no comprime tanto como los
posteriores pero es más veloz, sobre todo con procesadores lentos.
gzip / gunzip Son, igual que zip / unzip y compress / uncompress una imple−
mentación del algoritmo Lempel−Ziv, pero con software libre.
Es lo que incorpora tar en su modificador −z .
zcat / zless Para ver archivos comprimidos sin tener que descomprimirlos.
(Ver también bzcat , bzless , zmore , bzmore , etc.).
Herramientas de comprobación.
diff / sdiff / diff3 Elabora un listado de todas las diferencias existentes. Este listado
puede ser empleado por la instrucción complementaria patch para
reconstruir uno de los archivos a partir del otro. (Muy utilizado en
programación para comunicar modificaciones de código fuente.)
Incorporado en tar como modificador −d . Ver también merge .
sum / md5sum Este programa genera una clave para cada fichero de un directorio
a partir de su contenido. La particularidad es que basta el cambio
de 1 solo bit del fichero para que la clave resulte ser muy diferente.
Si la copia de seguridad incorpora un fichero adicional con las
claves generadas antes de hacer la copia, y se comprueba que son
iguales a las calculadas a partir de los archivos recuperados, se
puede estar considerablemente seguro de que no hubo fallos en
ningún paso del proceso, sin hacer falta el original para comparar.
3.5 Autoayuda.
a) Ante todo, hay que consultar las páginas de manual de cada instrucción. Es imposible
y de hecho innecesario saberse de memoria todas las opciones de todos los mandatos.
A lo largo de este texto se ha dado por supuesto que el lector tiene acceso a un equipo en
el que puede ejecutar man para cada una de las instrucciónes que se mencionan.
Para buscar entre los manuales son muy prácticas las instrucciones whatis y apropos (o
man −k), y el autocompletado con la combinación de teclas Shift (Mays.) + Esc + !
Precaución : Pueden existir páginas de manual diferentes con el mismo nombre, porque
pertenezcan a secciones distintas dentro del manual, como passwd(1) y passwd(5), o
crontab(1) y crontab(5), y si no se especifica la sección aparecerá únicamente la página
con número de sección inferior. Como ejemplo, frecuentemente sólo se podrá acceder al
manual que explica en detalle las expresiones regulares especificando man 7 regex .
Los números de las secciones (probar whatis intro | sort) representan las siguientes
categorías:
6 Juegos y demos.
La multiplicidad se puede dar no solamente entre páginas del manual, sino también
− como en el caso de las funciones read y exec − entre man y help.
b) Aunque la orden info no abarca tantos mandatos como man, lo hace en mucha
mayor profundidad. Hay que usarla, así como los HOWTOs, FAQs y otros documentos
situados en /usr/doc, /usr/share/doc, /usr/local/doc, etc.
c) También se deben leer con gran detenimiento los mensajes de error en caso de que
algo no funcione, y revisar los archivos log de todos los programas implicados:
Los históricos más importantes son los de sistema. Se encuentran en /var/log/ y son:
messages , syslog , dmesg (que se lee mediante la orden dmesg), utmp (lista de logins
actuales) y wtmp (lista de anteriores ingresos al sistema, que se lee usando la orden last).
Desgraciadamente, para todo esto resulta fundamental tener cierto dominio del inglés
escrito, y más aún si al final acabase siendo necesario buscar información en Internet.
+ (con letra) hacer lo contrario de lo que haga la opción normal chmod, xlock
(con número) abrir el fichero por la línea indicada more, vi
− (sin nada) standard input en lugar del nombre de archivo uso en tuberías
-- (con letras) opciones que no son letras, sino palabras completas --usage
Suelen tener su equivalente de una sola letra, como --help −h
La excepción son el servidor X y sus programas, que
usan opciones largas precedidas de un solo guión : −geometry
(sin letras) Indica que cualquier guión posterior ya no debe
interpretarse como comienzo de otra opción. rm -- − archivo
De nuevo, la excepción son X y sus programas : xinit, Xnest
Nunca se debe recurrir a solicitar ayuda hasta haber agotado completamente toda la
documentación disponible, sin olvidar los README del programa, y haber hecho
experimentos para solucionar el problema: A menudo las cosas se resuelven por ejemplo
simplemente utilizando alguna versión posterior.
La manera más rápida a corto plazo es recurrir a un buscador como Google para
localizar en internet referencias parecidas o que tengan que ver con el problema, ya que
es probable que no seamos los primeros en haberlo tenido. Para ello es muy importante
realizar la búsqueda con habilidad, seleccionando cuidadosamente el conjunto de
palabras o frases a buscar. Siempre es necesario previamente haber leído las instrucciones
de uso avanzado del buscador correspondiente.
Debido al gran incremento en el número de usuarios de software libre, cada vez resulta
más improbable recibir alguna contestación al plantear preguntas en las listas de
desarrollo principales. Es preferible acudir a las de los grupos locales de usuarios que
−por contra− se van haciendo más abundantes y a las que no es necesario dirigirse en
inglés. En ambos casos se deben seguir unas normas de etiqueta elementales (hacer una
búsqueda en internet de la página smart−questions.html para conocerlas). La mayoría de
esas normas también son aplicables cuando se formule la consulta a través de algún canal
de chat de los que disponen las distribuciones y agrupaciones de usuarios.
Cuando el administrador del sistema cometa errores se pueden llegar a dar situaciones
de bloqueo. Casi siempre se trata de un cuelgue aparente −no real− debido a dificultades
en acceder o interactuar con el sistema. Antes de reiniciarlo se debe intentar lo siguiente:
En todo caso, un reinicio sin haber cerrado debidamente será mucho menos peligroso si
se ha tenido la precaución de emplear para todo aquello montado como lectura+escritura
sistemas de ficheros “journalled” (como reiserfs, xfs o ext3) y absolutamente inocuo para
todo lo que se encuentre montado en modo de sólo lectura.
Cuando se trate de una auténtica caída del sistema, habrá que sospechar fallo del
hardware. Se deberá volver a arrancar en modo “single user” para realizar 3 tareas:
comprobar la consistencia de los sistemas de ficheros, revisar los archivos log de sistema
y especificar si es preciso un kernel distinto a utilizar en la próxima botadura, o incluso
una partición raíz diferente.
Sólo en sistemas de ficheros que las permitan, como jfs o xfs. Puede verse a un grupo
como una ACL con nombre. La lista se mira mediante getfacl y con setfacl se cambia.
Sólo en sistemas de ficheros que los permitan, como ext2 o xfs. Las instrucción lsattr
los muestra, y con chattr el superusuario los puede modificar .
La orden mount, sin modificadores, muestra los montajes y si están en modo de sólo
lectura o de lecto−escritura. Con los modificadores −o remount,rw se puede actuar si
se tienen suficientes privilegios, aunque la cosa se complica cuando son montajes en red
porque también interviene el modo en que han sido puestos a disposición del usuario para
ser accedidos desde su equipo concreto.
7− Configuración BIOS.
Muchas placas base permiten restringir la escritura sobre las unidades de disco duro.
Este parámetro es modificable en marcha con el programa hdparm . También hay discos
que permiten protección contra escritura cambiando uno de sus puentes de contacto.
Ya sea una característica del sistema de archivos concreto (2 GB en el caso del sistema
vfat de Windows) o bien una característica del kernel utilizado (4 TB en la mayoría de
versiones de Linux).
10− Corrupción.
O bien del sistema de archivos, o bien sólo del inodo correspondiente. Por eso es
recomendable comprobar los sectores defectuosos al crear cualquier sistema de ficheros.
Si hace tiempo que no se hacen cambios en ese sistema y todo había estado funcionando
bien hasta entonces, habrá que sospechar que el contenido de /var simplemente ha
crecido hasta llegar a colmar la partición en que se encuentre. Comprobarlo usando df .
Ejecutar mesg n para denegar a los otros usuarios el poder enviar mensajes a esa
terminal y recurrir a setterm −store −msg off para silenciar incluso al propio kernel.
Precaución : Esto puede conllevar en algunos sistemas el peligro de dejar de ver cosas
tan básicas como por ejemplo los avisos previos al apagado de la máquina.
El primer paso para optimizar todo sistema Linux consiste en usar un kernel lo más
ajustado posible a las necesidades tanto de hardware como de software.
El tercero indica el número de revisión del código siendo irrelevante si es par o impar.
Las revisiones de código en la rama estable solamente van destinadas a corregir fallos
que se vayan detectando, mientras que en la rama inestable están orientadas a introducir
las características nuevas.
Las principales líneas de desarrollo son en este momento la oficial y la de Alan Cox
(ambas en www.kernel.org).
Para sistemas en producción se hará servir preferentemente una versión lo más reciente
posible de la rama estable del kernel oficial.
En caso de querer aplicar algún parche, éste se tendrá que descomprimir también en
/usr/src de manera que quede al lado del linux, hecho lo cual se entra en el directorio de
linux para aplicarlo usando la orden patch −p1 < ../parche observando que se parchea
antes de compilar, en contraste con otros sistemas operativos en que normalmente sólo se
pueden parchear ejecutables (y ni siquiera suele ser un verdadero parcheo, sino una
substitución).
6.2 Estructura del kernel. Módulos.
− Velocidad
Estos medios se emplean para seleccionar aquellos paquetes que van a ser admitidos y
rechazados e incluso marcarlos o alterarlos si se desea, constituyendo así un cortafuegos
muy potente.
En los núcleos de la serie 2.2.x esto se hacía mediante la herramienta "ipchains" que
podía manejar varias cadenas de reglas de filtrado. Los núcleos de la serie 2.4.x y
posteriores emplean la herramienta "iptables" que permite agrupar las cadenas en
conjuntos llamados tablas.
El caso concreto del Firewall−One sobre Linux se trata de un conjunto formado por un
módulo de kernel −la parte esencial− y varios programas complementarios.
Ello lo sitúa prácticamente al mismo nivel de rapidez (nivel de núcleo) pero con el
inconveniente de permanecer ligado a una versión concreta del kernel Linux :
El Firewall−1 suele emplear un núcleo que viene a quedar bastantes versiones por detrás
del último disponible, y no hace falta remarcar lo que esto significa desde el punto de
vista de la seguridad (dejando aparte el de la eficiencia).
− Adaptabilidad
− No requiere interfaz
− Integración
Como esto no resulta posible en el mundo del software comercial, en el que por diversas
circunstancias se prima la no−compatibilidad, los programas se ven obligados entonces a
englobar todas esas funciones y presentarlo como integración, aunque en realidad es lo
contrario. Ello crea adicionalmente cierta confusión al hacer pensar que son funciones
propias de firewall cosas que en realidad no lo son.
− Escalabilidad
− Seguridad
Por otro lado, las empresas de software se encuentran limitadas por las restricciones
americanas a la exportación de criptografía, por lo que las claves que han de emplear en
los certificados digitales (y por lo tanto en las VPNs) así como las usadas para establecer
túneles ssh, etc. son de las consideradas dentro de la categoría de criptografía débil
(claves de hasta 128 bits).
Linux permite utilizar criptografía fuerte para los mismos fines, no siendo raras claves
de 1024 o 2048 bits.
− Liderazgo en el mercado