Usando event_handler en Plesk

Entre las virtudes que he de rescatar de Plesk con respecto a los otros Paneles de Control es que la mayoria, y si no es que todas, las tareas de administración se pueden realizar tanto desde la interfaz Web o desde la linea de comandos.

Entre los comandos no muy documentados esta el "event_handler" que nos permite, desde linea de comando, ejecutar nuestros script después de algunos de los eventos predefinidos en Plesk se llevan a cabo.

De esta forma es que podemos crear directorios especiales después de crear una cuenta de correo, cambiar permisos de directorios después de crear un dominio o hasta generar un aviso que se llevo a cabo una tarea de administración.

Para poder listar las tareas ya definidas:
/usr/local/psa/bin/event_handler -l
/usr/local/psa/bin/event_handler --list

y nos vamos a encontrar con una salida como la siguiente:
Id: 2
Name: Service stopped
Priority: 0
User: root
Command: /usr/local/psa/admin/bin/modules/watchdog/wd --unmonit-service=<new_service> --plesk-name
Este es un ejemplo de una tarea que se debe realizar cada vez que se detiene un servicio, y para ser precisos es del modulo Watchdog para que este deje de monitorear un servicio si el mismo se ha detenido.

El evento "Service stopped" es uno de los mas de 100 eventos que ya vienen predefinidos por Plesk, y cada uno de ellos tiene un código único y para poder listarlos usaremos el comando:
/usr/local/psa/bin/event_handler -le
/usr/local/psa/bin/event_handler --list-events

Creando una tarea

Para crear tarea usaremos la opción "-c" o "--create" pasándole algunos argumentos mas, como por ejemplo:

/usr/local/psa/bin/event_handler -c -priority 10 -user root -command "/usr/local/propios/procmail_spam.sh <new_mailname>" -event 52
Con esto estaremos creando una comando nuevo (opción "-c" para crear y "-command" para especificar que comando a ejecutar) que se debe ejecutar cada vez que se cree un nuevo usuario ("-event 52" es "Mail account created" ).

Con este comando también estamos especificando con que usuario se debe ejecutar ese comando, que en nuestro caso es el usuario "root" ( "-user root" ). Para poder ver el listado usuarios que pueden realizar alguna de las tareas programadas:
/usr/local/psa/bin/event_handler -lu
/usr/local/psa/bin/event_handler --list-users
Si vamos a ejecutar varias tareas o comandos en base a un evento, es donde entra en juego las prioridad ( en este ejemplo "-priority 10" ) que es un valor entero que va desde 0 a 100, siendo los comandos con prioridad mas baja los que se van a ejecutar primero.

Cada uno de los eventos maneja variables propias relacionadas con el evento que se esta llevando a cabo, estas variables se puede pasar a los comandos que vamos a ejecutar. En nuestro ejemplo el evento es la creación de un nuevo buzón de correo y la única variable que tiene este evento es "<new_mailname>".

Sobre las variables de cada uno de los eventos, no he encontrado mucha información oficial, mas que un viejo manual en linea de Plesk 8.3 aunque también sirven para las versiones de Plesk 8.6 y 9.2

Modificando una tarea ya existente

Para modificar o eliminar una tarea existente usaremos las opciones "-d" o "-u" para eliminar o borrar una tarea e indicando el identificador de la misma. De esta forma para eliminar una tarea podríamos usar los comandos:

/usr/local/psa/bin/event_handler -d 2
/usr/local/psa/bin/event_handler --delete 2
O para cambiarle la prioridad usaremos:
/usr/local/psa/bin/event_handler --u 2 -priority 10
/usr/local/psa/bin/event_handler --update 2 -priority 10

Como recuperar la contraseña de un Linux o un Windows

Hace ya varios años atrás, en un charla sobre seguridad, el orador empezo con una frase que hoy dia la sigo repitiendo de vez en cuando:
"La seguridad no existe, es solo una sensación"

Esa charla y esa frase vino a mi memoria hace unos días atrás cuando me encontré con un articulo sobre "Kon Boot" que es un BootCD que nos permite ingresar tanto a Linux como a Windows sin saber ninguna de las contraseñas de usuarios.

Este arrancador, en su versión original para Ubuntu, permite modificar parámetros del kernel de Linux al iniciar, en particular donde se define el identificador del usuario (uid) que corre el proceso. Kon-Boot utiliza ese procedimiento para poder saltar el proceso de autenticación y poder ingresar al sistema con un usuario ficticio pero con privilegios de root.

Por lo que se puede leer en el sitio del proyecto, esta aplicación originalmente se desarrollo para Ubuntu, y luego se fue adaptando para las otras distribuciones. Y aunque no funciona en todas las distribuciones , debido a los distintos parches y configuraciones que cada una aporta a su kernel, ya funciona en varias de ellas, e incluso la nueva versión del Kon-Boot ya soporta varias versiones de Microsoft Windows.

Entre las distribuciones de Linux que esta probadas y funcionan se encuetran:
  • Gentoo 2.6.24-gentoo-r5
  • Ubuntu 2.6.24.3-debug
  • Debian 2.6.18-6-6861
  • Fedora 2.6.25.9-76.fc9.i6862
y entre las de MS Windows
  • Windows XP
  • Windows XP SP1
  • Windows XP SP2
  • Windows XP SP3
  • Windows Vista Business SP0
  • Windows Vista Ultimate SP1
  • Windows Vista Ultimate SP0
  • Windows Server 2003 Enterprise
  • Windows Server 2008 Standard SP2 (v.275)
  • Windows 7

Realizando conexions a puertos SSL/TLS

No es muy complicado probar o verificar muchos de los servicios de Internet a mano con un simple Telnet al puerto del servicio. Con esto no solo podemos verificar que el puerto esta abierto y escuchando, sino que en muchos casos es posible simular o realizar a mano el dialogo con servidor.

Pero en el caso que el servicio a probar utilice SSL o TLS, ya no podemos usar Telnet para poder dialogar con el servidor. Pero para ello podemos usar el comando "openssl" en modo cliente. En particular para simular una simple conexion a un puerto que use SSL o TLS podemos usar :
openssl s_client -connect servidor:puerto
Esto iniciara el dialogo SSL con el servidor y nos mostrara el certificado e informacion del mismo, asi tambien como, si no es un certificado auto-firmado, intentara verificarlo. Una vez finalizado el dialogo y la verificacion del certificado, nos mostrara el resumen de la coneccion como el siguiente:
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: E9F3218C651A1F59CFA21D997AE63CF80810F70CD9D62F456F98B15E85F71C4D
Session-ID-ctx:
Master-Key: ACCA4FE23EEA8C8FE414C3FAB570C1D51115B685CD6662FB56961604272F0C347A57040FA78DDBF42F35E3B205D4A103
Key-Arg : None
Start Time: 1240453754
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)

Luego de esto, ya tenemos la conexión establecida y podemos ejecutar los comandos a mano para probar el servicio en particular como lo haríamos usando Telnet