tcpdump -> Monitoriza el tráfico de la red

tcpdump es una aplicación de Linux que ayuda a capturar los paquetes que se transmiten en una red.

tcpdump -i eth0 -w /home/usuario/captura

Con ese comando arrancamos el programa escuchando en la interfaz de red eth0 y guardando el fichero de log en la ruta /home/usuario/captura.

Los parámetros más útiles son los siguientes:

  • -A: Imprime cada paquete en código ASCII.
  • -D: Muestra las interfaces de red disponibles.
  • -X: Imprime cada paquete en hexadecimal y en código ASCII.
  • -s 65535: Captura 65535 bytes de datos de la trama. (Full Snap Length)

Puedes escontrar más información en la wikipedia.

Ejemplos:

tcpdump -nlX -s 1500 -i eth0 port 389

Luego podrías utilizar un programa en modo gráfico, como Wireshark, y procesar los ficheros de log creados con tcpdump, de modo que resulte más legibles.

Calcular tiempo de ejecución de un comando en Bash Shell

El otro día estaba interesado en calcular el tiempo que tardaba en ejecutarse un comando, y esta es la forma que encontré de hacerlo:

#!/bin/bash
inicio_ns=`date +%s%N`
inicio=`date +%s`
sleep 5 # el comando
fin_ns=`date +%s%N`
fin=`date +%s`
let total_ns=$fin_ns-$inicio_ns
let total=$fin-$inicio
echo "ha tardado: -$total_ns- nanosegudos, -$total- segundos"

Como se puede comprobar, incluso se llega a tener una precisión de nanosegundos.

Fuente

Ejecución de aplicaciones remotas a través de SSH

Puede interesarnos ejecutar aplicaciones remotas en otras máquinas a través de SSH, y si ya lo planteamos como una tarea automática, más.

Aquí dejo un ejemplo de cómo se podría hace con SSH.

$ ssh -i /home/kardinal/.ssh/id_rsa_mon -l kardinal plan01.wnet "/aplicaciones/launcher/script.sh"

donde…

/home/kardinal/.ssh/id_rsa_mon es un fichero que contiene la clave pública del usuario.
kardinal es el usuario.
plan01.wnet es el host.
/aplicaciones/launcher/script.sh es la ruta de la aplicación en el host remoto.

Listar SÓLO directorios en Bash

Hoy haciendo un Shell Script me ha surgido la necesidad de hacer un listado de los directorios (y no ficheros) que hay en una determinada ruta.

Al parecer el comando ls no dispone de esta utilidad… cosa que me parece un poco extraña, pero he encontrado un modo de hacerlo con find.

$ find . -maxdepth 1 -type d

Incluso, para más comodidad te puedes hacer un alias:

$ alias lsdirs='find . -maxdepth 1 -type d'

Instalar Java (Sun) en Ubuntu

Hay varias formas para poder instalar una máquina virtual de Java en (K)Ubuntu, aquí voy a explicar cómo hacerlo descargando los ficheros binarios (.bin) e instalarlos usando la consola.

Yo he usado un procedimiento que resumo aquí:

Pasos a seguir:

  1. Nos descargamos los ficheros .bin de la web de Java de Sun. En este caso yo he usado la versión JRE (Java Runtime Environment) de Java, puede que necesites la versión JDE (Java Development Environment) si lo que vas a hacer es desarrollar aplicaciones en Java, ya que trae más cosas, como el compilador…etc etc.
  2. Nos vamos al directorio donde hemos descargado el fichero (Será un fichero del estilo «jre-6-linux-i586.bin«)
  3. $ cd <directorio>

  4. Le damos permisos de ejecución al fichero.
  5. $ chmod +x jre-6-linux-i586.bin

  6. Lo instalamos
  7. $ sudo ./jre-6-linux-i586.bin

  8. Seguimos las instrucciones que van apareciendo en pantalla, que son 2 o 3.
  9. Movemos la carpeta creada después de la instalación (llamada jre1.6.0) a una más apropiada:
  10. $ sudo mv jre1.6.0 /usr/lib/jvm/

  11. Seteamos el nuevo Java como una de las alternativas de java:
  12. $ sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jre1.6.0/bin/java" 1

  13. Ahora seteamos la nueva alternativa como la real de Java:
  14. $ sudo update-alternatives --set java /usr/lib/jvm/jre1.6.0/bin/java

  15. Para comprobar si tenemos correctamente instalada la versión de Java…
  16. $ java -version

Nos debería de aparecer algo así:

java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode)

Instalar la versión completa de Vim en Ubuntu

Vim (acrónimo del inglés Vi IMproved, Vi Mejorado) es un potente y avanzado editor de texto que posee su propia línea de comandos, sucesor del antiguo Vi.

La versión del editor Vim instalada por defecto en Ubuntu no incluye todas las funcionalidades de la versión completa, para acceder a ellas tan sólo hace falta instalar el paquete vim-full de los repositorios oficiales de Ubuntu.

$ sudo apt-get install vim-full

Actualización (2012/11/11):

$ sudo apt-get install vim

Con esto ya tendríamos acceso a la versión completa de este fantástico editor.

Personalizar el mensaje de bienvenida SSH

A la hora de logearnos en un servidor SSH, éste nos muestra un mensaje, llamado banner de bienvenida, que suele mostrarse antes de pedir la contraseña.

Una vez nos hayamos logeado correctamente, el servidor muestra otro mensaje, que también se puede configurar.

Configuración del banner de bienvenida:

etc-issue.net

$ sudo vi /etc/issue.net

En ese fichero editamos el mensaje, y lo guardamos. A continuación tenemos que editar el siguiente fichero de configuración:

$ sudo vi /etc/ssh/sshd_config

En éste, tenemos que buscar la línea «Banner /etc/issue.net«, y descomentarla, o crearla si no existe.

Configuración del mensaje posterior al logeo satisfactorio:

var-run-motd

Simplemente tenemos que editar el siguiente fichero:

$ sudo vi /var/run/motd

En el que escribiremos el mensaje que queremos que aparezca…

Ahora si queremos que los cambios hechos tengan efecto de inmediato, reiniciamos el servidor SSH.

$ sudo /etc/init.d/ssh restart

Aunque he comprobado que este paso no es necesario.

Activar la cuenta root en (K)Ubuntu

En principio (K)Ubuntu trae por defecto desactivada la cuenta de root, por motivos de seguridad. Además el sistema es completamente funcional ya que para realizar tareas de súperusuario se utiliza «$ sudo comando» y te pide la contraseña de root definida en la instalación.

por ejemplo:

$ sudo apt-get install update

En cualquier caso, para activar la cuenta root (No recomendable) en (K)Ubuntu se hace de la siguiente manera:

$ sudo -u root passwd

ó

$ sudo passwd

A continuación te pedirá el pass del usuario que has creado anteriormente, y después de eso te pedirá el nuevo pass para el root.

Con esto ya estamos en condiciones de hacer «su –» para entrar a nuestra cuenta de root.

Existe además otra forma para ejecutar comandos como root, o mejor dicho, para cambiar al usuario root. Se trata de usar una combinación entre el comando sudo y el comando su. Si los usamos conjuntamente podremos pasar a usuario root sin tener que usar, y ni siquiera conocer, la password de root.

Se usa de este modo:

$ sudo su -

La opción ‘-‘ nos permite adquirir las variables de entorno del usuario root (a veces puede ser importante).

Como curiosidad administrativa, puedes ver un registro de las actividades que se realizan con el comando sudo en /var/log/auth.log, lo cual puede ayudar a administrar tu sistema eficientemente.

Una vez terminadas las tareas que necesitábamos realizar, es conveniente volver a desactivar el super usuario con el flag -l (–lock):

Finalmente, para desactivar (Recomendable) la cuenta de root (súper usuario) con el flag «-l (–lock)» se debe ejecutar lo siguiente:

$ sudo passwd -l root

Conversión de Fechas en Unix (Timestamps – Fecha Normal)

A veces es útil poder convertir una fecha dada en formato timestamp de Unix, a un formato más legible. Para ello podemos usar el comando date con la siguiente orden:

$ date --utc --date "1970-01-01 X sec" "+%c"

donde X son los segundos que se quieren convertir a un formato legible.

Actualización

Como indica Obe en un comentario, también se puede extraer el timestamp, a partir de una fecha:

$ date +%s -d"1970-01-01 01:00"

Gracias por vuestros comentarios.