Comunicaciones Unificadas Con Elastix/Linux para Administradores Elastix

Sólo los débiles hacen copias de seguridad en cintas: los hombres de verdad tan solo suben sus cosas importantes a un servidor ftp, y dejan que el resto del mundo las replique. -- Linus Torvalds, creador de Linux

Introducción

editar

En este capítulo se repasarán algunos conceptos útiles de Linux para facilitar la vida de los administradores de Elastix. Si usted ya conoce cómo administrar su Elastix desde la línea de comandos de Linux, sáltese este capítulo y vaya directamente al siguiente.

Debido a que este no es un libro de Linux no ahondaremos mucho en el tema, ni hablaremos de la historia de Linux, ni de sus ventajas, ni ahondaremos en detalles. Así que si en algún momento le parece que estoy abordando los temas de manera muy general... esa es la idea :)

Si al final de este capítulo aún siente que existen vacíos, le recomendamos capacitarse en administración de Linux, sin duda le facilitará las tareas de administración de Elastix.

Línea de comandos de Linux

editar

Una manera muy útil de administrar Elastix es desde la línea de comandos de Linux. La línea de comandos de Linux nos permitirá explotar al máximo el potencial de nuestro Servidor de Comunicaciones Unificadas.

Para ingresar a la línea de comandos lo podemos hacer directamente conectando un monitor y teclado a nuestro equipo instalado con Elastix o conectándonos remotamente a través del protocolo SSH.

Si estamos en un equipo Windows debemos descargar un programa cliente para podernos conectar remotamente. El programa que recomendamos aquí se llama PuTTY y basta hacer una búsqueda en Google por ese nombre para encontrar el sitio de descargas. Sólo asegúrese de hacerlo del sitio oficial.

Comandos básicos

editar
Comando Descripción
ls Lista los archivos en el directorio actual
ls -la Lista los archivos y sus atributos
cd Cambia de directorio
cd .. Cambia al directorio padre
cat Muestra el contenido de un archivo en la pantalla
pwd Muestra la ruta actual
cp Copia un archivo o grupo de ellos
mv Mueve un archivo. También se lo usa para renombrar archivos
rm Elimina un archivo
tail -f nombre_archivo Muestra las últimas líneas de un archivo en tiempo real
mkdir Crea un directorio
tar -xvzf nombre_archivo.tar.gz Descomprime un archivo tar.gz
top Muestra un reporte en tiempo real de los procesos que se ejecutan en el sistema. Puede ser ordenado por consumo de memoria o CPU. Muy útil para diagnóstico
find Permite buscar arhivos
vim Programa para ver y editar archivos de texto plano
ifconfig Muestra información de las interfaces de red y permite modificarlas temporalmente
ps -aux Muestra un reporte de los procesos que se están ejecutando en el servidor
reboot Reincia el equipo
shutdown -h now Apaga el equipo
man comando Muestra documentación sobre un determinado comando

Sistema de archivos

editar

En Linux es muy importante la organización del sistema de archivos.

Esta organización le otorga a Linux robustez e interoperabilidad pues los programas pueden predecir con mayor exactitud dónde se encuentran ciertos archivos para su correcto funcionamiento y así mismo escribir archivos de manera que otros componentes los entiendan. Esto minimiza los conflictos y en conjunto con el sistema de permisos añade más seguridad al sistema operativo.

Organización

editar

La organización de directorios que se mostrará a continuación no es arbitraria. Es producto de años de evolución desde las primeras versiones de UNIX.

Esta estructura de carpetas está ubicada en lo que se llama directorio raíz, o directorio principal. Este directorio raíz es el directorio de más alto nivel en el sistema de archivos.

Directorio Descripción
/sbin Incluye binarios que pueden ejecutados solo por el administrador
/bin Contiene binarios necesarios para el correcto funcionamiento del sistema. Los binarios de esta carpeta pueden también ser utilizados por los usuarios del sistema
/boot Este directorio contiene el kernel y otros archivos necesarios al momento de arranque
dev Este directorio contiene archivos que representan dispositivos de hardware. Recordemos que en Linux prácticamente todo es un archivo
/etc Este directorio contiene básicamente archivos de configuración para todo el sistema
/home Aquí residen los directorios de los usuarios. Por ejemplo, el directorio /home/jorge es el directorio del usuario “jorge”
lib Contiene básicamente las librerías compartidas que requieren los programas. Algo análogo a los archivos .dll en Windows
lost+found Cuando por alguna razón el sistema de archivos se corrompe y hay que repararlo; los resultados de esa reparación se guardan en este directorio
/mnt Este es un lugar común para montar otros sistemas de archivos o dispositivos. Por ejemplo una unidad de CDROM o un PEN DRIVE
/opt Este directorio contiene paquetes de software que normalmente no son parte de la instalación original
/proc Es un directorio virtual (ya que realmentereside en la memoria) donde el kernel y drivers escriben archivos para que otros programas los puedan leer. Por ejemplo, aquí es donde los drivers de zaptel escriben ciertos archivos en la ruta /proc/zaptel/
/root Este es el directorio del usuario root ya que este no tiene uno del tipo /home/root
/tmp Este directorio contiene archivos temporales
/usr Es uno de los más importantes directorios y contiene información para ser compartida como programas que pueden ser usados por los usuarios del sistema, la documentación de dichos programas y hasta librerías relacionadas, etc.
/var Contiene información en constante cambio como logs o colas de emails. Por ejemplo, aquí reside el log de asterisk en la ruta /var/log/asterisk/full

Permisos

editar

En Linux cada directorio o archivo tiene permisos de acceso y estos permisos pueden ser de básicamente 3 tipos:

  • lectura
  • escritura
  • ejecución

Cada archivo también tiene un dueño y un grupo al cual pertenece y para cada una de estas entidades se pueden establecer permisos diferentes

Por último, también es deseable establecer permisos para otros usuarios que eventualmente pueden querer tener acceso sobre este archivo.

Dicho todo lo anterior podemos establecer la siguiente matriz de permisos que sería válida para un determinado archivo del sistema:

Dueño Grupo Otros Usuarios
lectura x x x
escritura x
ejecución x x x

Existe sin embargo una notación más sencilla para expresar la matriz de arriba. Esta notación, compuesta de 10 caracteres, simplifica el despliegue de la información de permisos y permite mostrarlos en una sola línea lo cual es muy útil cuando se quieren ver permisos de muchos archivos. Por ejemplo, la matriz de permisos del ejemplo anterior se puede expresar de la siguiente manera:

    -rwxr-xr-x
    0123456789

Donde,

  • El carácter 0 representa el tipo de archivo. Si se llena con la letra “d” significa que se trata de un directorio.
  • Los caracteres 1, 2 y 3 representan los permisos de lectura, escritura y ejecución para el dueño del archivo.
  • Los caracteres 4, 5 y 6 representan los permisos de lectura, escritura y ejecución para el grupo al que pertenece el archivo.
  • Los caracteres 7, 8 y 9 representan los permisos de lectura, escritura y ejecución para otros usuarios.

Ahora veamos un ejemplo de un listado largo donde podremos apreciar diferentes permisos:

  $ ls -la
  drwxrwxr-x  4 edgar edgar      4096 2008-09-01 21:20 Codigo
  -rw-rw-r--  1 edgar edgar     53058 2008-08-04 01:31 comohemo.mid
  -rw-rw-r--  1 edgar edgar  22785270 2008-08-07 12:09 dlj173.pdf
  drwxrwxr-x  3 root  root       4096 2008-08-26 17:21 elastix
  drwxrwxr-x  2 test  prueba     4096 2008-09-11 13:03 flashingfop
  drwxrwxr-x  3 edgar edgar      4096 2008-08-04 22:18 fpbx
  -rw-rw-r--  1 edgar edgar    398439 2008-08-19 19:19 gforge_manual.pdf
  -rwxrw-r--  1 edgar edgar    102135 2008-09-07 18:53 index2.html
  -rw-rw-r--  1 user4 101        3535 2008-08-19 23:20 install-ceros
  drwxrwxr-x  3 edgar edgar      4096 2008-08-03 01:52 installers
  -rw-rw-r--  1 edgar edgar      6860 2008-08-19 23:12 ksraid.cfg
  drwxr-xr-x  4 edgar edgar      4096 2008-08-06 12:14 lw
  -rw-rw-r--  1 edgar edgar   1020152 2008-07-30 14:00 Magic Button.pdf
  drwxrwxr-x  3 edgar edgar      4096 2008-09-02 17:25 monitoring
  -rw-rw-r--  1 edgar edgar  14341913 2008-08-12 01:59 prbx1.zip
  -rw-rw-r--  1 edgar edgar   7195354 2008-08-03 01:51 rotron1.7.1.tar.bz2
  -rw-rw-r--  1 edgar edgar     25343 2008-08-13 00:25 roundcube.diff
  -rw-rw-r--  1 edgar edgar     12167 2008-08-01 23:03 src-php.tar.bz2
  drwxr-xr-x 18 edgar edgar      4096 2008-08-13 09:38 wanpipe-3.2.7
  -rw-rw-r--  1 edgar edgar  16106184 2008-08-29 17:40 wanpipe-3.2.7.1.tgz
  -rw-rw-r--  1 edgar edgar     20525 2008-09-08 17:14 xorcom_test.txt
  -rw-rw-r--  1 edgar edgar      9277 2008-09-08 02:10 Xorcom_logo.png

Representación numérica de permisos

editar

Aparentemente vamos a complicar las cosas un poco más aquí pero ya veremos más adelante la utilidad de poder representar la dichosa matriz de permisos de una forma más condensada llamada representación numérica u octal de permisos.

La cuestión es que los 3 caracteres que definen los permisos para cada una de las tres entidades involucradas (dueño, grupo y otros) pueden ser representados por un solo número de tal manera que todos los permisos de un archivo pueden ser representados por 3 de estos números. Por ejemplo, 755. Donde el primer dígito representa los permisos del dueño, el segundo dígito los permisos del grupo y el tercer dígito los permisos de otros usuarios.

Puede ser complicado entender al principio pero sin duda se trata de un formato más condensado. De eso sí no cabe duda verdad?. Y basta ver el siguiente ejemplo:

  -rwxr-xr-x    equivale a    755

Pero de dónde sale el famoso numerito?

Resulta que cada uno de los 3 caracteres que representan un permiso para una entidad dada puede ser reemplazado por 1 o 0 de tal manera que obtenemos un número binario, luego este número binario se traduce a su equivalente decimal (realmente deberíamos decir octal aquí). Veamos el ejemplo siguiente.

  -rwxr-xr-x

Transformado a binario tendríamos los siguientes tríos:

  111            101            101

y ahora en su equivalente decimal

  755

En fin, para los que no les gusta calcular binario les dejo la siguiente tablita.

Versión Texto Versión Binaria Versión Octal
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Ahora sí se estarán preguntando para qué nos sirve esta notación numérica?

Bueno, resulta que de esta manera es mucho más fácil manipular los permisos de los archivos mediante comandos y eso es precisamente lo que veremos a continuación.

Cambiando permisos y dueños de archivos

editar

Las tareas de cambio de permisos y dueños de archivos pueden ser realizadas fácilmente gracias a los comandos chmod y chown respectivamente.

chmod toma como parámetros los permisos en modo numérico y el nombre del archivo al que se desea realizar el cambio. Por ejemplo:

  $ ls -la archivo_prueba
  -rw-rw-r-- 1 edgar edgar 0 2008-09-19 04:21 archivo_prueba
  $ chmod 755 archivo_prueba
  $ ls -la archivo_prueba
  -rwxr-xr-x 1 edgar edgar 0 2008-09-19 04:22 archivo_prueba

El comando chmod también se puede usar recursivamente para cambiar los permisos de todos los archivos dentro de una carpeta. Esto se hace con la opción R. Por ejemplo: “chmod –R 755 nombre_carpeta/”

Para cambiar el dueño y grupo asociado con un archivo determinado podemos usar el comando chown. Por ejemplo para cambiar los permisos del archivo anterior al usuario y grupo root ejecutamos lo siguiente.

  # ls -la archivo_prueba
  -rwxr-xr-x 1 edgar edgar 0 2008-09-19 04:23 archivo_prueba
  # chown root.root archivo_prueba
  # ls -la archivo_prueba
  -rwxr-xr-x 1 root  root  0 2008-09-19 04:24 archivo_prueba

Al igual que el comando chmod, el comando chown también soporta la opción R.

RPMs y actualizaciones vía Yum

editar

Los paquetes de software que se incluyen en Elastix vienen en un formato llamado RPM. RPM es un formato heredado de Red Hat y su nombre significa Red Hat Package Manager por sus siglas en inglés. Esto quiere decir que los instaladores de muchos paquetes de software adicional pueden ser instalados en Elastix de manera sencilla.

Los RPMs también nos permitirán actualizar paquetes de software y se encargarán de resolver las dependencias necesarias para que dichos paquetes no causen problemas en el sistema. Esto se logra gracias a que el sistema RPM mantiene una base de datos interna de todos los paquetes instalados con sus respectivas dependencias y versiones. Además nos provee con un comando muy útil para manipular las instalaciones, des- instalaciones, actualizaciones y otras tareas importantes.

A continuación algunas opciones de uso del comando “rpm”:

Acción a Realizar Comando
Instalación de RPMs rpm -ivh nombre_del_paquete.rpm
Actualización de un RPM rpm -Uvh nombre_del_paquete.rpm
Eliminación de un RPM rpm -e nombre_del_paquete
Obtener información de un archivo RPM rpm –qpi nombre_del_paquete.rpm
Obtener un listado de todos los RPMs instalados en el sistema rpm -qa

Yum al rescate

editar

La instalación manual de RPMs mediante el comando rpm está bien para muchas de las tareas, pero hay ocasiones en las cuales instalar RPMs de esta manera es tedioso y complicado. Un ejemplo de esto es cuando instalamos paquetes RPMs complejos que tienen muchas dependencias y al momento de instalar dicho paquete resulta que nos damos cuenta que tenemos que instalar otro paquete necesario y tenemos que buscarlo en Internet para instalarlo.

Muchas veces un RPM tiene decenas o hasta cientos de dependencias lo que por supuesto nos llevaría horas solucionar manualmente.

Adicionalmente a este problema de dependencias existe otro y es el de la confiabilidad de los RPMs. Es decir, luego de horas y horas de instalar nuestros paquetes manualmente nos damos cuenta de que uno de ellos sobrescribió un archivo importante del sistema y corrompió nuestro Elastix. Vaya dolor de cabeza!

Aquí es cuando entra en escena nuestro héroe llamado Yum!

Yum es una utilidad que nos ayuda a instalar paquetes RPMs desde repositorios y lo hace de una manera muy amigable.

La mayoría de las distribuciones serias, y Elastix no es la excepción, mantienen repositorios de paquetes oficiales de software accesibles gratuitamente a través de Internet y hacen el mayor esfuerzo porque dichos paquetes no tengan problemas de dependencias entre sí. Además los paquetes de los repositorios oficiales son probados para evitar molestias en los usuarios. Es por esta razón que si se usa Elastix lo recomendable es que se instalen paquetes desde el repositorio oficial.

Bueno, ahora vamos al grano y mostremos algunos comandos Yum útiles:

Comando Descripción
yum update Actualizar TODO el sistema
yum update nombre_paquete Actualiza solo el paquete especificado y todas sus dependencias
yum install nombre_paquete Instala el paquete especificado y todas sus dependencias
  Nota: Cabe destacar que Elastix nos provee de una interfase Web amigable
  para actualizar paquetes y administrar repositorios. Por los tanto, los
  procedimientos de actualización manuales aquí descritos se dejarán para casos
  excepcionales. Se recomienda en lo posible utilizar la interfase Web.