Tabla de Contenidos

Linux Intro Acelerado

Introducción

El propósito de este curso es brindar los conocimientos mínimos de Linux, tanto técnicos como informativos, que permitan al alumno administrar básicamente un sistema CentOS Linux. Se incluirá también información sobre servidores, demonios y bases de datos, así como nociones de seguridad.

El objetivo de esta página wiki es suministrar un resumen de lo que se enseñará durante la cursada, en especial comandos y consejos prácticos.

1. Introducción a Linux

Objetivos

Adquirir conceptos básicos y terminología necesaria para el uso diario del sistema operativo.

1.1. [ ] Definición e historia

Se llama “Linux” específicamente al kernel de un sistema operativo. Este kernel fue creado por Linus Torvalds en 1991 y liberado como software Open Source (Código Abierto) bajo licencia GNU GPL (GNU Privacy Licence) de manera que cualquiera pueda mejorarlo, extenderlo y modificarlo para sus propias necesidades. La condición de esta licencia es que se publiquen nuevamente esas fuentes modificadas, junto con una copia de la propia licencia.

Por extensión, se llama "GNU/Linux" o "Linux" a secas al sistema operativo, que consta de un conjunto de herramientas, servicios y archivos de configuración, y que permite aprovechar la potencia y confiabilidad de ese kernel. De ahora en más, se utilizará cualquiera de ambos términos para referirse al sistema operativo en sí, a menos que se indique lo contrario.

GNU/Linux, como sistema operativo, no es de ninguna manera un Unix. Es simplemente un sistema operativo “como Unix” (Unix-like). Es decir, toma conceptos, ideas y técnicas de Unix, agregando muchas cosas nuevas, para obtener un producto mucho más versátil, extensible y práctico.

1.2. [ ] Conceptos básicos: multiusuario, multitarea, versatilidad

Linux ha sido escrito desde las bases para ser multiusuario, proveer poderosas capacidades multitarea, y una versatilidad ilimitada.

Multiusuario: significa que cada proceso puede ser ejecutado con un usuario diferente, proveyendo así limitaciones básicas a cada uno. Esta capacidad se usa extensivamente y se recomienda aprovecharla. Por ejemplo, cada servicio suele ser ejecutado con su propio usuario, limitando así en caso de un ataque a los permisos asignados a dicho usuario.

Multitarea: es la capacidad de ejecutar múltiples tareas sin que interfieran unas con otras. En el sistema en el cual está siendo escrito este tutorial en este momento, se ejecutan más de 160 procesos y unos 380 threads; esto incluye servicios como DNS, DHCP, proxy, y servidor HTTP, así como máquinas virtuales. La memoria usada es de unos 3,7GB incluyendo las dos máquinas virtuales.

Versatilidad: es la posibilidad de ser utilizado en distintos ambientes, para enorme cantidad de fines distintos, sobre distintas plataformas e infinitos servicios. Desde celulares y minicomputadoras de todo tipo, hasta supercomputadoras con miles de procesadores y almacenamiento de miles de TB; desde centro de datos para servicios críticos de empresas, hasta computadoras de escritorio y multimedia.

1.3. [ ] Conceptos previos: particionamiento, particiones primarias, extendidas y lógicas, GPT

Las particiones primarias, extendidas y lógicas es el sistema de particionamiento basado en DOS sobre el que está diseñado todo el hardware x86 que se usa actualmente. Se llama MBR (Master Boot Record), es de 32 bits y está limitado a unidades de almacenamiento de 2TB. Por ello se ideó un nuevo sistema denominado GPT (GUID Partition Table) que es de 64 bits y utiliza identificadores globales únicos (GUID, Globally Unique IDentifiers) para guardar la información de las particiones.

GPT permite hasta 128 particiones, las que son todas del mismo nivel, es decir no existe diferencias entre ellas como en MBR.

1.4. [ ] Terminología básica

Bash: es uno de los intérpretes de comandos más utilizados. Permite ejecutar comandos y desarrollar scripts para automatizar tareas. Posee una gran funcionalidad

boot manager: es el programa que inicia el sistema operativo. Se instala en el MBR y si hay varios sistemas operativos instalados en la misma computadora, permite iniciar cada uno por separado

Manejador de ventanas: en inglés “Window Manager”. Es una capa de software sobre el sistema X Window, y que provee la funcionalidad de ventanas para mover, minimizar, maximizar, apilar, etc. las aplicaciones. Las aplicaciones y programas gráficos corren dentro de las ventanas provistas por el manejador de ventanas

MBR (Master Boot Record): es una pequeña porción al inicio de un disco rígido, que es ejecutada por la BIOS al encender una computadora

montar: acción de hacer visibles para el usuario los archivos de un sistema de archivos, conectando éste a una carpeta del árbol de directorios

particionar: acción de dividir una unidad de almacenamiento en particiones, que luego pueden ser usadas para separar las distintas porciones del sistema operativo

raíz: en inglés también “root”. Es el directorio principal, de más alto nivel, de un sistema de archivos Unix. De él penden el resto de las carpetas del sistema operativo

root: usuario administrador del sistema. También se llama “superuser”

shell: también denominado “consola” o “terminal”. Es una interfaz de texto para interactuar con el sistema operativo, que permite la ejecución de comandos

sistemas de archivos: en inglés “filesystems”. Son los diferentes sistemas de organización de archivos en unidades de almacenamiento, de los cuales Linux puede utilizar una gran variedad, cada uno con sus ventajas y desventajas: ext4, ext3, NTFS, FAT32, vfat, ReiserFS, XFS, GFS2, JFS, etc.

X Window System: llamado simplemente “las X” o “sistema X”, es el motor gráfico que provee las primitivas de acceso al hardware de vídeo, y que permite interactuar de manera gráfica con el sistema operativo. Sobre éste se ejecutan manejadores de ventanas y aplicaciones gráficas

1.5. [ ] Utilidad: ¿para qué sirve? ¿para qué se usa?

Es un sistema operativo extremadamente versátil, por lo que puede usarse prácticamente en cualquier ámbito y para resolver el tema que sea. Algunos ejemplos a continuación:

1.6. [ ] Distribuciones: concepto y ejemplos

Se denomina “distribución”, o “distro” a un conjunto de herramientas de software, más kernel Linux. La mayoría de ese software suele ser Open Source. En muchos casos, las distribuciones son gratuitas. No así en otros.

Ejemplos son:

1.7. [ ] Sitios recomendados en castellano y en inglés

En castellano

En inglés

2. Instalación

Objetivos

Incorporar las técnicas y conocimientos necesarios para instalar exitosamente el sistema operativo, y dejarlo funcionando adecuadamente.

2.1. [ ] Obtención de información sobre el sistema

Es altamente recomendable conocer el hardware sobre el que se va a instalar el sistema operativo. Especialmente antes de la compra del mismo. La mayor parte del hardware existente hoy en día funciona correctamente con Linux, pero en ocasiones pueden ocurrir inconvenientes, incompatibilidades o directamente no funcionar.

Las fuentes de obtención de información del hardware son variadas, a saber: sitio del fabricante, BIOS, manuales, observación visual, software de información.

Una manera fácil y práctica de revisar el hardware es iniciar el sistema con una distribución de rescate como System Rescue CD y luego ejecutar las herramientas básicas que provee Linux:

2.2. [ ] Cuidados

En general no se debe tener cuidados especiales al instalar Linux. Sí es importante tomar recaudos en caso de que se lo esté instalando en un disco con otros sistemas operativos.

En este caso, es muy importante realizar una copia de resguardo si hay datos importantes en el sistema operativo ya instalado, dado que si ocurre cualquier inconveniente pueden perderse.

Respecto al hardware, si el sistema operativo se usa en forma normal, no hay razón por la que pueda dañarse.

Si se está realizando experimentación, Linux provee una gran cantidad de herramientas de acceso a recursos de bajo nivel. Si son mal utilizadas éstas sí pueden dañar el hardware en forma irreversible.

2.3. [ ] Instalación de CentOS: gráfica, texto, particionamiento

CentOS puede ser instalado de varias maneras diferentes, cada una con sus ventajas y desventajas.

Primero, se debe elegir un medio de instalación, que puede ser un CDROM o un DVD. En el segundo caso, los paquetes disponibles son más abundantes que en el primero. Además, puede instalarse desde un CD mínimo, o desde la red, utilizando un CD netinstall.

En cualquier caso, luego se pueden agregar más paquetes, de todos los disponibles para CentOS, así como instalar software extra de todo tipo y de diversas fuentes.

La instalación recomendada es la gráfica, dado que la de texto tiene escasa funcionalidad. Por ejemplo, no permite realizar un particionamiento adecuado.

De todas maneras, si se desea realizar un particionamiento personalizado avanzado, se debe utilizar primero el comando fdisk o el comando parted, y luego de tener el esquema de particionamiento deseado, lanzar la instalación. De esta manera, el instalador permitirá montar cada partición en su punto de montaje, y así finalizar la instalación tal como se necesita.

También se puede instalar el sistema operativo de manera básica en una partición mínima, de unos 5GB, y luego particionar el espacio libre, y configurar lo necesario.

El esquema de particionamiento recomendado es altamente variable dependiendo de las necesidades y del destino que se le de al sistema.

CentOS recomienda un mínimo de 5GB en la partición raíz.

Para una estación de trabajo, con un disco moderno de 500GB o más, se puede instalar todo en una sola partición para la raíz, y un espacio de swapping. Por ejemplo:

  1. swapping: si el sistema dispone de mucha RAM, digamos de 8 a 16GB, se puede crear una partición para intercambio de unos 4 a 8GB, obteniendo de 12 a 24GB totales de memoria.
  2. raíz: la raíz será el resto del disco rígido. Una instalación que incluya el escritorio, así como utilitarios gráficos de todo tipo incluyendo la suite de oficina LibreOffice, ocupa menos de 5GB.

Para un servidor básico, puede recomendarse algo como:

  1. swapping: si el sistema dispone de mucha RAM, digamos de 16 a 64GB, se puede crear una partición para intercambio de unos 8 a 16GB, obteniendo de 24 a 80GB totales de memoria. Obviamente lo ideal es que el sistema no utilice en forma intensiva el swapping. Un servidor adecuadamente dimensionado y administrado puede no necesitar intercambio.
  2. raíz: para CentOS se necesita un mínimo de 5GB. De otra manera el instalador no permitirá continuar
  3. /tmp: el directorio temporal es muy importante, y su tamaño y uso dependerá de para qué se use el sistema. Básicamente recomiendo unos 4GB.
  4. /usr: aquí se instalarán binarios, archivos de datos varios, algunos archivos de configuración, manuales y algunas otras cosas como imágenes e íconos. Generalmente es suficiente con 4 a 10GB.
  5. /var: lo contenido aquí tiene típicamente tamaño extremadamente variables. Cosas que se almacenan aquí típicamente son bases de datos, logs del sistema, spoolers de correo-e e impresión, cachés. Suponiendo un disco de 1TB, suelo usar unos 400GB.
  6. /datos (o /srv): es la partición donde se almacenarán los archivos de la empresa, usuarios, y toda clase de datos útiles directamente a las personas de la institución. Por lo tanto, siguiendo con el supuesto de una unidad de almacenamiento de 1TB, asigno el resto de la misma a esta función, dejando así más de 500GB disponibles.
  7. /home: habitualmente este directorio contiene archivos muy pequeños que se crean automáticamente al dar de alta a los usuarios. Si no se necesita que los usuarios almacenen archivos personales, con que penda de la raíz es suficiente.

3. Conociendo el funcionamiento de Linux

Objetivos

Adquirir conocimientos sobre el sistema de inicio, los permisos, los servicios y el manejo de dispositivos del sistema operativo, así como aprender a encontrar la información necesaria para consultar.

3.1. [ ] Estructura de directorios: concepto, árbol de directorios, contenido, proc

La estructura del árbol de directorios es muy parecida de una distribución a otra, aunque puede variar sensiblemente. En un CentOS, los directorios de primer nivel típicamente son:

bin
boot
dev
etc
home
lib
lib64
lost+found
media
misc
mnt
net
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var

3.2. [ ] Proceso de arranque: init, runlevels, comandos: service, chkconfig

Un aspecto muy importante de los Linux es el sistema de arranque, el cual es simple, configurable, transparente y muy poderoso. El administrador puede personalizar y ajustar cada parte de este proceso con completa seguridad de que las cosas funcionarán como lo desea.

De la misma manera, el proceso de apagado es configurable y adaptable a las necesidades de cada caso.

  1. La BIOS revisa el sistema y lanza la primera fase del manejador de inicio que reside en el MBR
  2. El manejador de inicio lanza la segunda fase desde el directorio /boot
  3. Esta fase es la encargada de cargar el kernel en memoria, lo que cargará los módulos necesarios y montará la partición raíz en modo de sólo lectura
  4. El kernel transfiere el proceso de inicio al programa /sbin/init
  5. Éste cargará todos los servicios y herramientas de nivel de usuario, y montará las particiones listadas en /etc/fstab
  6. Luego de finalizar estos procesos, se presentará al usuario una pantalla de ingreso

Linux provee varios runlevels, del 0 al 6. Cada uno se utiliza para iniciar o detener servicios de manera automática. Así:

Para controlar los diferentes runlevels, se utilizan los comandos shutdown y telinit, a saber:

Los servicios del sistema pueden iniciarse, reiniciarse y detenerse con el comando service. La configuración respecto a qué servicio se iniciará o detendrá automáticamente en los diferentes runlevels, se realiza con el comando chkconfig.

Por ejemplo, para reiniciar el servidor SSH:

/sbin/service sshd restart

Para revisar en qué runlevels se iniciará este demonio:

chkconfig --list sshd

Configurar su inicio en los runlevels 2, 3, 4 y 5:

chkconfig --level 2345 sshd on

Para configurar que no inicie en dichos runlevels:

chkconfig --level 2345 sshd off

3.3. [ ] Permisos, usuarios y grupos

El sistema de permisos de Linux es sumamente simple, práctico, eficiente y seguro. Se basa en permisos de archivos, y usuarios y grupos propietarios de los mismos.

Para cada entrada de un sistema de archivos, sea archivo o directorio, hay un indicador de tipo, y tres grupos de permisos:

dr-xr-xr-x. 2 root root 4096 may 11 20:45 /bin

3.4. [ ] Montando y desmontando sistemas de archivos

Montar un sistema de archivos significa hacer visibles al operador los archivos contenidos en él. Esos archivos pueden estar en un dispositivo de almacenamiento local, extraíble o no, o ser exportados por un servidor remoto, entre otras posibilidades.

Para montarlo, se necesita un directorio vacío creado al efecto, que se denomina punto de montaje. Estos directorios habitualmente son creados dentro del directorio /mnt.

Por ejemplo, para montar un pendrive:

mkdir /mnt/pendrive

Insertar luego el pendrive en un puerto USB, y montarlo:

mount /dev/sdb1 /mnt/pendrive

Donde sdb1 es el nodo asignado al mismo por el kernel, cosa que se puede ver en el archivo /var/log/messages, o bien ejecutando un cat /proc/partitions

3.5. [ ] Servidores: definición, demonios, posibilidades, iniciando y deteniendo demonios

Además de al equipo físico, se llama servidor a un proceso que brinda servicios de diferente índole. También se lo denomina demonio.

Ejemplos son los servicios Apache, Samba, NFS, Bind9, DHCP, y muchos otros. Así, el servicio HTTP provisto por Apache, es brindado por el demonio httpd; el servicio DNS ofrecido por Bind9, es brindado por el demonio named.

El objetivo del servidor físico es centralizar la información, así como la configuración, de los servicios que son provistos a las estaciones cliente.

En la mayoría de los Linuxes modernos, los servicios se controlan con el comando service.

Para ver el estado de un servicio:

service sshd status

Para detenerlo e iniciarlo:

service sshd stop
service sshd start

3.6. [ ] Servicios más comunes en un servidor: Samba, NFS, httpd, DHCP, proxy, firewall, SSH, mail, impresión, DNS, FTP, virtualización

Entre muchos otros servicios importantes hoy día, algunos comunes, prácticos y confiables son:

3.7. [ ] Shell: introducción, filosofía de trabajo, multitarea básica

Se llama shell, terminal, intérprete de comandos o línea de comandos a una interfaz de texto para interactuar con el sistema operativo. El usuario dirige el sistema operativo mediante el envío de comandos como texto a un intérprete. El intérprete también permite escribir scripts que constan de uno de o más de esos comandos, y que se ejecutan llamándolos por su nombre.

Los shells más comunes son Bourne Again Shell (Bash) y C Shell (Csh). Hay muchos otros, cada uno con sus características particulares.

Estas interfaces han sido desarrolladas desde fines de los años 60 y principios de los 70 en forma estable, conservada, y con claros objetivos de confiabilidad y seguridad, a la vez que explotan toda la potencia del sistema subyacente y sus diferentes características: kernel, sistema de archivos, multitarea, multiusuario, etc.

El principio básico de la línea de comandos es lograr la interacción con el sistema operativo rápida y eficazmente, consumiendo lo menos posible de recursos, concentrándose en la resolución de los temas de manera estable, confiable y segura. Permite resolver cualquier situación de manera local o remota sabiendo con absoluta certeza cómo va a responder el sistema operativo, y cómo va a ser el resultado de la interacción.

Algunas características básicas y ejemplos:

3.8. [ ] Documentación: dónde, cómo, qué, páginas man, ayuda de comandos

La documentación disponible sobre Linux y sus comandos es amplísima en la mayoría de los casos. Se recomienda acceder a la documentación en los sitios oficiales de cada proyecto.

Por ejemplo, en el caso de la última versión de Apache Tomcat la misma está disponible en http://tomcat.apache.org/tomcat-7.0-doc/

Asimismo, la documentación de la última versión de MySQL se encuentra en http://dev.mysql.com/doc/refman/5.6/en/index.html

Hay muchísima documentación, alguna de excelente calidad, creada y mantenida por terceros. En estos casos se puede buscar como referencia de otros, y ver los comentarios respecto a la seriedad del enlace.

Por ejemplo la Advanced Bash-Scripting Guide es la referencia obligada de programación de Bash. Otro ejemplo son los tutoriales escritos por Falko Timme y varios otros autores en http://www.howtoforge.com/

Los comandos suelen tener una ayuda en línea, accesible generalmente con el modificador –help, -help o -h. Por ejemplo, para visualizar la ayuda básica del comando grep:

grep --help

Además, en el propio sistema operativo ya instalado, se dispone de las páginas man. Éstos son manuales de cada comando, archivo de configuración, funciones, llamadas y otros, disponibles con el comando man.

Ejemplos:

Existe otro manual, interactivo y generalmente más desarrollado, que es denominado manual Texinfo o páginas info. Por ejemplo, para acceder a un extenso manual del intérprete Bash:

info bash

3.9. [ ] Dispositivos: reconocimiento, módulos y parámetros, cargar y descargar módulos. Problemas de permisos. Comandos modprobe, insmod, rmmod, lsmod

Se denomina “módulo” o “driver” a un archivo binario que es cargado junto al kernel, y que permite el acceso a un dispositivo, sistema de archivo o nueva funcionalidad, entre otros.

Los comandos para realizar estas tareas son:

La configuración de los módulos, así como blacklisting y otras tareas, se realiza con los archivos de configuración existentes dentro de /etc/modprobe.d/

4. Línea de comandos

Objetivos

Incorporar las técnicas y conocimientos necesarios para utilizar y aprovechar la línea de comandos, así como conocer el manejo de los procesos y aprender a detectar problemas.

4.1. [ ] ¿Por qué usarla?

La línea de comandos o shell permite operar el sistema operativo en su totalidad sin perder tiempo, sobre conexiones lentas o defectuosas, con mínimo gasto de recursos y con la seguridad de que las operaciones funcionarán como es debido.

Entre muchísimas operaciones habituales se puede, desde ver el estado del sistema, su carga, el listado de procesos, copiar o listar archivos, hasta grabar DVDs, navegar la web, escanear documentos, imprimir o retocar imágenes.

Tan poderosa como confiable, se caracteriza por su rapidez y versatilidad. Cuenta con innumerables comandos y utilitarios, y es fácilmente adaptable, mejorable y ampliable.

4.2. [ ] Bash: introducción, principales características, combinaciones de teclas

El Bourne Again Shell es uno de los más difundidos intérpretes de comandos disponibles en entornos Linux. Se caracteriza por ser fácil de usar, posibilidad de editar las líneas y crear funciones, disponer de histórico de comandos, aliases, control de tareas, y aritmética de enteros entre otras características.

La edición de líneas se realiza utilizando las teclas estándares al efecto: teclas de cursores, backspace, delete, home, end.

Algunas combinaciones de teclas prácticas:

4.3. [ ] Comandos básicos: ls, rm, cp, mv, mkdir, cat, grep, ln, find, locate, tar, chmod, vi, nano, passwd

Los comandos disponibles son muchísimos. Los más comunes pueden ser:

4.4. [ ] Procesos: listar procesos, pasar procesos a ejecución de fondo y a primer plano, cómo realizar multitarea

El comando ps se utiliza para listar los procesos que se están ejecutando en el sistema. Brinda una instantánea de lo que ocurre con ellos en ese instante.

Ejecutado sin parámetros, muestra un listado de los procesos que dependen de la terminal actual:

ps

Para listar todos los procesos del sistema, con la información de qué usuario está ejecutando cada uno:

ps aux

Si se desea además elaborar un árbol de jerarquías de procesos:

ps auxf

El ps es un comando complejo, con gran cantidad de modificadores.

En la línea de comandos, se puede ejecutar procesos de manera que se pueda volver a tomar el control de la misma, y continuar trabajando. Para ello, se agrega un ampersand (&) al final de la línea, por ejemplo:

tar czf /tmp/lib.tar.gz /lib &

Para ver el listado de tareas en background:

jobs

Para volver una tarea a primer plano:

fg <tarea>

donde <tarea> es el número de la tarea que se desea controlar, indicado por el comando jobs.

Si se desea en cambio pasar a segundo plano (background) una tarea que está en primer plano, primero se debe pulsar la combinación de teclas C-z para enviar una señal STOP y luego ejecutar el comando bg:

bg <tarea>

donde <tarea> es el número devuelto al ponerlo en STOP.

4.5. [ ] Histórico de comandos y autocompletar

El histórico de comandos se accede con las teclas de cursores hacia arriba y hacia abajo. Una vez encontrada la línea en cuestión, la misma se puede editar desplazando el cursor hacia la izquierda y la derecha utilizando las teclas al efecto. Las teclas de edición son las estándares: suprimir, retroceso, Ctrl + cursores izquierda y derecha.

Además, utilizando la combinación C-r se puede realizar una búsqueda hacia atrás en el histórico. La combinación C-s se emplea para la búsqueda hacia adelante; si esta combinación está asignada a XOFF, se debe activarlo (XON) pulsando C-q. Si se desea desactivar definitivamente XON/XOFF, agregar el comando stty -ixon en /etc/profile. Este comando desactiva el uso de XON/XOFF.

La funcionalidad de autocompletar se invoca pulsando la tecla Tab. Permite autocompletar comandos y rutas del sistema de archivos. Por ejemplo, para escribir el comando yumdownloader basta con tipear las cuatro primeras letras “yumd” y pulsar Tab.

Esta tecla también sirve como ayudamemoria. Si uno no recuerda cómo se escribe un comando, puede empezar tipeando algo, y luego pulsar dos veces seguidas Tab. Por ejemplo, si se tipea “yum” y se pulsa dos veces la tecla Tab, se visualizarán todos los comandos existentes que comiencen con esas tres letras.

De la misma manera se emplea con los directorios.

4.6. [ ] Archivos y directorios: administración básica

Los comandos principales de administración de archivos y directorios son los siguientes:

4.7. [ ] Fecha y hora: husos horarios, cambiar la fecha

Por obvias razones, es muy importante que el sistema esté en hora. Lo correcto es sincronizar la hora del sistema mediante NTP.

El comando para ver la fecha y hora, así como para configurarla es date.

El huso horario se puede cambiar creando un enlace simbólico en /etc/localtime a la información de huso horario correspondiente, presente en /usr/share/zoneinfo, por ejemplo:

ln -sf /usr/share/zoneinfo/America/Argentina/Buenos_Aires /etc/localtime

4.8. [ ] Logs: qué son, para qué sirven, cómo visualizarlos

Linux tiene un excelente sistema de logs o registros. En general son archivos de texto que se actualizan inmediatamente ante un evento. Se guardan en /var/log y se utilizan para identificar inconvenientes de todo tipo, desde errores de programas y servicios a fallas en hardware o ruteo de correo electrónico, así como para monitorear actividad normal como el envío de correo electrónico, faxes, spoolers de impresión, etc.

Ante cualquier falla en el sistema, se recomienda revisarlos a conciencia. El demonio encargado de guardarlos se llama rsyslogd en CentOS. Algunos servicios, como ejemplo MySQL, graban por sí mismos los registros, aunque suelen enviar algún dato a syslog también.

Para revisarlos, se puede usar algún visualizador como less. Para hacerlo en tiempo real, se puede utilizar la siguiente línea:

tail -F /var/log/messages

Algunos archivos de registro que se encuentran en /var/log en CentOS son:

Una herramienta práctica para visualizarlos es multitail. Por ejemplo, para visualizar los logs messages y secure simultáneamente:

multitail /var/log/secure /var/log/messages

5. Scripting

Objetivos

Aprender lo mínimo necesario para escribir y ejecutar un script de shell.

5.1. [ ] Conceptos básicos

Un script es básicamente un archivo de texto con comandos dentro. Estos comandos son ejecutados mediante un intérprete. En el caso de Linux, el más común es Bash.

Los scripts permiten automatizar tareas repetitivas, evitando el error humano, y ahorrando tiempo. Por ejemplo, si se necesita realizar una limpieza de archivos temporales una vez por mes, si se necesita un backup diario de los archivos de usuarios, revisar el estado de los servicios, el espacio en disco, y cualquier tarea que requiera ejecutar una serie de comandos.

Intérpretes de comandos hay muchos además de Bash. Entre ellos podemos nombrar Python, Perl, PHP, y Ruby.

Cada script debe comenzar con una línea específica, que indica qué programa debe usar el kernel para interpretarlo:

#!/bin/bash

Para ser ejecutado, el archivo de texto debe tener permisos de ejecución:

chmod a+x script

5.2. [ ] Ejemplos

Primer script

#!/bin/bash
# Variable alfanumerica
CADENA="Este es un primer script"
# Imprimir la variable por la pantalla
echo $CADENA
# Salida de error stderr cero  
exit 0

Segundo script

#!/bin/bash
DIRE="/sbin"
# Para cada elemento en $DIRE evaluar que tipo de archivo es
for i in `ls $DIRE`
  do file $DIRE/$i
done

exit 0

Tercer script

#!/bin/bash
# Si el numero de procesos httpd es mayor a cero significa que Apache esta ejecutandose
APA=`ps ax | grep "httpd" | grep -v "grep" | wc -l`
if [ $APA -gt 0 ]
then
  echo "Apache esta corriendo"
else
  echo "Apache esta detenido"
fi

exit 0

6. Administración de usuarios y grupos

Objetivos

Conocer la forma en que Linux maneja los usuarios y cómo se los administra.

6.1. [ ] Usuarios: agregar, eliminar y modificar

En un Linux instalado normalmente, los usuarios se almacenan en el archivo /etc/passwd, mientras que sus contraseñas en /etc/shadow.

Los comandos para agregar, eliminar y modificar usuarios son respectivamente: useradd, userdel y usermod.

useradd -c "Usuario para pruebas" -d /home/test test

Para cambiar la contraseña de un usuario, se emplea el comando passwd:

passwd usuario

6.2. [ ] Grupos: agregar, eliminar, agregar usuarios a otros grupos

El listado de grupos, así como los usuarios que son miembros de cada uno, se almacenan en /etc/group. Los comandos para agregar, eliminar y modificar grupos son, respectivamente: groupadd, groupdel, y groupmod.

6.3. [ ] Comandos relacionados: chown, chgrp

Si se desea cambiar el propietario (owner) de un archivo o directorio, el comando a utilizar es chown:

chown test /ruta/al/archivo

Para cambiar el grupo al cual pertenece un archivo o directorio, el comando es chgrp:

chgrp grupo /ruta/al/archivo

7. Administración de sistemas de archivos

Objetivos

Incorporar los conocimientos necesarios para poder preparar sistemas de archivos para el uso del sistema operativo.

7.1. [ ] Particionar y formatear unidades: fdisk, cfdisk, sfdisk, mkfs, mkswap

El comando más común para particionar es fdisk. Para automatizar en scripts, se usa sfdisk. Otro utilitario, interactivo y más fácil de usar pero con menos posibilidades es cfdisk. En discos nuevos, con particiones GPT se debe usar gdisk o parted.

Por ejemplo, para ver un listado de las particiones de un disco:

fdisk -l /dev/sda

Para particionarlo, agregar, quitar o modificar particiones en modo interactivo:

fdisk /dev/sda

La ayuda del comando está disponible en el modo interactivo pulsando la tecla m.

Creadas las particiones, se les debe dar formato con el comando mkfs. Por ejemplo, para formatear una partición lógica con el sistema de archivos ext4:

mkfs -t ext4 /dev/sda5

En cambio, las particiones para intercambio (swap) deben formatearse con un comando al efecto, mkswap:

mkswap /dev/sda6

7.2. [ ] Unidades: montaje, fstab, mtab, df, du

Una vez que una partición fue formateada, se la debe montar. Este proceso hace que los archivos queden disponibles al usuario para poder utilizarlos, sea modificarlos, borrarlos, crearlos, o trabajar en su administración copiándolos, moviéndolos, creando carpetas, etc.

Esto se realiza con el comando mount, indicándole al mismo la partición que se debe montar y el punto de montaje:

mount -t ext4 /dev/sda5 /mnt/archivos

La configuración de qué particiones montar al inicio del sistema se encuentra en el archivo /etc/fstab. El siguiente es un ejemplo del contenido de dicho archivo:

# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>

/dev/sda5               none            swap            sw                      0 0
/dev/sda6               /               reiserfs        noatime,notail          0 1

/dev/cdrom  /mnt/cdrom   auto    noauto,user                    0 0

La información de qué particiones se encuentran montadas, y dónde, se observa en el archivo /etc/mtab. Además, esa misma información puede ser visualizada con el comando mount sin agregarle parámetros.

Cuando se desea conocer el espacio libre que existe en una partición montada, se utiliza el comando df (disk free), con el modificador -h que hace que la información sea adaptada a MB, GB o TB según corresponda:

srv07 ~ # df -h /
S.ficheros     Tamaño Usados  Disp Uso% Montado en
/dev/sda6        9,0G   5,2G  3,9G  58% /

En cambio, si se desea ver el espacio ocupado por un directorio, se utiliza el comando du, por ejemplo:

nb01 ~ # du -hs /usr
4,9G    /usr

7.3. [ ] Reparar problemas: fsck, badblocks

Si un sistema de archivos tiene inconvenientes lógicos, por ejemplo luego de un apagado incorrecto de un equipo, se utiliza el comando fsck en runlevel 1 para repararlo:

fsck /dev/sda5

Si en cambio, se desea comprobar si el disco contiene errores físicos (bad sectors, sectores dañados), se emplea el comando badblocks. Este comando no repara sectores dañados, sino simplemente informa cuáles son:

badblocks -sv /dev/sda2

Si el disco tiene daño físico, lo más recomendable es cambiarlo.

8. Manejadores de paquetes

Objetivos

Conocer la forma en que algunas distribuciones de Linux manejan los paquetes de software, y aprender a utilizar el sistema de paquetes RPM.

8.1. [ ] CentOS: rpm, yum

CentOS es un sistema operativo basado en el código fuente de Red Hat Enterprise Linux. El sistema de paquetes de software que utiliza se llama Red Hat Package Manager (RPM). Éste permite instalar, desinstalar y revisar el software instalado en el equipo, con una alta confiabilidad, y de manera modular.

Se utilizan para ello dos comandos principales: rpm y yum. El primero es el comando más importante, mientras que el segundo es un frontend que utiliza rpm para realizar tareas automáticas como resolver dependencias, instalar y desinstalar, a la vez que simplifica el bajar paquetes, realizar búsquedas de software y otras tareas habituales.

Por ejemplo, para instalar un paquete previamente descargado, utilizando rpm:

rpm -iv paquete.rpm

Para instalar un paquete con Yum, el cual se conectará directamente a un repositorio, y realizará también la descarga previa:

yum install paquete

8.2. [ ] yum.conf

La configuración de Yum se encuentra en /etc/yum.conf. Los repositorios se configuran en archivos de texto plano en /etc/yum.repos.d

Por ejemplo, para hacer que Yum utilice un proxy con el puerto 8080 al bajar los archivos de Internet, se debe agregar la siguiente línea en yum.conf:

proxy=http://proxy.dominio:8080

Para configurar el repositorio de DCArsat, por ejemplo, se debe crear un archivo /etc/yum.repos.d/dcarsat.repo:

[dcarsat]
name=dcarsat
baseurl=http://mirrors.dcarsat.com.ar/centos/6.5/os/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://mirrors.dcarsat.com.ar/centos/6.5/os/x86_64/RPM-GPG-KEY-CentOS-6

Una vez creado éste, se debe eliminar la caché de Yum con yum clean all para que comience a utilizarlo.

Para instalar los repositorios EPEL (Extra Packages for Enterprise Linux), simplemente se debe ejecutar el comando:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Hecho esto, se dispondrá de una enorme cantidad adicional de paquetes de software útiles.

8.3. [ ] Buscar a qué paquete pertenece un archivo, verificar archivos de paquetes instalados

Tareas comunes a realizar con rpm son, por ejemplo, encontrado un archivo verificar si es oficial de la distribución o no, o verificar la integridad de los archivos instalados a partir de un paquete.

Buscar a qué paquete pertenece un archivo:

rpm -qf /ruta/al/archivo

Verificar la integridad de los archivos de un paquete:

rpm -Vv paquete

9. Redes TCP/IP: concepto, estructura y funcionamiento

Objetivos

Incorporar los conocimientos necesarios para poder entender cómo funcionan y cómo se instalan redes bajo estos protocolos

9.1. [ ] Protocolo TCP/IP: conceptos, versiones IPv4 e IPv6

El Protocolo de Control de Transmisión (TCP, Transmission Control Protocol) es uno de los principales componentes del protocolo de Internet (IP, Internet Protocol). El conjunto es a menudo llamado TCP/IP. TCP provee un método de envío de flujo de octetos confiable, ordenado y con comprobación de errores entre programas ejecutándose sobre computadoras conectadas a una red, sea local o pública. Reside en la capa de transporte del modelo OSI.

El Protocolo de Internet (IP, Internet Protocol) es el principal componente del conjunto de protocolos para envío de datagramas a través de redes interconectadas. Su función de ruteo permite internetworking y esencialmente establece Internet.

La versión que actualmente se utiliza en más del 96% de Internet es la 4, que ofrece direcciones de 32 bit. Data del año 1981. Para resolver el tema del agotamiento de las direcciones, entre otros, una nueva especificación fue desarrollada por la IETF. Fue llamada versión 6, y data del año 1998. Entre otras características, ofrece direcciones de 128 bit.

Ejemplo de dirección IPv4 (4 grupos de 8 bit cada uno): 192.0.2.235

Ejemplo de dirección IPv6 (8 grupos de 16 bit cada uno): 2001:0db8:0000:0000:0000:ff00:0042:8329

9.2. [ ] Redes: estructura, capas

Hay varios tipos de redes, siendo la más común hoy en día la topología en estrella. Las capas del modelo OSI son las siguientes:

9.3. [ ] Direcciones IP: rangos, resolución de nombres a direcciones IP

Rangos de direcciones IP en cada clase

Clase Rango N° de Redes N° de Host Por Red Máscara de red Broadcast ID
A 0.0.0.0 - 127.255.255.255 128 16 777 214 255.0.0.0 x.255.255.255
B 128.0.0.0 - 191.255.255.255 16 384 65 534 255.255.0.0 x.x.255.255
C 192.0.0.0 - 223.255.255.255 2 097 152 254 255.255.255.0 x.x.x.255
D 224.0.0.0 - 239.255.255.255 histórico
E 240.0.0.0 - 255.255.255.255 histórico

Rangos de direcciones IP privadas para cada clase

Si bien a bajo nivel la conexión entre equipos se realiza utilizando direcciones IP, para simplificar el trabajo humano y no tener que recordar los números de direcciones, se utilizan nombres de host y un sistema de resolución de nombres en su correspondiente dirección IP: Domain Name Service (DNS).

Si los equipos son pocos, se puede utilizar también el archivo /etc/hosts.

9.4. [ ] Configuración de redes

La configuración de red en CentOS se encuentra en el archivo /etc/sysconfig/network y en el directorio /etc/sysconfig/network-scripts/ dentro de varios archivos y scripts de configuración.

Los archivos más importantes allí dentro son ifcfg-lo y ifcfg-eth0. A continuación, un ejemplo de configuración de ifcfg-eth0 para utilizar una IP fija:

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=172.16.23.1
USERCTL=no

Sin embargo, si se desea utilizar DHCP:

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

10. DNS: qué es y cómo funciona, terminología, configuración

Objetivos

Entender la utilidad de tener un DNS configurado en el servidor, así como aprender la configuración y empleo del DNS BIND9.

10.1. [ ] DNS: utilidad, ventajas, conceptos básicos: zonas, CNAME, A, MX y otros

El Domain Name System (o Service, o Server) se encarga de devolver la dirección IP que corresponde a un nombre de host (resolución forward); también hace lo inverso, devolver el nombre de host que está configurado para una IP (resolución reverse). Como tal es un servicio básico e imprescindible en una intranet ya que, por un lado facilita el trabajo al evitar tener que recordar las direcciones IP que corresponden a los equipos, y por otra parte permite aprovechar servicios como HTTP, que hacen uso intensivo de los nombres de host.

Algunos conceptos:

10.2. [ ] BIND9: instalación, configuración, pruebas

Uno de los servidores de DNS más utilizados es Bind9, desarrollado por Internet Systems Consortium (ISC). Se caracteriza por ser rápido, eficiente y seguro.

Para instalarlo en CentOS:

yum install bind

El proceso se llama named y escucha en los puertos TCP y UDP 53.

La configuración se encuentra en los siguientes archivos y directorios:

Se debe tener en cuenta que la configuración de Bind es sumamente estricta, y un espacio o un punto de más o de menos provoca que el servicio no funcione.

En /etc/named.conf agregar o modificar donde corresponda:

listen-on port 53 { 127.0.0.1; 192.168.1.1;};
allow-query     { localhost; 192.168.1.0/24; };

Y al final de este archivo, pero antes de los includes, agregar la configuración para las zonas:

zone"dominio.local" IN {
type master;
file "forward.dominio";
allow-update { none; };
};
zone"1.168.192.in-addr.arpa" IN {
type master;
file "reverse.dominio";
allow-update { none; };
};

Luego crear ambos archivos en /var/named con lo siguiente:

forward.dominio

$TTL 86400
@   IN  SOA     dns.dominio.local. root.dominio.local. (
        2014060901  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          dns.dominio.local.
@       IN  A           192.168.1.1
dns             IN  A   192.168.1.1

reverse.dominio

$TTL 86400
@   IN  SOA     dns.dominio.local. root.dominio.local. (
        2011071001  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          dns.dominio.local.
@       IN  PTR         dominio.local.
dns             IN  A   192.168.1.1
1       IN  PTR         dns.dominio.local.

10.3. [ ] dig: modo de empleo

Dig es un utilitario para trabajar con DNS, solicitando resolución de hosts, direcciones IP, MX, etc.

Por ejemplo, para solicitar la IP de un host:

dig google.com

En cambio, para solicitar el host de una dirección IP:

dig -x 206.190.36.45

10.4. [ ] DHCP: concepto y configuración, DNS dinámico

El DHCP es un servicio imprescindible que permite administrar la configuración de red de las estaciones de una intranet desde un servidor centralizado. Se puede asignar direcciones IP estáticas a algunos equipos identificados por su MAC, como servidores, u ofrecer direcciones dinámicas de un pool a estaciones de trabajo comunes, entre otras posibilidades.

Además, configurado al efecto, DHCP puede modificar los registros forward y reverse de un DNS insertando las direcciones y nombres de host para los cuales haya asignado leases.

11. Apache

Objetivos

Incorporar los conocimientos que permitan configurar, poner en marcha, agregar funcionalidad y mantener un servidor Apache

11.1. [ ] Servidor web: filosofía y conceptos

Apache HTTP Server es uno de los servidores de dicho protocolo más utilizados en el mundo. Es extremadamente confiable, extensible, versátil y poderoso.

Para instalarlo en CentOS:

yum install httpd

11.2. [ ] Apache: configuración y módulos

En CentOS, la configuración de Apache se encuentra en los siguientes archivos y directorios:

Los archivos del sitio web, llamado document root están en /var/www/html

Los módulos de Apache, se encuentran en usr/lib64/httpd/modules

11.3. [ ] Configurando un servidor de hosts virtuales

Para crear un nuevo host virtual, basta con agregar en httpd.conf algo como lo siguiente, para cada nuevo host virtual que se desee:

NameVirtualHost *:80

<VirtualHost *:80> 
  ServerAdmin webmaster@ejemplo.com 
  DocumentRoot /var/www/ejemplo.com/public_html 
  ServerName www.ejemplo.com 
  ServerAlias ejemplo.com 
  ErrorLog /var/www/ejemplo.com/error.log 
  CustomLog /var/www/ejemplo.com/requests.log
</VirtualHost>

12. Tomcat

Objetivos

Conocer aspectos básicos del manejo del servidor de aplicaciones, su configuración y manejo esencial

12.1. [ ] Introducción al servidor de aplicaciones Tomcat

Apache Tomcat es un servidor Open Source de aplicaciones Java Servlets o Java Server Pages (JSP) desarrollado como proyecto de la Apache Software Foundation.

12.2. [ ] Instalación y puesta en marcha

Primero se debe ver qué versión de Java está instalada, si lo está:

java -version

Si no está instalada, instalarla:

yum install java-1.7.0-openjdk

Luego instalar Apache Tomcat. La versión que viene con CentOS 6.5 es la 6.0.24. Utilizando yum:

yum install tomcat6

Esto instalará el motor básico. Para instalar el administrador, el ROOT y algunas aplicaciones de ejemplo:

yum install tomcat6-webapps tomcat6-docs-webapp tomcat6-admin-webapps

Si se desea instalar una versión más nueva, se puede bajar el archivo con los binarios desde el sitio de Apache, siguiendo los siguientes pasos:

cd /tmp
wget http://www.us.apache.org/dist/tomcat/tomcat-7/v7.0.54/bin/apache-tomcat-7.0.54.tar.gz
tar xzf apache-tomcat-7.0.54.tar.gz
mv apache-tomcat-7.0.54 /usr/local/tomcat7
cd /usr/local/tomcat7/
./bin/startup.sh

12.3. [ ] Configuración y aspectos a tener en cuenta

Terminada la instalación inicial, se deben crear cuentas de usuario para administración editando el archivo conf/tomcat-users.xml

<!-- The host manager webapp is restricted to users with role "admin" -->
<user name="tomcatadmin" password="contraseña" roles="admin" />
<!-- The manager webapp is restricted to users with role "manager" -->
<user name="tomcatmanager" password="contraseña" roles="manager" />
</tomcat-users>

La variable $CATALINA_HOME indica dónde estarán almacenadas las aplicaciones, por ejemplo:

CATALINA_HOME="/usr/share/tomcat6"

Las aplicaciones van habitualmente en $CATALINA_HOME/webapps

La optimización del rendimiento de un servidor en producción implica analizar la propia aplicación, y también activar la compresión y regular el número de threads. Estas variables se cambian en el archivo server.xml, por ejemplo:

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"
               maxThreads="800"
               minSpareThreads="80"
               maxSpareThreads="160"
               compression="on"
               compressableMimeType="text/html,text/xml,text/plain" />

13. Samba: configuración y puesta a punto

Objetivos

Incorporar conocimientos que permitan facilitar la interacción entre equipos Linux y Windows.

13.1. [ ] Samba: conceptos, usos, posibilidades

Samba permite compartir directorios, archivos e impresoras con estaciones de trabajo Windows. Es decir, permite simular el comportamiento de un equipo Windows en lo que a compartición de recursos se refiere. También puede actuar ofreciendo esos servicios a estaciones de trabajo Linux.

Permite también configurar un Primary Domain Controller (PDC) o un Backup Domain Controller (BDC).

13.2. [ ] Configuración y puesta a punto

Los archivos de configuración se encuentran en /etc/samba. El más importante es smb.conf. Este archivo típicamente se recomienda que sea lo más pequeño posible, sin comentarios y no se deben agregar variables o instrucciones a menos que se conozca exactamente el impacto que provocarán.

En un sistema CentOS, para evitar inconvenientes, se debería desactivar SELinux como primera medida, si no se lo necesita.

Un archivo de configuración típico de un Samba actuando como PDC, y con un directorio compartido llamado “archivos” puede ser:

[global]
        workgroup = INTRANET 
        netbios name = FILESRV
        netbios aliases = SERVER
        server string = Samba Server %v
        interfaces = lo eth0
        bind interfaces only = Yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *New*password* %n\n *Retype*new*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
        unix password sync = Yes
        log file = /var/log/samba/%m.log
        max log size = 50
        max xmit = 65535
        name resolve order = host wins lmhosts bcast
        deadtime = 15
        add machine script = /usr/sbin/useradd -d /dev/null -g machines -s /bin/false -M %u
        logon script = inicio.cmd
        logon drive = Z:
        domain logons = Yes
        os level = 64
        preferred master = Yes
        domain master = Yes
        wins proxy = Yes
        wins support = Yes
        ldap ssl = no
        idmap config * : backend = tdb
        admin users = +admins
        create mask = 0660
        directory mask = 0770
        use sendfile = Yes
        posix locking = No
        strict locking = No

[homes] 
        comment = Home Directories
        read only = No
        browseable = No

[profiles]
        path = /datos/samba/profiles
        read only = No
        create mask = 0600
        directory mask = 0700
        browseable = No

[netlogon]
        comment = Network Logon Service
        path = /datos/samba/netlogon
        write list = +admins
        guest ok = Yes

[archivos]
        comment = Repositorio de archivos
        path = /datos/archivos
        read only = No

13.3. [ ] Administración de usuarios

En forma básica, los usuarios deben ser creados en el sistema primero, con el comando useradd y luego a Samba, con el comando smbpasswd:

useradd usuario
smbpasswd -a usuario

13.4. [ ] Configuración de comparticiones (almacenamiento e impresoras)

Las impresoras configuradas con CUPS, serán compartidas automáticamente mediante Samba con la siguiente configuración en smb.conf:

  [printers]
        comment = All Printers
        path = /tmp
        create mask = 0700
        printable = Yes
        print ok = Yes
        browseable = No

La configuración de un directorio compartido, permitiendo el acceso de los usuarios del grupo “intranet”, se realiza con un bloque de configuración como:

[archivos]
        comment = Archivos de datos
        path = /datos/archivos
        write list = +&intranet
        read only = No

14. NFS: sistema de archivos de red

Objetivos

Aprender a configurar correctamente y en forma segura directorios compartidos mediante el sistema de archivos de red.

14.1. [ ] NFS: conceptos, usos, posibilidades

NFS es un sistema de archivos de red especialmente útil cuando se deben compartir directorios de almacenamiento de datos con otras máquinas Linux.

14.2. [ ] Configuración y nociones de seguridad sobre NFS

El archivo de configuración de NFS es /etc/exports. En él se definen los directorios a ser compartidos, y con qué hosts o rangos de IP. Por ejemplo:

/mnt/datos       servidor(rw,no_root_squash,sync,no_subtree_check)
/home/usuario    172.16.13.0/24(rw,sync,no_subtree_check)

Los permisos en esos directorios compartidos, deben ser sincronizados con los permisos en las máquinas que actúen como clientes, es decir, los usuarios y grupos deben ser los mismos en el servidor y en los clientes. Esto es así porque NFS pasa los permisos en forma transparente al servidor.

15. Squid: servidor proxy HTTP

Objetivos

Incorporar los conocimientos necesarios para configurar, ejecutar y poner a punto un servidor proxy HTTP.

15.1. [ ] Squid: conceptos y definiciones

Squid es un proxy HTTP, es decir, actúa almacenando localmente los archivos que emplean los usuarios al navegar Internet. Cuando otro usuario vuelve a requerir un archivo que ya está almacenado, el proxy se encarga de transferirlo desde la caché evitando así el uso de la conexión a Internet, liberando ésta para tráfico nuevo. Con ello, se mejora en gran medida la congestión de esa conexión.

Además, permite asignar permisos de acceso, o denegarlo a sitios, redes, o según horarios, entre otras posibilidades.

15.2. [ ] Instalación y puesta a punto

En el archivo de configuración, básicamente se deben adaptar dos líneas. La primera es para configurar la red donde está instalado Squid:

acl localnet src 172.16.13.0/24

Asegurarse que la ACL tenga permitido el acceso en la siguiente línea:

http_access allow localnet

Y la segunda el puerto en el cual se desea que Squid esté escuchando:

http_port 8080

Luego se puede mejorar el manejo interno de los archivos de la caché, así como el tamaño de ésta (en este ejemplo 10240 es el tamaño máximo en MB de la caché):

cache_dir aufs /var/spool/squid 10240 16 256

También se puede aumentar el tamaño máximo de los archivos que van a ser almacenados en la caché:

maximum_object_size 204800 KB

Luego, la configuración es muy amplia, existiendo muchísimas variables según lo que se necesite. La configuración de accesos y denegaciones se realiza con un lenguaje de ACLs.

16. Correo-e: SMTP/POP3/IMAP

Objetivos

Aprender a configurar, operar y mantener un servidor de correo electrónico completo.

16.1. [ ] SMTP/POP3/IMAP: conceptos, definiciones, funcionamiento

El servidor SMTP es el encargado de transferir los mensajes de correo electrónico tanto entre servidores, como repartirlo a los usuarios existentes dentro de un servidor. Escucha en el puerto TCP 25, mientras que el puerto seguro es TCP 465. En este curso se usará Postfix.

El servicio POP3 permite la transferencia de los mensajes de correo electrónico que han llegado a una cuenta, desde el servidor hasta la estación de trabajo. Generalmente luego de transferidos, son eliminados del servidor. El puerto del protocolo es TCP 110, mientras que el puerto seguro es TCP 995. En este curso se verá Cyrus POP3.

El servicio IMAP ofrece la posibilidad de que los usuarios puedan leer los mensajes de sus cuentas de correo-e en el servidor, sin que los mensajes queden físicamente en los clientes de correo electrónico, más que en forma temporal en su caché. Esto ofrece la posibilidad a los administradores de configurar permisos sobre los mensajes y carpetas, permitir el acceso a las mismas cuentas a varios usuarios, y otras posibilidades prácticas para empresas y grupos de trabajo. El protocolo tiene especificado el puerto TCP 143, mientras que el seguro es el puerto TCP 993.

16.2. [ ] Postfix: instalación y configuración del servidor SMTP

Postfix es un SMTP seguro, eficiente, flexible y poderoso. Sus archivos de configuración están en /etc/postfix, y los principales son main.cf y master.cf. En el primero se define la mayor parte de la configuración del servicio, mientras que en el segundo se configuran los procesos y sistemas que forman parte de Postfix.

Algunas de las variables más importantes que se debe configurar en main.cf son:

myorigin = $myhostname
inet_interfaces = $myhostname, localhost
mydestination = $myhostname, localhost.$mydomain, localhost

En master.cf para activar el puerto seguro 465, se debe descomentar el siguiente bloque de configuración:

smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

16.3. [ ] CyrusIMAP: instalación y configuración del servidor IMAP/POP3

Cyrus IMAP proveerá la posibilidad a los usuarios de leer su correo electrónico. Sus archivos de configuración están en /etc y son imapd.conf y cyrus.conf.

En el primero se define la configuración del servicio IMAP:

configdirectory: /var/lib/imap
partition-default: /var/spool/imap
admins: cyrus
sievedir: /var/lib/imap/sieve
sendmail: /usr/sbin/sendmail
hashimapspool: true
sasl_pwcheck_method: saslauthd
sasl_mech_list: PLAIN
tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_key_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem
tls_ca_file: /etc/pki/tls/certs/ca-bundle.crt

Mientras que el segundo configura los procesos que forman parte del sistema IMAP. Por ejemplo, si se desea desactivar la posibilidad de que los usuarios utilicen POP3, se deben comentar ambas líneas en ese archivo:

  # add or remove based on preferences
  imap          cmd="imapd" listen="imap" prefork=5
  imaps         cmd="imapd -s" listen="imaps" prefork=1
  #pop3          cmd="pop3d" listen="pop3" prefork=3
  #pop3s         cmd="pop3d -s" listen="pop3s" prefork=1
  sieve         cmd="timsieved" listen="sieve" prefork=0

16.4. [ ] Otros sistemas que colaboran con el servidor de correo-e

Otros sistemas que son imprescindibles en un servidor de correo electrónico son el filtro antispam y el antivirus. Para el primero, se suele utilizar SpamAssassin, mientras que para el segundo un buen antivirus Open Source es ClamAV. Para unir ambos sistemas con el resto de los componentes, se usa Amavisd-new. La autenticación de usuarios puede ser realizada de manera básica con Cyrus SASL.

17. Administración de impresoras

Objetivos

Incorporar las técnicas y conocimientos necesarios para instalar y administrar impresoras en Linux.

17.1. [ ] CUPS: concepto y características básicas

El sistema de impresión que se utiliza en Linux hoy en día se llama CUPS (Common Unix Printing System), desarrollado por Apple para sus sistemas operativos basados en BSD Unix.

CUPS está pensado como un sistema cliente servidor, y utiliza el protocolo IPP (Internet Printing Protocol) en el puerto TCP 631.

Los archivos de configuración de CUPS se encuentran en /etc/cups mientras que la configuración de las impresoras está específicamente en el archivo /etc/cups/printers.conf.

17.2. [ ] Impresoras: agregando y configurando

Para administrar el servidor, así como instalar y manejar impresoras, se utiliza un navegador web, apuntando al URL:

http://localhost:631

El mismo sistema brinda mucha ayuda, y es relativamente fácil de aprender a usar. Cuando se realicen tareas administrativas, se solicitarán credenciales. Se debe ingresar el usuario root y su contraseña.

18. MySQL: conceptos, utilidad y posibilidades

Objetivos

Aprender a configurar, poner en marcha y administrar un servidor de bases de datos MySQL.

18.1. [ ] MySQL: conceptos, posibilidades

MySQL es un sistema de administración de bases de datos relacionales (relational database management system, RDBMS) de código abierto. Se caracteriza por ser rápida, flexible y relativamente fácil de utilizar.

Permite replicación, tiene un formato de tablas transaccionales, y soporte para plugins, por lo que se puede extender con muchas funcionalidades provistas por otros productos de código abierto y comerciales.

18.2. [ ] Configuración: archivo de configuración y parámetros básicos, ubicación de los datos

El archivo de configuración de MySQL en CentOS es /etc/my.cnf. Por defecto tiene poquísimas opciones. Sin embargo, es extremadamente amplio lo que se puede configurar del motor, mediante los valores que se asignan a diferentes variables del sistema en dicho archivo.

Para conectarse al motor se utiliza un utilitario llamado MySQL Monitor, de la siguiente manera:

mysql -u root -p -h host

Las variables internas del RDBMS se visualizan utilizando el cliente MySQL Monitor con el comando:

show variables;

Una vez instalado el motor, se puede ejecutar el script /usr/bin/mysql_secure_installation para dejarlo listo para producción.

Los datos se encuentran en el directorio /var/lib/mysql. Cuando se usan tablas transaccionales como InnoDB los datos no se guardan en archivos separados, sino que se encuentran físicamente en el archivo /var/lib/mysql/ibdata1.

18.3. [ ] Comandos esenciales: conexión, selección de bases de datos, inserciones, modificaciones, búsquedas

Para administrar MySQL existen varios utilitarios, entre los cuales los más importantes son mysql, mysqladmin y mysqldump.

MySQL Monitor, que se ejecuta con el comando mysql es uno de los más utilizados. Para conectarse a un servidor, a la base de datos “prueba”:

mysql -u usuario -p -h servidor prueba

Dentro de MySQL Monitor, algunas de las tareas utilizando comandos SQL pueden ser las siguientes. Notar que cada comando termina con un punto y coma (;).

Mostrar el listado de bases de datos:

SHOW DATABASES;

Cambiar a una base de datos:

USE basededatos;

Mostrar el listado de tablas de una DB:

SHOW TABLES;

Crear una base de datos:

CREATE DATABASE basededatos;

Crear una tabla en cambio, es mucho más complejo dada la cantidad de tipos de campos y posibilidades distintas, así como necesidades para las aplicaciones:

CREATE TABLE `nombres` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `apellido` varchar(100) NOT NULL,
  `nombre` varchar(100) NOT NULL,
  `documento` varchar(20) NOT NULL,
  `timest` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

Para insertar datos en la tabla previamente creada:

INSERT INTO nombres VALUES(NULL, "nombre", "apellido", "documento", NULL);

Modificar un campo de esa misma tabla:

UPDATE nombres SET nombre="nombrenuevo" WHERE nombre="nombreanterior";

Mostrar un listado de los registros:

SELECT * FROM nombres WHERE apellido like '%cadena%';

18.4. [ ] Permisos: comandos GRANT y REVOKE

El sistema de permisos de MySQL es complejo. A nivel básico inicial, puede definirse en dos pasos: crear el usuario, y asignarle permisos de acceso a bases de datos.

Para crear el usuario, el cual podrá acceder exclusivamente desde localhost:

CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'alguna_contraseña';

Asignarle permisos de acceso a bases de datos:

GRANT ALL PRIVILEGES ON `usuario\_%` . * TO 'usuario'@'localhost';

Quitarle los permisos de acceso a ese usuario:

REVOKE ALL PRIVILEGES ON `usuario\_%` FROM 'usuario'@'localhost';

Ver los permisos de un usuario:

SHOW GRANTS for 'usuario'@'localhost';

18.5. [ ] Mantenimiento: realizando backups y restores, reparando tablas, revisando el estado del servidor

MySQL es un motor que no requiere gran mantenimiento. Funcionará bien y confiablemente si las bases de datos han sido creadas correctamente y las variables internas han sido optimizadas según las aplicaciones y el uso que se le dará al RDBMS.

Sin embargo, es imprescindible confeccionar un esquema de backups y cada tanto analizar cómo está funcionando el motor para evitar sorpresas.

Para realizar un backup, se utiliza el comando mysqldump con una línea como:

mysqldump -hservidor --verbose -uusuario -pcontraseña --single-transaction -R -C \
--databases bases_a_resguardar 2> /var/log/servidor-dump.log | gzip > /ruta/de/almacenamiento/servidor.sql.gz

La restauración de un backup comprimido, se realiza con algo como lo siguiente:

zcat /ruta/de/almacenamiento/servidor.sql.gz | mysql -uusuario -p -hservidor

El estado del servidor, incluyendo variables internas del motor relacionadas con el rendimiento, se solicita con:

SHOW STATUS;

Si hay tablas MySAM dañadas, se pueden reparar con el comando:

REPAIR TABLE tabla;

18.6. [ ] PHPMyAdmin: introducción y manejo básico

PHPMyAdmin es un poderoso administrador para MySQL basado en PHP. Sólo se requiere un servidor Apache HTTP configurado y soporte para PHP.

Primero se lo debe bajar desde el sitio oficial, utilizando una versión compatible con PHP v.5.3 y MySQL v.5.1, que son las versiones que vienen con CentOS 6.5. En este momento, la versión disponible para dicha combinación es la 4.0.10.

Bajado y descomprimido, se debe crear el archivo config.inc.php a partir del ejemplo config.sample.inc.php. Hecho eso, probar de ingresar con el usuario y contraseña del usuario configurado al efecto en MySQL.

18.7. [ ] Ideas y comentarios

19. Virtualización: introducción, principales sistemas de virtualización y metodologías

Objetivos

Conocer cómo funcionan los modernos sistemas de virtualización e incorporar las ideas necesarias para poder aprovecharlos.

19.1. [ ] Virtualización en Linux: conceptos principales, KVM, Xen, VirtualBox, vserver, Wine

Virtualización es el proceso de crear una instancia o versión virtual (en vez de real) de algo, incluyendo hardware, sistemas operativos, redes, o dispositivos de almacenamiento, entre otras posibilidades.

Por sus características, Linux ofrece muchas posibilidades y potencial para diversos tipos de virtualización, incluyendo el sistema de archivos monoraíz, la potencia de la multitarea, la flexibilidad del kernel, y la confiabilidad y rendimiento del sistema operativo como un conjunto. La virtualización es la base de la famosa “nube”, tan de moda hoy día.

Hay dos tipos principales de virtualización de hardware: virtualización completa (full virtualization) y paravirtualización (paravirtualization).

Veamos algunos a continuación.

19.2. [ ] Xen: concepto, filosofía, posiblidades, empleo

Xen es un hipervisor que usa un diseño de microkernel, y provee servicios que permiten ejecutar múltiples sistemas operativos al mismo tiempo en la misma computadora física.

Fue uno de los primeros y más importantes sistemas de virtualización Open Source para Linux. El kernel del dom0 (anfitrión) está modificado para proveer servicios de virtualización a las máquinas virtuales (visitantes). Soporta virtualización completa y paravirtualización.

19.3. [ ] KVM: concepto, filosofía, posibilidades, empleo

Kernel-based Virtual Machine es un conjunto de módulos para el kernel, que brindan acceso al set de instrucciones de virtualización de los modelos modernos de microprocesadores Intel-compatibles, sean AMD o Intel, permitiendo la instalación de sistemas operativos completos sin modificación, y obteniendo rendimiento similar al hardware directo. KVM no necesita un kernel modificado en el anfitrión.

Permite paravirtualización de algunos dispositivos, como placa de vídeo, almacenamiento, placa de red y memoria de tamaño variable (balloon device), y para algunos sistemas operativos, mediante la instalación en estos de drivers para la API VirtIO.

Permite iniciar una máquina virtual con un simple comando con algunos parámetros. También se puede utilizar un sistema más complejo de manejo de las VMs, como libvirt.

19.4. [ ] VirtualBox, vserver, Wine

VirtualBox: es un desarrollo original de Sun Microsystems, hoy Oracle, que se instala como una aplicación en un sistema operativo y ofrece una interfaz gráfica potente y flexible para crear máquinas virtuales. También provee comandos de shell, y múltiples utilitarios y recursos para trabajar con las VMs.

Vserver: Linux-VServer es un mecanismo de jaula que puede ser usado para asegurar la separación de los recursos de un sistema de computación de manera que los procesos no pueden ejecutar un ataque de denegación de servicio sobre cualquier cosa fuera de su partición.

Wine: Es un muy importante proyecto que ofrece una capa de compatibilidad para ejecutar bajo Linux programas compilados para Windows. Duplica funciones de Windows proveyendo implementaciones alternativas de las DLLs que necesitan los programas y un proceso para sustituir el kernel NT de Windows. Permite ejecutar programas muy grandes como juegos de última generación, Office y muchos otros.

19.5. [ ] Otras ideas y posibilidades: chroot, clustering

chroot: es una operación que cambia la raíz del sistema para el proceso en ejecución y sus hijos. Un proceso que corre en esta “jaula chroot” no puede acceder archivos fuera del árbol de directorios que se le asignó. Se usa para pruebas, acceso a sistemas dañados, instalación remota de sistemas operativos y separación de privilegios entre otros usos

clustering: un cluster es un conjunto de computadoras interconectadas y configuradas de manera de actuar como una sola para ciertas operaciones. Se obtienen así ventajas de rendimiento, de confiabilidad y tiempo de operación, o ambas. Linux ofrece gran flexibilidad, sumado a la confiabilidad y potencia del sistema operativo, para la creación de clústeres muy grandes. Todas las supercomputadoras más poderosas corren en Linux

20. Seguridad: conceptos, filosofía, métodos de ataque y verificación de la seguridad de un sistema

Objetivos

Incorporar los conocimientos necesarios para revisar y mejorar la seguridad de un sistema Linux, así como conocer y comprender los métodos de ataque más comunes.

20.1. [ ] Seguridad: conceptos iniciales, definiciones, formas de ataques, hacking, cracking, phishing, spoofing, virus, worm, trojan horse, backdoor, rootkit, DNS cache poisoning, keylogger, honeypot, sandbox, port scanning

Hacking: es el proceso de aprovechar y extender los recursos disponibles de software y hardware mediante el desarrollo de código, nuevas técnicas o simplemente el aprendizaje y la mejora de métodos y procesos. La persona que se dedica a esto es denominada hacker

Cracking: es el proceso de ganar acceso no permitido, y por lo tanto ilegal, a software o sistemas informáticos, realizados por una persona a la que se denomina cracker

Phishing: es el método de adquirir información valiosa como usuarios, contraseñas y datos de tarjetas de crédito enmascarándose como una entidad válida

Spoofing: es un método de ataque en el cual se obtiene acceso no permitido enmascarando algo válido mediante la falsificación de datos

Virus: es un software dañino que cuando es ejecutado se replica insertando copias de sí mismo en otros ejecutables existentes, el sector de inicio del disco, o incluso archivos de datos

Worm: se llama gusano a un software dañino que luego de infectar un primer punto de entrada, trata de infectar por algún método otros sistemas informáticos conectados de alguna manera con el primero. La diferencia con el virus, es que no necesita infectar otros ejecutables del sistema

Trojan horse: es un método de infección de sistemas informáticos gracias a la utilización de software dañino introducido como si fuera fiable

Backdoor: es un método de saltear el acceso estándar mediante autenticación de un sistema de computación, mediante la apertura de puertos, la instalación y ejecución de programas ocultos, la utilización de contraseñas por defecto, y otros.

Rootkit: es un set de herramientas de software que permite a un atacante tomar el control de un equipo de computación sin ser detectado

DNS cache poisoning: ataque que provoca el almacenamiento de entradas falsas en la caché de un DNS, permitiendo el redireccionamiento del tráfico hacia servidores controlados por el atacante

Keylogger: programa que almacena las teclas que son pulsadas en un teclado, para su posterior análisis

Honeypot: equipo o servicio configurado de manera que permita ataques, a la vez que analizar qué está ocurriendo y cómo, con fines de investigación o defensa

Sandbox: es un mecanismo de seguridad para permitir la ejecución de programas o sistemas aislados del resto del entorno

Port scanning: proceso de buscar qué puertos están en estado de escucha (listening) en un equipo remoto

20.2. [ ] Detección de intrusiones: snort, tripwire

Snort: es un sistema de detección de intrusiones (IDS), extensible, poderoso, flexible y que permite responder a las amenazas de manera automatizada

Tripwire: es un sistema que se utiliza para auditar un sistema Linux de manera automática. Debe ser instalado inmediatamente después del sistema operativo, para poder asegurar que el mismo está perfectamente limpio

20.3. [ ] Revisión de seguridad: tripwire, nmap, chkrootkit, rkhunter

Tripwire permite analizar los aspectos más importantes y básicos de la seguridad de un sistema, pero debe ser instalado sobre un sistema limpio. Nmap es un completo sistema de análisis remoto de seguridad de equipos mediante escaneo de puertos. Chkrootkit y RKHunter son dos sistemas de búsqueda de rootkits.

20.4. [ ] Otras ideas interesantes sobre seguridad

El análisis de los requerimientos, sumados a un buen esquema de implementación, y a la aplicación de medidas básicas, avanzadas y creativas permite lograr un alto nivel de seguridad en sistemas Linux.

20.5. [ ] Firewall: Netfilter/Iptables

Se llama Netfilter al framework del kernel Linux que ofrece llamadas flexibles para varias operaciones relacionadas con el stack de red. Provee filtrado de paquetes (packet filtering), traducción de direcciones de red y puertos (network address [and port] translation, NA[P]T), y otras formas de operación sobre paquetes (packet mangling).

Iptables es un comando y un sistema de tablas genéricas para la elaboración de reglas.

Mostrar las reglas existentes:

iptables -nL

Eliminar (flush) todas las reglas existentes:

iptables -F

Cambiar las políticas por defecto:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Bloquear una dirección IP:

IPABLOQUEAR="aaa.bbb.ccc.ddd"
iptables -A INPUT -s "$IPABLOQUEAR" -j DROP

Bloquear una dirección IP en una interfaz específica:

iptables -A INPUT -i eth0 -s "$IPABLOQUEAR" -j DROP

Permitir TODO el tráfico de entrada de SSH:

iptables -A INPUT -i eth1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Permitir el acceso por varios puertos en una sola regla:

iptables -A INPUT -i eth1 -p tcp -m multiport --dports 25,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp -m multiport --sports 25,80,443 -m state --state ESTABLISHED -j ACCEPT

Ejemplo de port forwarding:

iptables -t nat -A PREROUTING -p tcp -d 172.16.16.102 --dport 22222 -j DNAT --to 172.16.16.102:22
iptables -A INPUT -i eth1 -p tcp --dport 22222 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 22222 -m state --state ESTABLISHED -j ACCEPT

Bibliografía