2009-01-13 6 views
6

Estoy tratando de escribir un script que informe al usuario cuando alguien ha iniciado sesión en la máquina a través de ssh.SSH "Monitor de inicio de sesión" para Linux

Mi idea actual es analizar la salida de "w" usando grep en intervalos.

Pero eso no es elegante ni eficiente. ¿Alguien ha tenido una mejor idea de cómo implementar dicho programa?

¡Cualquier ayuda sería realmente apreciada!

Respuesta

9

En Ubuntu (y supongo que todas las otras distribuciones Debian, si no todos Linuces), registros del archivo /var/log/auth.log exitosas (y fallidos) intentos de conexión:

sshd[XXX]: pam_unix(sshd:session): session opened for user XXX 

Usted podría configurar un monitor muy simple de utilizar este comando (nota que usted tiene que ser root para ver el registro de autenticación):

sudo tail -F /var/log/auth.log | grep sshd 
+0

O usted podría utilizar "-F cola". –

+0

Excelente punto: no sabía acerca de esa opción – kdgregory

+1

Conozco a los administradores de Unix que hacen casi lo mismo, para detectar inicios de sesión como root en su boxen. Si alguien inicia sesión como root, se envía un correo electrónico a su busca. Muy útil, pero a veces divertido, ya que cada vez que entraban en un mantenimiento serio y abrían un shell raíz, obtenían una página ... –

4

Configure un canalización con nombre, configure un analizador de archivos de registro para escucharlo y envíele los mensajes ssh. El analizador de archivos de registro puede hacer lo que quiera o indicarle a un daemon que lo haga.

Redirigir el archivo de registro se realiza en un archivo de configuración en/etc/cuyo nombre se me escapa en este momento. /etc/syslog.conf, creo.

13

Paul Tomblin tiene la sugerencia de la derecha.

configurar el registro en su sshd_config para que apunte a un syslog que puede iniciar sesión por separado:

=> ver man 3 syslog para más instalaciones. Elija uno como p. Ej.

# Logging 
SyslogFacility local5 
LogLevel INFO 

luego configurar su syslog.conf así:

local5.info |/var/run/mysshwatcher.pipe 

Añadir la secuencia de comandos que va a escribir en/etc/inittab para que siga funcionando:

sw0:2345:respawn:/usr/local/bin/mysshwatcher.sh 

luego escriba su secuencia de comandos:

#!/bin/sh 

P=/var/run/mysshwatcher.pipe 
test -p $P || mkfifo $P 

while read x <$P; do 
    # ... whatever, e.g.: 
    echo "ssh info: $x" | wall 
done; 

Fina lly, reinicie su syslogd y vuelva a cargar su inittab (init q) y debería funcionar. Si se utilizan otras variantes de estos servicios, debe configurar las cosas en consecuencia (por ejemplo, newsyslogd => /etc/newsyslog.conf; Ubuntu: /etc/event.d isntead of inittab)

Esto es muy rudimentario y deficiente, pero debería ser suficiente para comenzar ...

más información: man sshd_config para obtener más opciones de registro/verbosidad.

+0

Sí, esto es casi exactamente lo que hice en mi último trabajo, excepto que usé Perl para ver el tubo. Hubiera publicado más detalles, excepto que mi código fuente está en casa. –

5

Si no le importa cómo iniciaron sesión (telnet/ssh), la 'última' utilidad de línea de comandos de Unix le muestra los últimos inicios de sesión en la máquina. Los usuarios remotos se mostrará la dirección IP

[root @ EX02 www] # últimos pts foo/1 81.31.xy Sun Jan 18 07:25 todavía conectado
pts foo/0 81.31.xy Dom Ene 18 01: 51 aún conectado en
foo pts/0 81.31.x.y Sab Ene 17 03:51-07:52 (04:00)
barra pts/5 199.146.xy Vie Ene 16 08:57-13:29 (04:32

2

he hecho un programa (que i call autenticación monitor) que resuelve la función descrita en la pregunta.

Si quieres, eres más que bienvenido a descargarlo para investigar cómo puedo solucionar este problema (utilizando archivos de registro).

usted puede encontrar Authentication Monitor libremente disponible aquí: http://bwyan.dk/?p=1744

+1

Tenga en cuenta que los enlaces desnudos a su propio sitio web/producto no son alentados aquí por dos razones; En primer lugar, una respuesta debe publicarse como una respuesta independiente, no como un simple enlace a un sitio externo. En segundo lugar, la autopromoción tiende a ser mal vista aquí, y a menudo se señala como correo no deseado (especialmente si no hay información que indique que está enlazando a su propio sitio/producto). –

+2

Andrew, cortó al chico un descanso, es un proyecto de código abierto. –

0

Tuvimos el mismo problema, entonces escribimos nuestro propio script. Se puede descargar desde github.

Espero que ayude :)

aplausos! Ivan

+1

Este es un hermoso script de bash. – bobef

+0

@bobef Thx, hiciste mi día :) – Sabo

Cuestiones relacionadas