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.
Adquirir conceptos básicos y terminología necesaria para el uso diario del sistema operativo.
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.
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.
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.
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
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:
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:
Incorporar las técnicas y conocimientos necesarios para instalar exitosamente el sistema operativo, y dejarlo funcionando adecuadamente.
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:
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.
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:
Para un servidor básico, puede recomendarse algo como:
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.
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
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.
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
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
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
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
Entre muchos otros servicios importantes hoy día, algunos comunes, prácticos y confiables son:
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:
cd /usr ; tar czf /tmp/bin.tar.gz ./bin & tar czf /tmp/lib.tar.gz ./lib &
alias listado="ls -la --color=auto"
ps axu > psaux.txt
grep lalala * 2> grep-errores.txt
grep lalala * &> grep-salidayerrores.txt
ps aux | grep syslog
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:
man grep
man yum.conf
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
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/
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.
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.
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:
Los comandos disponibles son muchísimos. Los más comunes pueden ser:
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.
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.
Los comandos principales de administración de archivos y directorios son los siguientes:
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
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
Aprender lo mínimo necesario para escribir y ejecutar un script de shell.
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
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
Conocer la forma en que Linux maneja los usuarios y cómo se los administra.
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
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.
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
Incorporar los conocimientos necesarios para poder preparar sistemas de archivos para el uso del sistema operativo.
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
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
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.
Conocer la forma en que algunas distribuciones de Linux manejan los paquetes de software, y aprender a utilizar el sistema de paquetes RPM.
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
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.
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
Incorporar los conocimientos necesarios para poder entender cómo funcionan y cómo se instalan redes bajo estos protocolos
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
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:
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 |
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.
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
Entender la utilidad de tener un DNS configurado en el servidor, así como aprender la configuración y empleo del DNS BIND9.
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:
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.
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
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.
Incorporar los conocimientos que permitan configurar, poner en marcha, agregar funcionalidad y mantener un servidor Apache
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
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
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>
Conocer aspectos básicos del manejo del servidor de aplicaciones, su configuración y manejo esencial
Apache Tomcat es un servidor Open Source de aplicaciones Java Servlets o Java Server Pages (JSP) desarrollado como proyecto de la Apache Software Foundation.
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
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" />
Incorporar conocimientos que permitan facilitar la interacción entre equipos Linux y Windows.
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).
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
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
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
Aprender a configurar correctamente y en forma segura directorios compartidos mediante el sistema de archivos de red.
NFS es un sistema de archivos de red especialmente útil cuando se deben compartir directorios de almacenamiento de datos con otras máquinas Linux.
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.
Incorporar los conocimientos necesarios para configurar, ejecutar y poner a punto un servidor proxy HTTP.
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.
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.
Aprender a configurar, operar y mantener un servidor de correo electrónico completo.
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.
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
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
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.
Incorporar las técnicas y conocimientos necesarios para instalar y administrar impresoras en Linux.
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.
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.
Aprender a configurar, poner en marcha y administrar un servidor de bases de datos MySQL.
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.
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.
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%';
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';
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;
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.
Conocer cómo funcionan los modernos sistemas de virtualización e incorporar las ideas necesarias para poder aprovecharlos.
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.
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.
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.
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.
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
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.
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
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
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.
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.
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