Você está na página 1de 49

Curso

Linux
esquematizado.
Versión 0.6

Juanjo García juanjo@eurogaran.com


TEMARIO
1. Definiciones.
1.1 Glosario de términos.

1.2 Linux: Ventajas e inconvenientes.

1.3 Distribuciones.

1.4 Debian: Ventajas e inconvenientes.

2. Licencia GPL.
2.1 Propósito.

2.2 Derechos.

2.3 Obligaciones.

3. Tareas básicas.
3.1 Moverse por el sistema.

3.1.1 Mandatos básicos.


3.1.2 Árbol de directorios y particiones.
3.1.3 Mandatos de búsqueda.
3.1.4 Árbol de procesos.
3.1.5 Colas de trabajos.
3.1.6 Usuarios y grupos. Precauciones.

3.2 Monitorización.

3.2.1 Monitorización del sistema.


3.2.2 Monitorización de la red.

3.3 Mantenimiento y actualización.

3.4 Copias de seguridad.


3.5 Autoayuda.

4. Uso avanzado.
4.1 El intérprete de mandatos. Manejo.

4.1.1 Archivos de configuración. Opciones.


4.1.2 Atajos de teclado. Historia.
4.1.3 Expansión y substitución:
Símbolos especiales, patrones, variables, alias y funciones.
4.1.4 Control del flujo de ejecución:
Tuberías, redireccionamientos, condicionales y bucles.
4.1.5 Elaboración de ejecutables.

4.2 Manipulación de textos.

4.2.1 Fuera de programa.


4.2.2 Dentro de programas especializados: vi , emacs .

4.3 Otras tareas frecuentes.

5. Configuración.
5.1 Configuración de red.

5.2 Acceso a los servicios.

5.2.1 Archivos e impresoras.


5.2.2 Salida a internet.

5.3 Seguridad

5.3.1 Hardware.
5.3.2 Comparticiones.
5.3.3 Programas inseguros. Virus.
5.3.4 Navegación.

5.4 Instalación de programas.


6. Manejo del kernel.
6.1 Fuentes: Versiones. Obtención, expansión y parcheo.

6.2 Estructura del kernel. Módulos.

6.3 Configuración.

6.3.1 Hardware. Recogida de información.


6.3.2 Opciones. Criterios para seleccionarlas.

6.4 Compilación.

6.5 Instalación. Configuración del arranque.

7. Firewall Linux.
7.1 Funcionamiento. Comparación con otros cortafuegos.

7.2 Instalación.

7.2.1 Configuración del núcleo. Módulos necesarios.


7.2.2 Configuración al arranque.

7.3 Reglas: Disposición. Flujo.

8. Servicios de internet.
8.1 Servidor DNS (Bind).

8.2 Servidor web (Apache).

8.3 Proxy (Squid).


1 Definiciones.

1.1 Glosario de términos.

Shareware = El programa se puede copiar y redistribuir, pero no así su código fuente.

Shared Source = El código del programa está disponible, pero sólo para ser consultado.

Open Source = Además de estar disponible, el código fuente se puede modificar.

Free Software = Aparte de poderse modificar, se puede redistribuir ya modificado.

GPL = Una de las varias licencias de distribución de software libre.

Sistema Operativo = Núcleo (kernel) + Programas de sistema (control de admisión,


intérpretes de mandatos, herramientas para manejo de archivos...) + Aplicaciones de
usuario (editores de texto y demás programas).

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.

Linux = Marca registrada, comunidad de usuarios y programadores ...


Linux designa en rigor solamente un kernel, siendo GNU el sistema operativo.

GNU = Proyecto de reelaboración de Unix en software libre.

POSIX = Conjunto de normas que definen un sistema operativo ideal de tipo Unix.

root = Administrador del sistema, también llamado superusuario.

shell = Intérprete de órdenes en modo texto. De forma genérica, interfaz con el núcleo.

X = Servidor de gráficos. Un ejemplo de programa cliente sería un gestor de ventanas,


que puede −o no− formar junto con otros programas un entorno de escritorio completo.
Un computador ejecuta en realidad un solo programa: El que carga al arrancar. Quienes
hayan tenido los primeros PC o máquinas similares que arrancaban desde discos
extraíbles recordarán que para cambiar de programa bastaba reiniciar con el disco
adecuado. Es el planteamiento seguido aún por la mayoría de aparatos de videojuegos.

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 :

El lenguaje de programación C fue el primero pensado para poderse ejecutar sin


cambios en cualquier máquina, por haber independizado y puesto aparte lo que
constituye el paso (“compilación”) a las instrucciones específicas de cada procesador:
El programa compilador resulta ser también un programa en C, por consiguiente se
puede compilar a sí mismo, lo que resuelve el problema.

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.

Pero evidentemente la portabilidad entre plataformas de hardware sólo se puede llevar a


cabo cuando se dispone del código llamado “fuente” (el previo a la compilación).

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.

La mayor capacidad y potencia alcanzadas en ese momento ya permitían ejecutar un


entorno gráfico, por lo que comenzaron a aparecer sistemas gráficos basados en DOS,
fundamentalmente OS/2 (de IBM) y Windows (de Microsoft). Éste último logró
imponerse finalmente gracias a acuerdos con los fabricantes/ensambladores de PCs
(incluído paradójicamente IBM) para que lo suministraran preinstalado en todos los
equipos. Ésta sigue siendo todavía la razón fundamental de su mayor difusión.

En cuanto a la razón para producir sistemas operativos y programas sin cobrar por ello:

− En el caso de individuos, lo que pasa es que en realidad no requiere normalmente un


gran esfuerzo debido a la enorme cantidad de otros programadores que suelen trabajar
simultáneamente sobre el mismo proyecto y porque se evita la duplicación de trabajo que
se da entre competidores comerciales. En cualquier caso, nunca va a implicar un esfuerzo
superior al que el programador esté dispuesto a aportar voluntariamente.

− En el caso de instituciones y empresas, las razones son otras:


Imaginemos el caso1 de una empresa que hubiera creado por ejemplo un navegador
web. Jamás podría llegar a venderlo masivamente, incluso aunque fuese mucho mejor y
más rápido que el de uso ya generalizado. En casos así, en los que el coste de continuar el
desarrollo es superior a su rentabilidad esperada, liberar el programa dejándolo a cargo
de voluntarios competentes resulta una opción que garantiza la continuidad. La otra
opción, a mitad de camino de la anterior, sería permitir la libertad de uso y distribución
promocional, pero no la de modificación. Esto es lo que se llama “freeware” y nunca se
debe confundir con “free software” ya que los derechos del público siguen restringidos.

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.

En resumen, son cosas diferentes el volumen de la oferta de software y la disponibili−


dad del mismo, concepto que debe tomar en cuenta también la facilidad de acceso a esa
oferta y la no limitación de funcionalidades.
1 caso real
1.2 Linux: Ventajas e inconvenientes.

VENTAJAS de Linux:

* PRECIO: Linux no requiere pago de licencias, ni por servidor


ni por estaciones de trabajo, a diferencia de los sistemas
operativos comerciales, en los que el presupuesto para la
misma instalación alcanza un precio considerablemente mayor.

* Linux viene acompañado de varios miles de programas, incluyendo


todos los necesarios para permitir ofrecer cualquier servicio a la red:
correo, news, gopher, VPN, www, ... así como multitud de
navegadores. (Es utilizado en más del 70% de los grandes servidores
de Internet).
En contraste, en un sistema operativo comercial cada nuevo programa
conlleva un nuevo desembolso para el usuario.

* La ofimática está completamente cubierta en Linux, incluso a nivel


de una total compatibilidad con la de Windows. La única diferencia
está en el precio, que es cero en el caso de Linux.
Lo mismo puede decirse por ejemplo sobre los programas de
diseño CAD para ingeniería.

* CONECTIVIDAD: Linux es una variante de Unix, el sistema


en el que nacieron las redes, por lo que dispone de mucha más
capacidad para gestionarlas que otros sistemas operativos cuya
implementación de las mismas no es más que un añadido.

* ESTABILIDAD: Es un sistema operativo extraordinariamente


fiable y robusto; no se cuelga jamás (salvo fallo del hardware).

* SEGURIDAD: Linux permite definir cualquier grado de seguridad.

* Todos los Windows son vulnerables a virus, mientras que ningún


Unix lo es. (El término "antivirus para Linux" hace referencia a
aquellos antivirus para sistemas Windows que se ejecutan
desde un servidor de red Linux).

* DEPURADO: Linux es desarrollado por decenas de miles de


programadores experimentados a lo largo de todo el mundo.
Ninguna empresa privada podría permitirse una plantilla tan grande.

* ASISTENCIA: Proporcionada por unos usuarios a otros gratuitamente


a través de listas de correo. Por lo general resulta muy efectiva en
encontrar solución a los problemas en un plazo de tiempo muy corto.
* ACTUALIZACIÓN: Ser "Open Source" (de código abierto)
le permite ser mejorado constantemente.
Por contra, otros sistemas operativos se actualizan de forma
esporádica, habiendo llegado a no salir nuevas versiones
durante más de un año.
Durante este largo periodo entre actualizaciones se está
expuesto a ataques externos provinentes de Internet.
El ritmo de actualización lo decide el usuario, no le viene impuesto.

* ADAPTABILIDAD: Disponer del código da la posibilidad


de optimizarlo para adaptarlo al hardware de cada equipo.
El rendimiento entonces se multiplica.

* CONTINUIDAD: Nunca se volverá artificialmente obsoleto por


estrategias comerciales, como sucede con todo software de pago.
También se han dado casos en los que una gran compañía de
software ha cerrado o simplemente ha dejado de dar soporte
a algunos de sus productos.
Con Linux no podría darse jamás esta circunstancia.

* PORTABILIDAD: Linux es multiplataforma. Puede utilizarse


en PCs, Apple Macintosh, Digital Alpha, PlayStation2, grandes
mainframes IBM, ... incluso fue el primero en poder instalarse
en los nuevos procesadores de 64 bits para PC.
Constituye la única opción seria para redes heterogéneas.

* EFICIENCIA: Linux realiza una excelente gestión de los recursos


(procesador, memoria, etc.) comenzando por que el entorno
gráfico es opcional, por lo que bastan máquinas mucho más
baratas para llevar a cabo las mismas tareas.

* No necesita cargar todos los controladores al inicio, por lo que no hay


que reiniciar cada vez que se instala nuevo hardware o software.

* Como todo Unix, Linux es multiusuario y multitarea real,


mientras que Windows sólo emula dichas características parcialmente.
Esto significa que basta un solo servidor para proporcionar
todos los servicios: No hace falta un servidor de impresión, otro
para correo, otro de aplicaciones, otro para internet...

* El sistema de archivos NTFS de Windows no es fácil de recuperar en


caso de que se corrompa accidentalmente.
Sin embargo, Linux permite elegir el sistema de archivos a utilizar,
pudiendo emplear sistemas con “journalling” de alto rendimiento,
que se autorreparan sin problemas y sin necesitar un “scandisk”, y que
disponen de herramientas efectivas para su recuperación.
INCONVENIENTES de Linux:

* Aunque la instalación del sistema operativo y los programas


suele estar automatizada, la configuración no lo suele estar.
Esto se hace en parte para evitar lo que pasa en otros sistemas,
en los que instalar un programa “que se configura sólo”
a menudo provoca que otros dejen de funcionar.

* Aparte de ser, en consecuencia, bastante más laboriosa, la


configuración requiere además de conocimientos de informática
comparativamente mayores, porque el usuario tiene un control absoluto.

* Por si fuera poco todo lo anterior, en Linux existe además


un mayor número de cosas a ser configuradas:
Los permisos de los archivos, la política de actualizaciones
automáticas, los controladores que se desea tener cargados, etc., etc.

* Linux es muy poco intuitivo, de hecho se puede decir que


hasta llega a ser contraintuitivo a menudo. Ello es debido a que
no esconde la complejidad real de las cosas, y a que su objetivo
es la calidad, no la popularidad.

* Muchos fabricantes de hardware para PC solamente proporcionan


controladores para Windows. (Una excepción la constituyen las
tarjetas de red y −en general− el hardware orientado a servidores).
Los periféricos acaban siendo soportados en Linux, pero con retraso.
En contrapartida, normalmente siguen actualizándose mucho después
de que el propio fabricante ha dejado de hacerlo para Windows.
Hace falta, pues, conocer el hardware que Linux soporta y el que no.

* Incluso a pesar de todo lo heredado de Unix, dispone de menor


cantidad de programas, sobre todo de los destinados al usuario
de escritorio. Esto se ve compensado porque el software resulta
sin embargo mucho más fácil de conseguir (la disponibilidad es
mayor) y suele ser de mejor calidad.

* La internacionalización, aunque buena, no llega todavía a abarcar


tanto número de lenguas como otros sistemas (aunque esta situación
va camino de ser invertida a corto plazo).
Al igual que en sistemas comerciales, resulta por el momento imprescindible
saber inglés para administrarlo a un nivel por encima del básico.

* Carece de promoción comercial. Esto es un gran inconveniente


para el usuario, que no llega a enterarse de que tiene a su disposición
un software técnicamente superior y sin restricciones para su copia.
1.3 Distribuciones.

Aunque Linux y todo el software relacionado está disponible en internet, si se tuvieran


que descargar todos los CDs que ocupa actualmente un sistema completo, probablemente
la factura telefónica resultaría disuasoria.

Por eso existen numerosos distribuidores dedicados a empaquetar y vender Linux.

Los principales son:

− RedHat

Es una distribución estadounidense que posee allá la mayor cuota de mercado.


Fue la primera distribución que permitió llevar una contabilidad del software
instalado en el sistema en cada momento, gracias a la invención de un sistema de
paquetes especial (ficheros .rpm) que es el que luego han utilizado multitud de
distribuciones derivadas.

− Mandrake

Distribución franco−canadiense basada en RedHat, aunque ya ha dejado de ser


compatible con ella. Persigue ante todo la facilidad de uso, por lo que es la más
indicada para el usuario acostumbrado a hacerlo todo en modo gráfico.

− SuSE

Distribución alemana, la más importante en el mercado europeo. También utiliza


el sistema de paquetes rpm de RedHat. Es la distribución que proporciona mayor
número de paquetes después de Debian.

− 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

Compatible con RedHat, pero hecha como Debian por voluntarios.


Para el mercado hispano:

− Esware

Distribución española compatible con Debian.

− Hispafuentes

También española, primero basada en RedHat y posteriormente en Debian.

− Conectiva

Se trata de una distribución brasileña compatible con RedHat que también


dispone de versión en español.

1.4 Debian: Ventajas e inconvenientes.

VENTAJAS de Debian:

* FIABILIDAD: No sufrir presiones comerciales permite ofrecer versiones experimetales


que hacen que sea la más probada antes de ser publicada de forma oficial.

* ACTUALIZACIÓN: Posee un sistema de paquetes propio (ficheros .deb) que


permite por ejemplo actualizar sin problemas un sistema entero, mientras que
para muchas de las otras distribuciones esto significaría borrar todo e instalar de nuevo.

* VOLUMEN: El número de paquetes de software disponibles actualmente


para Debian supera los 8.000, mientras que por ejemplo en RedHat no llega a los 3.000.

* 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:

* DIFUSIÓN: Debian no distribuye comercialmente sus CDs, sino que se limita a


ponerlos en internet a disposición del público. Esto, unido a su gran tamaño,
hace que sea imprescindible disponer de una buena conexión a internet, rápida y barata.
Han aparecido distribuidores (LinEx, Esware...) pero son versiones muy modificadas.

* INCOMPATIBILIDAD con el resto de distribuciones, lo que obliga a tener que adaptar


especialmente para ella muchos programas.
2 Licencia GPL.

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.

Un segundo objetivo es descargar de toda responsabilidad al autor o autores sobre el


posible mal funcionamiento del software: No se dan garantías (aunque después de todo
esto es un punto en común con las licencias de software comerciales).

2.2 Derechos.

En otras palabras... ¿Qué permite hacer la licencia GPL?

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.

En efecto, el software libre no tiene por qué ser necesariamente gratuito.


Sin embargo, en virtud del punto anterior no se puede evitar que otros copien el
producto y lo vendan a su vez, lo que en la práctica asegura que será siempre barato.

c) Modificar sin restricciones todo el código.

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.

El creador o creadores de cada programa ceden los derechos de copia (Copyright)


pero NO los derechos de autor: Sus nombres deben figurar en la documentación
acompañando el producto y se les debe conceder el adecuado crédito.
Si se han hecho modificaciones, se deben agregar los nombres de los autores de
dichas modificaciones para que las posibles quejas no se dirijan a los autores originales.
El software libre no va en contra de los derechos de autor. De hecho sus licencias
están entre las pocas que los protegen. Los programas comerciales normalmente ni
siquiera mencionan el nombre de sus verdaderos autores.

b) Ocultar el código fuente.

Se ha de proporcionar siempre junto con el producto, o como mínimo debe


indicarse una forma de obtenerlo gratuitamente (normalmente una dirección de internet)
y estar dispuesto a facilitarlo en caso necesario, cobrando solamente los gastos de envío.

c) Cambiar la licencia, incluso tras haber modificado el software.

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.

Además, una copia de la licencia GPL debe incluirse siempre obligatoriamente


para que el receptor del software conozca sus derechos de uso, copia y modificación.

Resumiendo: El software GPL no es de dominio público, sino que tiene restricciones.


Son restricciones encaminadas a evitar que nadie le imponga restricciones mayores.

La licencia GPL ha proporcionado al software libre una cobertura legal que resulta el
factor fundamental para explicar su éxito.

Lo normal es que el usuario encuentre en esta licencia más interesante la libertad de


copia que la de modificación. Sin embargo, también para el usuario no interesado en el
código fuente resulta muy beneficioso disponer de él :

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.

Tipo de licencia Comercial Shareware/Freeware GPL BSD “Dominio Público”


(sin licencia)

Libertad de uso NO NO (tiempo limit.) SI SI SI

Libertad de copia NO SI SI SI SI

Libertad para vender NO NO 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 :

− Las leyes destinadas a la protección de los derechos de autor protegen paradójicamente


los intereses de compañias que ocultan los nombres de las personas autoras del software
que comercializan.

− La cláusula de exención de responsabilidad figura en todas las licencias, comerciales y


no comerciales. Por lo tanto es equivocada la idea de que pueda existir nunca una
empresa a quien poder reclamar si algo no funciona.

− La única libertad que otorga el freeware es la de copia, y a menudo también limitada.

− La obligación de otorgar reconocimiento a los autores es casi la única diferencia entre


el software acogido a la licencia BSD y el de total dominio público.

− 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:

exit Palabra latina, del verbo salir.

halt Del alemán. Literalmente, alto, apagar el sistema (ver también shutdown).

reboot Reiniciar, re−botar (en el sentido de botadura).


No le es permitido a cualquier usuario ejecutar esta orden o la anterior.

man Originalmente, reproducción del libro manual de instrucciones de Unix.


Requiere como argumento el nombre de la instrucción a consultar.
Por ejemplo, man halt, o man man (ver también man info).

help Por el momento, baste con saber que aquellos mandatos que carecen
de ayuda mediante man la tienen mediante help, y viceversa.

Otra ayuda muy útil la proporciona la característica de autocompletado de palabras en


línea de órdenes al pulsar la tecla tabulador. Cuando no se recuerde exactamente el
nombre de la instrucción, mostrará todas las posibles alternativas.

3.1 Moverse por el sistema.

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.

pwd (no lleva argumentos). Simplemente dice cuál es el directorio actual.


Ver también el manual de las instrucciones whoami, id y tty.

ls Lista el contenido del directorio actual. Admite el empleo de comodines:


* representa cualquier conjunto de caracteres incluyendo ninguno, y ? un
solo caracter. Suele también existir una instrucción dir .

cat Vuelca el contenido de uno o varios ficheros en otro, o en pantalla.


No cesa hasta llegar al final: Detener usando Ctrl+S (continuar Ctrl+Q).
También está disponible la instrucción more y su versión mejorada less .
Como el resto de instrucciones, cat admite el uso de comodines.

cd Cambiar de directorio. Para volver al directorio anterior: cd −

cp Copiar un fichero. Primera orden que vemos que requiere 2 argumentos.

mv Mover, cambiar un fichero de sitio, o simplemente de nombre.


Precaución: La instrucción rename , en caso de estar disponible, puede ser
muy distinta al renombrar de otros sistemas operativos.

rm Borrar, eliminar un fichero. PRECAUCIÓN: Salvo que se configure


para ello, no pide confirmación: No evitará que se hagan estupideces.
Caso verídico: Hacer rm −rf * en el directorio / creyendo estar en /tmp.
Muchos hablan con frustración de Unix porque se da por supuesto
que el usuario sabe en todo momento lo que hace.
(Ver también la info sobre la orden shred ).

rmdir Borrar directorio. Cuando no está vacío lo usual es hacer rm −rf

mkdir Crear directorio.


(Para crear un fichero lo normal es comenzar directamente a modificarlo).

3.1.2 Árbol de directorios y particiones.

En Unix se define un único árbol de directorios, que puede o no corresponder a un


único sistema de ficheros. En caso de existir varios sistemas de ficheros (las llamadas
“unidades” en otros sistemas operativos) resulta necesario asignar a cada unidad (cdrom,
floppy, etc.) un lugar dentro de ese árbol único: Es lo que se llama “montar” la unidad, y
consiste simplemente en especificar dicho lugar mediante la orden mount.

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 :

. Un punto es sinónimo del directorio en que actualmente nos encontremos.

.. El doble punto es una referencia relativa al directorio inmediatamente superior.

/ El caracter separador es el único que no puede incluirse en un nombre de archivo.


Un nombre que empiece con el símbolo / lo que define es un camino absoluto.
Si empieza por cualquier otra cosa será relativo (al directorio actual).
La barra sin nada detrás designa por lo tanto al directorio raíz:
No hay ninguno superior, y contiene todos los siguientes.

/boot En este directorio se suelen poner el kernel y demás archivos utilizados


por el programa de arranque ( típicamente lilo , modernamente grub ).
En general, los directorios añadidos por el standard POSIX son de 4 letras.

/bin binarios; ejecutables “de sistema”: Intérpretes y mandatos imprescindibles.


En Unix no hay extensiones específicas (como “.exe”) para distinguir los
ejecutables, porque el sistema operativo no las necesita (ver man file).

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

/lib “librerías” (bibliotecas) de subrutinas utilizadas por los ejecutables


de sistema (los que se encuentran en /bin y /sbin) y por el propio núcleo.
En este directorio están por ejemplo las bibliotecas del lenguaje C.
Las que se cargan dinámicamente en tiempo de ejecución tienen la
extensión .so (de “shared object”), que en otros sistemas vendría a ser
.dll (“dynamically linked library”) con la diferencia de que las .so de sis−
tema no necesitan residir permanentemente en memoria desde el arranque.

/usr Destinado a contener programas no de sistema (aplicaciones de usuario).


Posee a su vez sus propios subdirectorios bin , sbin , lib ... Aquí se hallan
la gran mayoría de cosas, notoriamente toda la parte gráfica.
Dentro de /usr/local se instalan los programas que vayan fuera del control
del gestor de paquetes de la distribución.

/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

/etc Contiene los archivos y guiones de configuración de todos los programas,


tanto los que van en /bin como de los de /sbin o /usr/bin; edit to configure.

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

/root Cuando se trata del administrador, su directorio de usuario conviene


tenerlo por seguridad fuera de la partición donde esté /home.
Posible confusión con “root directory” o directorio raíz / que es el que
usa por omisión cuando por algún motivo no existe /root (primeros Unix).

− Los siguientes 2 directorios no forman inicialmente parte de Linux:

/opt Opcionales. Donde se instalan frecuentemente programas comerciales.

/misc Misceláneos. Similar al anterior pero con software del distribuidor.

− Los siguientes 2 directorios contienen archivos denominados especiales:

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

/proc Característico de Linux. Similar al anterior pero para envío/recepción no


a dispositivos, sino al núcleo. Sin existencia real en disco duro ni RAM.
Error de principiante: Intentar eliminar /proc/kcore por pensar que ocupa
un gran espacio inútil en disco. (En realidad refleja la RAM).
Un último tipo de archivo especial lo constituye el enlace, similar al “acceso directo” de
otros sistemas operativos: Un enlace permite usar un fichero en otro directorio distinto,
evitando tener que duplicarlo. No es en realidad una característica del sistema operativo,
sino del sistema de archivos, y puede ser de de dos tipos:

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

ln Orden de crear un enlace. Con el modificador − s (o − sf) lo crea simbólico.


Consultar también los manuales de link, unlink, lndir, y el modificador − s
del mandato cp.

ls − l Muestra los enlaces simbólicos en el directorio (ver también readlink).

ls − a Para ver los archivos ocultos (No se pueden considerar archivos especiales
ya que simplemente su nombre comienza con un punto.)

mc Completo navegador de archivos en modo texto. Conviene conocerlo.

La abundancia de información y recomendaciones sobre el árbol de directorios contrasta


con su gran escasez en cuanto al modo de crear y disponer las particiones:

/boot Ha de corresponder a la partición más pequeña (16 MB son suficientes).


Muchos gestores de arranque necesitan que sea una partición primaria
y que además se encuentre cerca del principio del disco (suele ser la
primera). Como se va a montar − por seguridad− en modo de sólo lectura,
están contraindicados sistemas de archivos journalled: se aconseja ext2.

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

Como la arquitectura del PC admite solamente 4 particiones primarias como máximo, si


se han consumido ya las 3 primeras, la otra se ha de dedicar a contener las secundarias:

/ La partición raíz se ha de montar en modo lectura+escritura si no se desea


tener que crear particiones para /tmp, /root o /etc (piénsese en /etc/mtab).
Por ello es conveniente utilizar un sistema de ficheros de tipo journalled.
Está indicado ext3 porque permite en caso de emergencia ser montado
como ext2 por cualquier kernel de Linux, y soporta atributos especiales.
Dependiendo principalmente de las necesidades de /root (copias de CDs,
etc.) 1 GB puede no ser suficiente. 2 GB resulta casi siempre demasiado.
Se puede crear una segunda partición raíz para emergencias volcando su
contenido y retocando el nuevo archivo /etc/fstab .

− A diferencia de la anterior, el resto de particiones son opcionales:

/usr Cuando no se instalen programas, es importante desde el punto de vista


de la seguridad tener montada esta partición como sólo lectura (usar ext2).
En estos días no resulta exagerado para ella un tamaño de unos 6 a 8 GB.

/usr/local Tener este directorio (y /home) en su propia partición permite reinstalar o


cambiar fácilmente toda una distribución. Sirve todo lo dicho para /usr.
Nota: Precisa que /usr se haya montado previamente.

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

/home/pub A compartir en red, frecuentemente en modo “sólo lectura” (usar ext2).


Ejemplo típico: un volcado de todos los CDs de la distribución para poder
instalar los paquetes de software rápida y cómodamente (unos 10 GB).
Nota: Precisa que /home haya sido montada previamente.

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

find Una de las necesidades más frecuentes es encontrar un determinado


archivo. En find se generaliza como la búsqueda de aquellos archivos que
cumplan una determinada condición, usualmente tener el nombre buscado.

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

type / where Para localizar mandatos; se restringe la búsqueda a aquellos directorios


que figuran en PATH (una variable del shell). Si el mandato corresponde
a un archivo ejecutable, muestra su localización, y si no, dice de qué se
trata: si de uno de los mandatos de shell, o de algún alias... Las órdenes
whereis y which en cambio están limitadas a archivos ejecutables.
No tiene nada en común con la orden DOS del mismo nombre, pero
sirve de complemento a la orden file para determinar el tipo de archivo.

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

En Unix hay dos formas de definir textos: mediante patrones de shell, o


mediante expresiones regulares. Mientras locate emplea exclusivamente
patrones de shell, grep emplea exclusivamente expresiones regulares, y
find puede utilizar las dos cosas (con los modificadores −name o −regex).

Ambos son equivalentes si la secuencia de caracteres sólo contiene letras,


pero los caracteres especiales tienen significados y tratamiento distintos,
comenzando porque una expresión regular jamás necesita comillas:
Por ejemplo, grep −lr palabra directorio proporciona la lista de archivos
pertenecientes al directorio “directorio” que contienen la palabra “palabra”
grep −r palabra . muestra las líneas en que aparece ’palabra’ en archivos
pertenecientes al presente directorio, representado por el punto.
3.1.4 Árbol de procesos.

Al igual que existe un árbol de directorios, en Unix existe asimismo un árbol de


procesos (ver la instrucción pstree y sus modificadores −Gnucl así como la opción
--forest de la herramienta ps ).

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

La excepción a lo anterior son los procesos arrancados mediante la orden nohup


que al quedarse huérfanos, en lugar de morir son “adoptados” por otro proceso (en Linux
el propio proceso init ).

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.

2 Programas que se están ejecutando permanentemente (bucle infinito).


3.1.5 Colas de trabajos.

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 :

1− Una la proporciona el propio intérprete de mandatos. Se llama background y es


simplemente una lista de procesos hijos en espera de que finalize su ejecución. Se
gestiona a través de las órdenes & , bg (para enviar a cola), wait , fg (para sacar de cola),
y jobs (para listar las tareas).

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”).

Todas las colas tienen en común la característica de existir independientemente para


cada usuario (orientado a que sean administradas por ellos mismos), a diferencia de otros
sistemas operativos en los que todos los usuarios comparten las mismas colas (orientado
a que sean gestionadas por el administrador del sistema).

Existen herramientas especializadas más complejas para programación de tareas, tales


como gnqs o dqs .
3.1.6 Usuarios y grupos.

Aunque en Unix existen un árbol de directorios y otro árbol de procesos, la analogía


con usuarios no llega a ser completa, porque solamente el usuario raíz puede crear a otros
que dependan de él, y usar sin restricciones las herramientas para la gestión de grupos
(groupadd groupdel groupmod vigr) y de usuarios (useradd userdel usermod vipw chfn).

No es recomendable crear usuarios cuyo nombre contenga letras mayúsculas, porque


aunque el sistema los maneja, algunos protocolos −en concreto el de correo−no lo hacen.

La existencia de usuarios y grupos no aporta en realidad ninguna nueva funcionalidad a


un sistema operativo, sino limitaciones. Pero esas limitaciones sí aportan algo: seguridad.
La gran mayoría de las cuestiones referentes a la seguridad en un sistema operativo
acaban estando relacionadas de una manera u otra con el tema de los usuarios y grupos.

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.

− La posibilidad o imposibilidad de lectura o escritura sobre un determinado directorio


tampoco se propaga recursivamente a sus subdirectorios (que están en otros inodos), a
diferencia del permiso de ejecución, al que se ha reservado esa propiedad.

Precauciones

Un sistema se puede congestionar hasta llegar a quedarse prácticamente bloqueado


cuando se agotan o bien el espacio en el disco duro o bien la memoria disponible :

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.

2) En el momento en que el sistema operativo detecta que se ha agotado la memoria


disponible comienza a matar procesos, y lo hace prácticamente al azar. Para evitar esta
situación, se pueden tomar medidas de dos tipos:

− Darle un tamaño suficientemente grande al espacio de intercambio (swap), y si es


necesario crear otros archivos de swap adicionales. Existe incluso un daemon para ir
haciendo esto de forma automática. En todo caso, con ello el problema simplemente se
transforma en el anterior.

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

3.2.1 Monitorización del sistema.

La más inmediata la proporciona el contenido del directorio virtual /proc . Muchos de


sus recursos requieren privilegios, igual que muchos de los mandatos de monitorización.

A) Máquina.

El fichero virtual /proc/cpuinfo contiene toda la información que el kernel conoce


acerca del procesador.

Si se ha de compilar un núcleo hará falta además revisar /proc/pci o ejecutar lspci ,


que interpreta y muestra esa misma información acerca de los periféricos PCI presentes.

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.

Haciendo cat /proc/meminfo se obtiene, de forma similar a cpuinfo, información sobre


la memoria −tanto RAM como de disco− y su nivel de ocupación. La orden free
presenta de forma diferente toda esa información al usuario. Ver también vmstat .

Para detectar fallos físicos, memtest−86 es una buena herramienta de diagnóstico.

C) Disco duro.

La orden df (disk free) muestra de una manera rápida el porcentaje de ocupación de


todas las unidades montadas. Es interesante volver a ejecutarla con el modificador −i .

En cambio du (disk usage) es para un fichero o un directorio determinados. La lentitud


de esta instrucción proviene de que para conocer el tamaño de un directorio es necesario
evaluar el tamaño de sus subdirectorios, y así sucesivamente.

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.

En Linux, todo proceso aparece en el directorio /proc en forma de subdirectorio bajo


su número de proceso como nombre, lo que proporciona otra forma de acceder a la
información de cada uno específicamente.

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.

Si lo que se desea es manejar procesos −no solamente monitorizarlos− se debe usar la


orden kill sobre el número identificativo del proceso. La orden killall es idéntica, pero
aplicada sobre el nombre del programa (el inconveniente es que actuará sobre todos los
procesos de igual nombre). Ejemplo: kill −9 26723 mata el proceso 26723 (y sus hijos).

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.

El modificador −f de la orden tail permite hacer el seguimiento de cualquier archivo log


lo cual es aplicable tanto a la monitorización de procesos como a la de usuarios, aunque
last es la orden específica para el histórico de usuarios. El programa sac también es de
utilidad.
3.2.2 Monitorización de la red.

Se comienza ejecutando ifconfig y route para conocer el estado de las interfaces,


tcpdchk y testparm para comprobar configuraciones, y ping para confirmar que haya
comunicación.

Si el núcleo es un Linux de la serie 2.4 se puede invocar a continuación iptables −L


para saber los ports que se han dejado abiertos y si existe conversión de identidades IP.
El programa nmap comprueba esas conexiones desde el punto de vista de la seguridad.

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.

La actividad en la máquina reflejará la actividad del resto de la red sólo en la medida


que el tráfico pase a su través, ya sea porque se trate por ejemplo del servidor de archivos
o del gateway de salida a internet.

La monitorización de la red en su conjunto necesita herramientas adicionales (sniffers)


como tcpdump cuya efectividad disminuirá mucho si el concentrador de la red es un
conmutador “inteligente” (switch) en lugar de trabajar en modo promiscuo (hub).

Para monitorizar intentos de intrusión y otros ataques, lo mejor es emplear herramientas


como snort orientadas a producir el menor retardo posible en el manejo de los paquetes.

3.3 Mantenimiento y actualización.

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.

Aunque en el momento de actualizar se tengan que montar los correspondientes


sistemas de ficheros en modo de lectura+escritura, no hay que olvidar volver a montarlos
como sólo lectura una vez acabada la operación.
3.4 Copias de seguridad.

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.

Es fundamental diseñar una política de copias de seguridad adecuada a las necesidades y


al volumen de datos a copiar. Las cosas a decidir son:

– Qué datos se van a copiar.


– El sustrato sobre el que realizar las copias.
– La periodicidad (diaria, semanal, mensual...).
– La rotación que se le va a dar a cada nivel de periodicidad.
– Si las copias van a ser completas o incrementales.
– Si han de poder ser leídas o manejadas desde otros sistemas operativos.
– Automatizar o no el proceso.
– Empleo de la red para realizar las copias.

DATOS

Es importantísimo comenzar haciendo una rigurosa selección de los datos a copiar. Se


debe evitar al máximo incluir cosas como el directorio /proc o la caché del proxy.

Normalmente se copiarán partes de /home (datos de usuarios) o de /var (bases de datos,


webs...). Si interesa la configuración del sistema, se copiarán partes de /etc y /usr/local .

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

A decidir según dos criterios: la variabilidad y la propensión a fallos del sistema.

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.

Fiabilidad: Si por ejemplo se dispone de un sistema de almacenamiento de datos NAS,


que avisa cuando uno de sus discos duros se estropea, pudiendo ser sustituido sin
necesidad de parar la máquina y sin que ello signifique pérdida de datos, entonces la
copia de seguridad es necesaria sólo para cubrir los riesgos de incendio, rayo y similares,
que se dan con mucha menos frecuencia. (El fallo humano se puede cubrir guardando
copias de seguridad parciales en el propio NAS).

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.

En el disco duro, un archivo se halla repartido en distintas áreas normalmente no


contiguas. El primer paso es convertir ese conjunto en una unidad (no solamente
presentarlo como una unidad, cosa que ya hace el sistema operativo).

Como primera consecuencia lógica aparece la posibilidad de concatenar no solamente


las partes de un archivo, sino sumar a la cadena también otros archivos.

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.

tar −cf /dev/st0 MiFichero.txt MiDir/ MiotroFichero.exe


En este otro ejemplo se guardan 3 cosas, un directorio y dos archivos,
directamente sobre cinta. No se ha usado el modificador z porque la copia
en cinta está pensada para ser muy robusta, siempre que no se comprima.
Se deberá usar z cuando el volumen a copiar supere al disponible en cinta.

El descriptor /dev/nst0 hace referencia al mismo dispositivo, pero con la


diferencia de que no rebobinaría la cinta terminada la operación, lo que
permite añadir otros backups a continuación (se vuelve necesario el modi−
ficador --label para distinguirlos). Posteriormente, mt /dev/nst0 rewind
serviría para rebobinar la cinta, y mt /dev/nst0 offline la expulsaría.

tar −xzf MiBackup.tgz


El modificador x −extraer− sobreescribirá archivos con los contenidos en
la copia, por eso es importante hacer previamente tar −tzf MiBackup.tgz
−que muestra el contenido− o bien tar −dzf para asegurarse.

Ver también en el manual de tar los modificadores v, p y --absolute−paths.

Una curiosa aplicación de tar es substituir a cp conservando fechas de


archivos, estructura de enlaces, propietarios, permisos y demás atributos:
cd OrigenDir ; tar −cf − . | tar −C DestinoDir −xf −
Esto en Linux no es necesario porque la instrucción cp de GNU posee el
modificador −a (salvo que se desee usar además compresión porque deba
por ejemplo pasarse a través de la red como con el caso de tener un equipo
que se dedica a servidor de copias remotas).

Mandatos relacionados con tar son también ar , bar , jar y shar .


cpio Es una generalización de tar para manejar backups con otros
formatos. Es robusto frente a partes deterioradas o “protegidas”,
permitiendo copias de seguridad de cosas parcialmente ilegibles.
Por ejemplo, si se desea tener una copia de seguridad de un CD
que haya sido imposible realizar de otro modo:
cd /cdrom ; find −print0 −mount | cpio −dump0 ~/MiDir
para grabar posteriormente otro CD con el contenido del directorio
creado (No olvidar volver a darle la misma etiqueta de volumen).

dump / restore Están pensados para copias incrementales de particiones enteras.


Permiten ir reemplazando el soporte físico cuando se agota.
Amanda o afbackup son sistemas de backup aún más elaborados.
Ver también taper .

dd No es propiamente un programa para copias de seguridad. De he−


cho, se engloba dentro de los útiles para manejo de ficheros, junto
a cp, mv, etc.

Ejemplos (a ejecutar como superusuario) :

dd if=/dev/hda of=bootsector.raw bs=512 count=1


para crear un backup del sector de arranque del master primario.

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.

Una de las principales características de dd es la de poder realizar


conversiones sobre los datos (ver también od ).
Herramientas de compresión.

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 .

bzip2 / bunzip2 Usa una combinación de algoritmos. Proporciona mayor compre−


sión pero a costa de un mayor consumo de tiempo y procesador.
También lo incorpora tar en forma de modificador −j o −I .

zcat / zless Para ver archivos comprimidos sin tener que descomprimirlos.
(Ver también bzcat , bzless , zmore , bzmore , etc.).

split Aunque no es una herramienta de compresión, permite guardar un


fichero sobre soportes en los que −en pincipio− no cabría.

Herramientas de comprobación.

Para asegurarse de que no hay diferencias entre la copia y el original.

cmp Compara dos archivos y simplemente determina si son distintos.


Ver también las instrucciones comm y dircmp .

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:

1 Programas y demás ejecutables que se pueden invocar desde shell.

2 Llamadas al sistema (funciones proporcionadas por el kernel).

3 Funciones de bibliotecas (principalmente libc).

4 Archivos especiales (fundamentalmente los situados en /dev ).

5 Archivos de configuración. Normativas sobre archivos. Formatos.

6 Juegos y demos.

7 Misceláneos, incluyendo procesamiento de texto.

8 Mandatos para operar, mantener y administrar el sistema.

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.

La mayoría de instrucciones admiten los modificadores −h o --help para mostrar una


ayuda más breve. En general, es recomendable proceder siempre siguiendo el orden :
man instrucción −> help instrucción −> instrucción con los modificadores −h o --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.

3.5.1 En caso de no disponer de man ni help adecuados.

Cuando no se tenga documentación de una instrucción o programa, puede ser útil la


siguiente tabla orientativa de los significados más usuales que tienen las letras de opción.
En los ejemplos, los puntos suspensivos señalan la posibilidad más probable, hasta el
punto de ser omitidos por completo en aquellos casos en que resultarían ser demasiados.

Con argumentos Posibles significados Ejemplos

−a NO all (todos) ...


ascii grep, gzip, mc
SI append (añadir o agregar) tee, ar, mail

−b SI block (tamaño de bloque) ...


buffer (tamaño de buffer) less, smbclient
border (tamaño del borde o margen) xterm, emacs
NO bytes (modo de salida) free, cpio ...
binary (modo binario) md5sum, whereis
batch (modo de ejecución no interactivo) gimp, top
brief (modo de salida abreviado) file
bus hdparm, lspci

−c NO check (comprobar) sort, mke2fs ...


compression, compaction (relacionado con −z ) poff, pstree
SI (numérico) count (contar, número natural, como −n ) eject, from
SI (no num.) compile, command (procesar instrucciones) gcc, sh, su ...

−d SI / NO debug, diagnostic (depurar) ...


directory (directorio) if, apache
SI delete (eliminar, PRECAUCIÓN) tar, tr, losetup
NO daemon (modo de ejecución) run, fdmount

−e SI exec (ejecutar instrucciones, semejante a −c ) sed, mysql ...


exclude (exceptuar de la acción, contrasta con exec) dump, par
SI / NO extract (extraer, en programas de compresión) unace, unrar
Con argumentos Posibles significados Ejemplos

−f SI file (archivo) ...


NO force (forzar, PRECAUCIÓN) ln, rm, rmmod
fake (fingir, contrario de lo anterior, similar a test) mount

−g SI group (grupo, relacionado con −u ) useradd, lsof...


NO graphic interface (modo de ejecución gráfico) vim, mtr

−h NO help (ayuda) ...


human (modo de salida más facilmente legible) du, df
SI / NO headers (encabezamientos) w, nl, lpr ...

−i NO interactive (pedir −o no− confirmación) ...


insensitive (tratar igual mayúsculas y minúsculas) locate, diff
ignore (ignorar cosas, normalmente errores) make, top, env
invert (invertir la salida de alguna forma; ver −r ) ico, kfax
SI include, install, insert dpkg, rpm ...
SI / NO initialize; initial value (iniciar; valor inicial) expand, clisp

−k NO keep (mantener, evitar la normal eliminación) rman, bzip2 ...


kill (eliminar, PRECAUCIÓN, contraste con keep) fuser, sudo

−l NO list (producir listado) fdisk, pgrep ...


long (no siempre en el sentido de --verbose ) cmp, mkisofs
log (anotar, también relacionado con los anteriores) xterm, cvs
SI / NO lines (líneas) col, wc, nm ...

−n SI number (número natural, con cualquier propósito) lp, dmesg ...


NO not (negar algo, normalmente parte de la salida) sed, mesg ...

−o SI output, object−file (archivo de salida) ...


option set, mount

−p NO print (escribir salida) read, cal ...


SI port (en programas relacionados con TCP/IP) nmap, sshd ...
protocol (también en ese mismo tipo de programas) iptables
prefix (prefijo) bison, mktemp

−q NO quiet (silencioso, lo contrario de --verbose ) gdb, ping ...


La práctica tradicional es que sea la verborrea
lo que haya que solicitar de forma explícita.

−r NO recursive (aplicar a los directorios recursivamente) ...


reverse (invertir la salida de alguna forma) cat, xterm ...
restrict (restringir) bash, ps
recover (recuperar) vim
Con argumentos Posibles significados Ejemplos

−s NO silent (silencioso, en mayor grado que −q ) ...


SI size (tamaño) shred, buffer...

−t NO test (probar, prueba) lilo, unzip ...


SI terminal (en desuso progresivo) skill, ul, emacs
SI / NO tag (etiqueta para localizar párrafos) fmt, vi ...

−u SI user (especificar usuario) ...


NO update (actualizar) man, mv ...

−v NO verbose (información sobre la ejecución) ...


version (información sobre el programa) ...
−V suele ser --version , salvo pocas excepciones: fsck, lsof, sox

−w SI width (anchura) ptx, banner ...


SI / NO warnings (habilitar/deshabilitar mensajes de aviso) passwd, jw ...
NO wait (espera) host, open ...
write (escribir en dispositivo) mount,hwclock

−x Mismos usos y significados que −e .

−y NO yes (no pedir confirmación, PRECAUCIÓN) e2fsck, apt-get

−z NO zip (formato de salida comprimido) ...

−? NO help (equivale a −h ) mysqld, gv ...

+ (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

MAYÚSCULAS. Se recurre a las mayùsculas cuando ya ha sido utilizada la letra que


correspondería a esa opción. Esto implica 2 cosas: Primero, que se da ambigüedad (lo
que en un programa es − V en otro es − v y viceversa). Segundo, que cuando un
programa necesita recurrir a las mayúsculas, normalmente tiene ya tantas opciones que es
imposible prescindir de su documentación. Por eso las mayúsculas no han sido incluídas.
3.5.2 En caso de tener finalmente que buscar ayuda en internet.

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 de empezar más útil a largo plazo es leer la FAQ de comp.unix.questions


y otros documentos que se encuentran en ftp://rtfm.mit.edu/pub/usenet/news.answers

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.

3.5.3 En caso de cuelgue.

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:

reset Cuando en la terminal de texto comiencen a aparecer caracteres extraños


de forma incontrolable, habrá que introducir esta orden “a ciegas”.
Es como una orden clear, pero más radical. Alternativa: stty sane

El núcleo normalmente se compila para que responda a la combinación de teclas


Alt + PetSis (SysReq) + .... cada una de las siguientes teclas, por orden consecutivo:
R Acceso directo del teclado al núcleo.
E Intenta terminar todas las tareas.
I Mata todos los procesos en ejecución, salvo init.
K Mata sólo los procesos de esa terminal y la reinicia.
S Sincroniza (guarda los cambios realizados en archivos).
U Lo vuelve a montar todo en modo de sólo lectura.
B Envía la orden de reinicio (por software).
Si todo lo anterior falla, se ha de intentar entrar desde otra máquina mediante telnet, ssh
o cualquier cosa que haya disponible antes que recurrir al botón de reset.

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.

3.5.4 En caso de no poder escribir sobre un determinado fichero.

Habrá que revisar :

1− Permisos y pertenencia del fichero.

Un ejemplo típico es el de los programas de sonido que producen un mensaje de error


por no tener permisos de escritura sobre el archivo especial /dev/dsp :
Se mira que exista el grupo audio y en su caso se crea haciendo groupadd −g 29 audio
(números de identificación de grupo inferiores a 100 son destinados a sistema). Se hace
chgrp audio /dev/dsp; chmod 660 /dev/dsp; y por último se agrega a ese grupo el
usuario afectado usando gpasswd −a ... o bien mediante vigr directamente. El mismo
tipo de procedimiento se aplica en general para cualquier archivo de dispositivo.

2− Permisos y pertenencia del directorio en que se encuentra.

Es lo primero a mirar en el caso específico de no poder crear el archivo, o de no poder


borrarlo, moverlo o renombrarlo cuando por contra se permita modificar su contenido.
Escribiendo namei −m con la ruta completa del fichero se obtiene toda la información.
El atributo “sticky bit” aplicado al directorio hace que cada fichero únicamente pueda
ser borrado por su propietario, a pesar de que el directorio sea modificable por otros.

3− Lista de control de acceso (ACL) del fichero.

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.

4− Lista de control de acceso del directorio en que se encuentra.

Lo dicho para los casos 2 y 3 también es aplicable aquí.


5− Atributos de archivo.

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 .

6− Forma de montaje de la partición en que se encuentra.

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.

8− Tamaño máximo admisible por la partición en ese momento.

Dependiendo de la ocupación. Normalmente genera un mensaje de error muy claro.

9− Tamaño máximo permitido de fichero en cualquier momento.

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.

3.5.5 En caso de dejar de funcionar repentinamente los servicios/dæmons .

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 .

Si tras una eliminación importante de archivos no se obtuviese el espacio previsto puede


que sea debido a la presencia de contenidos ocultos bajo los puntos de montaje. Habrá
que “mirar debajo de la alfombra”.
3.5.6 En caso de aparecer mensajes en pantalla de forma inoportuna.

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.

Siempre existe la solución trivial de trabajar sobre emulación de terminal en entorno


gráfico.
6 Manejo del kernel.

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.

6.1 Fuentes: Versiones. Obtención, expansión y parcheo.

El modelo de desarrollo del núcleo Linux es el mismo de cualquier otro programa


libre: Se establecen dos ramas paralelas por cada línea de desarrollo. Una de ellas
corresponderá a las versiones estables y la otra a las versiones experimentales.

Cada versión consta de un nombre, que hace referencia a la línea de desarrollo


correspondiente, seguido de tres números decimales separados por puntos. El primero de
ellos solamente cambia tras haberse introducido grandes diferencias. El segundo es el
más importante porque si es par indica que se trata de una versión considerada estable.

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.

Se descomprimirá dentro del directorio /usr/src de forma que quede finalmente en


/usr/src/linux el árbol del código fuente del kernel.

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.

Aproximadamente un 17% del código del kernel corresponde a especificidades de cada


arquitectura de máquina, un 54% son drivers −en principio independientes del
procesador− y el 29% restante son el kernel central y los soportes para los diferentes
sistemas de ficheros.

No se trata de un kernel de concepción moderna (microkernel) sino de un kernel Unix


clásico (monolítico) que permite −como opción− modularizar muchas de sus partes. Sin
embargo, su propia organización interna sí es profundamente modular, hasta el punto de
permitir utilizar una sola base común para todas las arquitecturas. Esto ha facilitado
mucho su mantenimiento y desarrollo, porque elimina la necesidad de coordinar
estrechamente los programadores de las distintas partes.

La práctica totalidad de las opciones de compilación del núcleo permiten ser


especificadas como módulo. Simplemente habrá que tener cuidado de cargar los módulos
requeridos en los pocos casos en que el propio núcleo no los cargue automáticamente.
7 Firewall Linux.

7.1 Funcionamiento. Comparación con otros cortafuegos.

− Velocidad

En Linux es el propio núcleo −y no un programa externo− el que maneja directamente


los paquetes de datos de las conexiones proporcionando los medios para su control.

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.

En contraste, los cortafuegos comerciales normalmente utilizan una única cadena


secuencial de reglas de filtrado, con lo que su configuración es más propensa a errores, y
su funcionamiento es más lento al no incorporar dicho paralelismo.

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

El firewall Linux no es por consiguiente portable a otros sistemas operativos, a


diferencia de los productos comerciales. En cambio, sí resulta portable entre plataformas
de hardware (cualquiera de las 18 arquitecturas de procesador sobre las que puede
funcionar el actual kernel estable).

Al contrario de los firewalls comerciales, es multiprotocolo (IPv4, Ipv6, DECnet...) y


admite el manejo de interfaces de red virtuales (como por ejemplo las de tipo ppp de
cualquier conexión por modem, algo imposible para otros cortafuegos).
− Eficiencia

En cuanto a requerimientos físicos, un procesador i486 con 32 MB de RAM es


suficiente para proteger una red de gran número de máquinas, mientras que para los
firewalls comerciales −incluso sobre Linux− los requerimientos tanto de procesador
como de memoria son mucho mayores, sobre un equipo dedicado exclusivamente a ese
cometido.

El no precisar un equipo dedicado permite además conseguir un servidor de


comunicaciones completo, al poder ejecutar simultáneamente los demás servicios :
– proxy
– filtrado de contenidos
– DNS
– intranet
– otros servicios complementarios (VPN, etc.)

− No requiere interfaz

No vamos a entrar en si es más ventajoso modificar un simple archivo de texto o tener


que aprender a utilizar una pesada interfaz gráfica. Ambas cosas tienen sus ventajas e
inconvenientes.

Lo interesante es poder elegir entre ambas soluciones en cualquier momento.

Es también un grave error creer que al emplear un entorno gráfico se elimina la


necesidad de conocer con detalle qué es un firewall y su funcionamiento. La existencia
de interfaz gráfica no evita tener que poseer los suficientes conocimientos.

El firewall Linux ya dispone de herramientas gráficas, aunque ciertamente no se


encuentren tan maduras en este momento (Mayo 2004) como sus alternativas
comerciales, en especial en cuanto a la administración simultánes de varios firewalls.

− Integración

La auténtica integración consiste en garantizar la posibilidad de co−ejecución sin


problemas con otros programas de procedencia ajena : Unos especializados en VPN,
otros en crear "honeypots" (lo que Checkpoint denomina "virtual OS"), etc.

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

Respecto al número de servicios :

La multitarea de Linux, unida al no condicionar que los programas implicados deban


tener una misma procedencia, permite ir aumentando sin límite la variedad y el tipo de
los servicios que se ofrecen, sin además tener que pagar por ello licencias adicionales.

Respecto al número de clientes/conexiones :

Se independiza para cada servicio concreto la cuestión de la escalabilidad. En cualquier


caso, para un servicio dado la única limitación pasará a ser el hardware disponible, no el
número de licencias.

− Seguridad

De entrada, Linux es por propia construcción inmune a virus informáticos, y es el


sistema operativo en general más seguro o −mejor dicho− que puede hacerse tan seguro
como se desee (Ver http://www.nsa.gov/selinux).

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

Optar por una alternativa no libre representa en este momento ir en contra de la


corriente mayoritaria en el mundo de internet y la seguridad, cerrando las puertas en el
futuro a la modernización permanente que proporciona Linux.

La modernización no implica solamente una continua actualización del núcleo y todas


las aplicaciones, sino también la constante aparición de nuevas ideas y programas.
Les Guilleries, 3
08320 El Masnou (Barcelona)

Tel. (+34) 93 555 4000


Fax (+34) 93 540 3387
email: informatica@eurogaran.com

Você também pode gostar