Subido por Luisin

inConcert Curso Nivelación Linux

Anuncio
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.
Descargar