PORTADA CURSO INTRODUCCION A LINUX Índice de contenido Introducción al Curso.................................................................3 Conceptos..................................................................................3 Interfaz de Usuario....................................................................3 Comandos..................................................................................5 pwd...................................................................................................5 ls.......................................................................................................6 man...................................................................................................6 cat, head y tail...................................................................................7 cd......................................................................................................7 cp, mv y rm.........................................................................................7 touch.................................................................................................7 mkdir.................................................................................................7 ifconfig, ethtool, netstat, route, ping..................................................7 Otros comandos de interés.................................................................8 Sufijos.......................................................................................8 Modelo Cliente/Servidor............................................................9 ifconfig............................................................................................10 ethtool.............................................................................................10 route................................................................................................11 netstat..............................................................................................11 ping, traceroute y tcpdump................................................................11 Edición de ficheros...................................................................12 Troubleshooting y buenas prácticas.........................................12 - Introducción al Curso El objetivo de este bloque es dar las herramientas básicas de gestión de un sistema operativo Linux con propósitos de SERVIDOR. Con el fin de comprender los conceptos del curso es necesario que se tengan conocimientos intermedios de redes IP y se recomienda profundizar los temas tratados en la Internet. - Conceptos Linux es un sistema operativo multiusuario y multitarea. Es posible conectar muchos usuarios simultáneamente al mismo sistema ejecutando comandos y accediendo a aplicaciones. Las aplicaciones se ejecutan en paralelo y comparten recursos. El objetivo es que las aplicaciones realicen - en lo posible - una sola tarea de forma correcta. El sistema operativo brinda un entorno intuitivo para que cada módulo se comunique y ofrezca un servicio al usuario en conjunto. Con este enfoque, la comunicación con el usuario y en muchos casos también la interna entre servicios, es en texto plano permitiendo realizar interacciones complejas a partir de servicios sencillos. - Interfaz de Usuario Típicamente una instalación genera un usuario administrador con el nombre root al que se accede por consola de texto. El escritorio gráfico (similar a Windows) se apoya en el servicio X11 y tiene diferentes apariencias según la distribución, pero no suele ejecutarse en ambientes tipo SERVIDOR. Un programa que vamos a seguir abordando mas adelante es SSH, el cual usa un protocolo que también lleva su nombre para realizar conexiones remotas seguras sobre IP a la consola de Linux. Siguiendo los casos prácticos de inConcert, el siguiente ejercicio se realizará con el usuario root. No es una buena practica utilizar este usuario para conexiones remotas (ni para una larga lista de tareas). Al ejecutar SSH Secure Shell Client, haciendo click en el icono siguiente ventana para ingresar los valores de conexión. veremos la Aquí se debe ingresar el servidor de pruebas y marcar “Authentication Method”: Password. Si es realizado correctamente debe verse, luego de un mensaje de bienvenida, lo siguiente: [root@asterisk ~]# Dicho mensaje indica que el sistema esta esperando un comando. El encargado de interpretar los comandos es el bash. El sistema de archivos y ficheros es similar a Windows donde el punto inicial es / y hacia abajo se puede encontrar por ejemplo el directorio /home/audios/ o el fichero /etc/asterisk/extensions.conf Los directorios y ficheros tienen permisos de lectura, de escritura y/o de ejecución (abreviados r w y x respectivamente), para el propietario, para un grupo y para todos los usuarios. Esto forma 9 indicadores con lo cual típicamente el detalle de un fichero se ve de la siguiente manera: drwxr-xr-x 2 root root 4.0K Aug 14 13:30 /home/audios -rw-r--r-- 1 root root 5.3K Aug 15 10:39 /etc/asterisk/extensions.conf Veamos por partes el listado, tomando como ejemplo la primera línea. La primer columna (drwxr-xr-x) es el tipo y sus permisos, la siguiente columna (2) es el número de enlaces al archivo, la tercera columna (root) representa al propietario del fichero, la cuarta columna (root) representa al grupo al que pertenece del fichero y las siguientes son el tamaño, la fecha y hora de última modificación y por último el nombre del fichero o directorio. El primer carácter al extremo izquierdo, representa el tipo. Los posibles valores para esta posición son los siguientes: • • • • - (guión) representa un fichero común (texto, html, mp3, jpg, etc.) d representa un directorio l link, es decir un enlace o acceso directo b binario, un archivo compilado, generalmente ejecutable Los siguientes 9 restantes, representan los permisos del fichero y deben verse en grupos de 3 donde un guión significa que no tiene permiso para esos usuarios. En el ejemplo /home/audios es un directorio para el que el usuario root puede leer, escribir o ejecutarlo, el grupo root puede leerlo y ejecutarlo pero no escribirlo y el resto de los usuarios pueden leerlo y ejecutarlo pero no escribirlo. - Comandos Utilizaremos la conexión SSH con la consola para probar comandos básicos: IMPORTANTE: Los siguientes comandos son importantes pero NO han de ser utilizados en el servidor del Curso: chkconfig, reboot, shutdown, kill, killall > pwd Muestra el fichero sobre el que se van a ejecutar los comandos. Típicamente una conexión ssh con usuario root nos va a dejar en /root > ls Lista el contenido del directorio (igual que dir en la consola de Windows). En el servidor de este ejercicio encontraremos el fichero LEAME. Los comandos pueden recibir parámetros utilizando un espacio y un – (guión) seguido de texto que indican modos de ejecución. Dos opciones muy útiles del ls son l (vista con detalles) y a (mostrar entradas ocultas). Podemos probar: ls -l ls -a También es posible concatenar opciones, por ejemplo: ls -la El resultado de dicho comando mostrará en pantalla algo similar a lo detallado en la siguiente imagen: > man Muestra la documentación de un comando, por ejemplo man ls. > cat, head y tail Imprimen en pantalla el contenido de un fichero, por ejemplo cat LEAME. Head y tail solo muestran las primeras y últimas líneas respectivamente. Dos opciones muy utilizadas del comando tail son n20 para listar las últimas 20 líneas y f para que la salida a consola anexe líneas en tiempo real. > cd Permite posicionarse en otro directorio (similar a Windows). Puede hacerse a partir del directorio actual, por ejemplo cd curso_nivelacion o desde la raíz cd /root/curso_nivelacion. Una funcionalidad común a la mayoría de las consolas de los sistemas operativos modernos es que la tecla Tab autocompleta. Esto puede realizarse tanto para un comando como para un parámetro. > cp, mv y rm Son comandos para copiar, mover y borrar un fichero, respectivamente. > touch Crea un fichero nuevo. No se abordará durante el curso pero puede utilizarse el comando man touch para profundizar. > mkdir Crea un directorio nuevo. No se abordará durante el curso pero puede utilizarse el comando man mkdir para profundizar. > ifconfig, ethtool, netstat, route, ping Además de los comandos que trabajan sobre servicios del filesystem, la memoria, cpu, etc. directamente involucrados con el funcionamiento del kernel (Sistema Operativo), existen comandos más específicos. Nos centraremos en la gestión de la tarjeta de red, ya que para los productos de inConcert este aspecto es esencial, pero manejaremos muchos conceptos a nivel general. Más adelante revisaremos dichos comandos en profundidad, pero para entender su salida y sus ejecuciones, debemos profundizar como Linux maneja el entorno y los dispositivos. > Otros comandos de interés Los siguientes comandos pueden ser de gran utilidad. En ésta instancia no se detallarán sus usos y definiciones pero podemos utilizar el comando man para aprender su utilidad y modos de ejecución: echo, tar, df, du, w, locate, find, ps, uptime, top, setup, uname. - Sufijos Como se ha visto hasta ahora, los comandos devuelven información imprimiendo texto plano en pantalla. Una de las utilidades de este diseño es que la salida de un comando puede ser utilizada por otro comando. Los dos sufijos mas comunes para redirigir una salida son > (mayor) y | (pipe). El primero inserta los datos obtenidos por el primer comando en un fichero o una variable de entorno. Por ejemplo cat LEAME > EDITEME.txt genera el fichero EDITEME.txt con la salida del comando cat, generando a su vez el mismo fichero pero con permisos de edición para el usuario root. El segundo sufijo pasa la salida como parámetros al siguiente comando. Una aplicación común es junto al comando grep. Por ejemplo, cat LEAME | grep paralelepípedo pasa la salida del comando cat al comando grep que busca líneas en las que encuentre la palabra paralelepípedo. Un uso típico de ésta modalidad es quedarse únicamente con ciertas líneas de interés de un archivo de log grande antes de manipularlo. Por ejemplo, cat /var/log/messages | grep restart > /root/servicios_reiniciados.log ; de esta manera se puede manipular un archivo mas pequeño que contiene solamente las líneas de interés. También se pueden utilizar dos pipes y greps seguidos cat /var/log/asterisk/cdrcsv/Master.csv | grep “2014-08-19” | grep “Zap/13” y se pueden utilizar pipes sobre la salida en tiempo real como en tail -f /var/log/asterisk/messages | grep Dial o tcpdump -ieth0 | grep 192.168.100.11. - Modelo Cliente/Servidor Un grupo de aplicaciones muy importantes en Linux son los daemons, que se comunican con el sistema operativo desde “un segundo plano” (en Windows seria similar a un service). Los mismos tienen un identificador de proceso PID (que puede verse en los comandos top y ps) y actúan como SERVIDORES que mantienen el mecanismo funcionando y permiten que usuarios y otras aplicaciones interactúen con el sistema operativo y los dispositivos a través de ellos. Entre otras cosas, son los que consumen los módulos (drivers) que controlan el hardware. Un demonio en particular, el syslogd, es utilizado por los demás para escribir en archivos de log. Luego los servicios son los encargados de leer parámetros iniciales de ficheros de texto y levantar los daemons necesarios para que funcione la interfaz de red, SSH, asterisk, etc. Estos pueden recibir y devolver información a través de comandos de consola, rutas virtuales y variables de entorno entre otras posibilidades. Nos centraremos en el servicio de red. El script que configura y levanta la red con los parámetros particulares de la instalación se encuentra en: /etc/init.d/network Se encuentra en texto plano y eventualmente lo podemos editar, pero NO es recomendable. Este servicio conoce los daemons involucrados en la gestión de la red y lee los parámetros particulares de la instalación desde los ficheros de configuración. Editando estos archivos podemos modificar la dirección IP, máscara de red, rutas, el DNS, etc. con los que el sistema operativo va a funcionar al encenderse. Típicamente los ficheros de configuración de TODOS los servicios se encuentran dentro del fichero /etc/. Particularmente en CentOS los archivos de configuración de la red se encuentran en /etc/sysconfig/network-scripts/ Por ejemplo, cat /etc/sysconfig/network-scripts/ifcfg-eth0 contiene los datos esenciales de una interfaz de red de la placa. Modificarlo y ejecutar /etc/init.d/network restart cambiaría la configuración de red permanentemente, manteniéndola así incluso para las siguientes instancias de booteo del sistema. Existen otros ficheros involucrados a la gestión de la red, por ejemplo /etc/resolv.conf y /etc/hosts que no son utilizados “en segundo plano” sino que son consumidos on-demand y al editarlos el cambio es inmediato. Los ficheros de configuración suelen tener una estructura similar a los ini de Windows. Tienen secciones marcadas con [seccion1] y un salto de línea. Dentro de cada sección, separado por saltos de línea hay parámetros marcados como variable=valor. Para las excepciones de formato, manteniendo en mente que son parámetros de ejecución, suelen ser fácilmente interpretables por un usuario. Cualquier servicio al que se le realice un restart genera una ventana de tiempo en la cual deja de responder a todo lo asociado a él, por lo que hay que ser muy prudente en ambientes de producción. Afortunadamente existen comandos y aplicaciones que pueden leer y modificar valores de los daemons en ejecución sin necesidad de reiniciarlos. Recordemos de todas formas que estos cambios no van a ser permanentes hasta no introducirlos en los ficheros de configuración. Habiendo entendido ésto, analizaremos los comandos mencionados en las secciones anteriores. > ifconfig Despliega el estado de las interfaces reconocidas por el módulo de red. Existe una interfaz adicional en todos los sistemas operativos Linux que veremos al ejecutar ifconfig: IMPORTANTE: Esta interfaz es virtual y los daemons la utilizan para comunicarse internamente. La interfaz sobre la que trabajaremos es eth0. Este comando puede fácilmente modificar la IP con la que se presenta a la red ejecutando ifconfig eth0 192.168.123.123. Dicho comando es muy potente y debemos ser muy prudentes al utilizarlo ya que nuestra conexión remota por ssh depende de que la red esté accesible. Para hacer este ejercicio generaremos interfaces virtuales sobre eth0. Cada uno utilizará una IP diferente y deberá ejecutar lo siguiente ifconfig eth0:1 10.1.1.10 netmask 255.255.255.0 donde otro alumno utilizara ifconfig eth0:2 10.2.2.10 netmask 255.255.255.0, etc. El comando ifconfig eth0:1 down se deshabilita una interfaz. > ethtool Junto a ifconfig permite leer y editar el estado de la interfaz de red. Por ejemplo ethtool eth0 lista valores de capa ethernet. Este comando puede fácilmente modificar los parámetros de transmisión ejecutando ethtool -s eth0 speed 100 duplex full. > route Junto a las anteriores abarcan todos los aspectos relevantes de la conectividad IP. Lista la tabla de ruteo IP ejecutando route -n y se pueden agregar entradas a la tabla con route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.100.1 dev eth0. Aquí se verán todas las rutas que generó el comando ifconfig al crear las interfaces virtuales sobre eth0. Estos comandos que actúan sobre los daemons NO son persistentes, es decir, si los servicios que los controlan se reinician por problemas de performance, un watchdog o simplemente porque la máquina se reinicia, los cambios se perderán. Es muy importante luego de validar una configuración, mapear estos cambios a los ficheros de configuración. En caso de desastre puede ser útil el comando history para recuperar algún comando exitoso que no recordemos con que opciones lo habíamos ejecutado. Por ejemplo history | grep duplex. > netstat Lista los servicios que estén conectados a las interfaces y con qué acción. Al ejecutarlo con las opciones netstat -putan muestra los PID de los servicios que se están utilizando tanto UDP como TCP, conexiones activas y pasivas, sin realizar resolución inversa de DNS. Típicamente se combina con grep, por ejemplo para ver a todos los usuarios que están conectados a la consola: netstat -putan | grep ':22'. > ping, traceroute y tcpdump Se han de ver como ejercicio. - Edición de ficheros Para editar el texto de un fichero, es posible con SSH Client y editarlo en Windows pero es importante recordar desmarcar de la barra de herramientas la opción autoselect y forzar ASCII para mantener el formato. Otra opción es editar directamente desde Linux. CentOS cuenta con varios editores de texto. Puntualmente veremos Nano, utilizado por la mayoría del personal de inConcert. Si desearamos ampliar nuestros conocimientos sobre el mismo podemos consultar la siguiente fuente: http://www.nano-editor.org/dist/v2.2/nano.html Con el fin de abrir el contenido del fichero nano LEAME, el editor nos quita del modo consola y muestra el texto, el cual podemos modificar con el teclado. En el sector inferior se listan las funciones básicas. Todas se acceden presionando el tecla Ctrl combinada con otra, por ejemplo Ctrl+G muestra la ayuda. • Ctrl+W busca un patrón (pattern) • Ctrl+U corta una línea • Ctrl+K pega la línea • Ctrl+O guarda • Ctrl+X vuelve a la consola - Troubleshooting y buenas prácticas • El daemon syslogd deja los log de los servicios dentro del directorio /var/log/, por ejemplo el kernel de linux, wanpipe, entre otros, escriben por defecto en /var/log/messages, ssh escribe en /var/log/secure, asterisk tiene su directorio en /var/log/asterisk/ y cuenta con un fichero de configuración donde indicar varios tipos de logs. • Si se conoce la entrada típica en un log que representa el éxito o fracaso de una transacción, es muy útil el siguiente comando sobre el fichero de log correspondiente, tail -f /var/log/asterisk/messages | grep 'Executing Dial' para realizar una prueba en vivo en un entorno de producción. • La mayoría de los servicios utilizan el fichero virtual /proc/ para listar en texto plano información crítica, por ejemplo cat /proc/net/dev muestra información de tráfico IP. Es similar a un snmp interno al sistema operativo. • Además del top que se autorefresca, puede servir el ps junto al grep para verificar que servicios están ejecutándose y que no haya instancia repetidas, por ejemplo ps -ax | grep ssh. • Estudiar qué ficheros de configuración son los leídos al reiniciar un servicio y procurar reiniciar únicamente los servicios que consumen esos ficheros de configuración. • Utilizar cat /etc/redhat-release para ver la versión del kernel (solo para la familia de distros redhat) • Para verificar con netstat que Asterisk y el Middleware están conectados: ◦ netstat -putan | grep 6010 ▪ 6010 es el puerto definido en /etc/asterisk/inconcert.conf y en Windows para comunicarse. ▪ La salida del comando típicamente lista 5 conexiones TCP activas desde la IP del Middleware. Además, Asterisk tiene el puerto 6010 abierto para un contacto nuevo desde cualquier IP (que hable el protocolo de inConcert). • Otro servicio útil que viene instalado en inConcert es iptables. Se recomienda profundizar pero éstos son algunos de los comandos más importantes: services iptables status, nano /etc/sysconfig/iptables, iptables -L, chkconfig iptables on. • Linux tiene 2 servicios de ejecución periódica que son muy útiles para automatizar procesos: ◦ El servicio crond agenda tareas y las ejecuta automáticamente. ▪ service crond status ▪ nano /ect/cron.d/ejemplo ◦ El servicio logrotate sirve para gestionar ficheros, típicamente logs. Como Linux por defecto genera logs para casi todas las actividades, es importante mantener este tipo de archivos acotados. ▪ nano /etc/logrotate.d/asterisk ▪ logrotate -f /etc/logrotate.d/asterisk • Para configurar las LAN con switches Cisco se ha de reconfigurar eth0 a fullduplex 100 de la siguiente manera: 1. ethtool -s eth0 speed 100 duplex full (NO es permanente) 2. Agregar en /etc/sysconfig/network-scripts/ifcfg-eth0 1. ETHTOOL_OPTS=”speed 100 duplex full autoneg off” 2. Reiniciar network (A partir de este momento sí queda permanente) • Para medir bajada y subida entre ambos servidores para diagnosticar la LAN, podemos: ◦ Desde Windows: Directamente con el cliente SSH de Windows ejecutado desde el Middleware. Al copiar un archivo (preferentemente mayor a 100 MB) en la ventana File Transfer se ven algunos datos de copiado, entre ellos el consumo. ◦ Desde Linux: Utilizar el comando scp el cual también muestra la tasa de transferencia. Es necesario que el otro nodo tenga un SSH server funcionando ya que scp utiliza el protocolo y las credenciales de SSH. Las tasas de transferencia deben estar por encima de 1 Mbps para asegurar el correcto funcionamiento de la solución.