Por una petición de una compañera sysadmin, fue necesario desarrollar un script para monitorear el acceso de usuarios a máquinas linux a través de cualquier medio (Consola, TTY, Sesión gráfica, etc.). El correo es enviado a través de una conexión por telnet al servidor de correo, existen otras formas de realizarlo a través de la librería smtplib de python, con perl o con la función mail de sendmail, depende de lo que se tenga, este es para un caso básico
1. Creación del script
[code]
#!/bin/bash
ASUNTO=»Acceso de usuario:»
FECHA=$(date)
IP=$(who | cut -d»(» -f2 | cut -d»)» -f1)
SERVIDOR=ip o dominio del servidor de correo
PUERTO=puerto de conexión SMTP o SMTPS con el servidor de correo
REMITENTE=correo existente de quien envia
DESTINATARIO=correo existente de quien recibirá
telnet $SERVIDOR $PUERTO <<_EOF
HELO $SERVIDOR
MAIL FROM:<$REMITENTE>
RCPT TO:<$DESTINATARIO>
DATA
From: <$REMITENTE>
To: <$DESTINATARIO>
Subject: $ASUNTO – $FECHA
Se ha identificado un acceso por parte del usuario __indique-aqui-el-usuario__
Acceso desde $IP
.
QUIT
_EOF
[/code]
NOTA: En caso de necesitar la autenticación del usuario es necesario revisar si la autenticación es AUTH PLAIN, AUTH LOGIN, recordando que se debe pasar el correo y el password bajo codificación BASE64.
2. Implantar el script
Para finalizar, es necesario realizar la implantación del script en el directorio del usuario. En el caso de que el usuario emplee por terminal /bin/bash, se debe escribir en el documento .bash_profile el siguiente comando:
sh /ruta_script/nombre_script.sh
No olvidar previamente haber asignado permisos de ejecución y lectura del script.
Nota final: Recordar que este script depende de la seguridad del servidor de correo. Obviamente la solución con python smtplib es mejor pero es una opción válida.
Espero les sea de ayuda
Dos observaciones/sugerencias:
1. Porqué no usar el comando mail para enviar el correo ?
2. Podría volver el script más genérico para que se pueda ejecutar para cualquier usuario que ingrese. Puede obtener el usuario que ha ingresado con la variable de entorno $USER o $USERNAME (no recuerdo cuál de las dos es), y para que el script se ejecute para todos los usuarios ponga esa linea en /etc/profile (a menos que la idea sea sólo monitorear a algunos usuarios en particular).
En este caso era para un sólo usuario en un esquema muy básico, pero si pueden hacerse varias modificaciones por ejemplo para sacar más info.
Con mail sale mucho más fácil, mucho más seguro con smtplib o perl. Y claro, en el profile aplicaría para todos, mucho más útil.