En este artículo explico cómo manipular la salida del comando last
para determinar quiénes fueron los últimos usuarios logueados en un sistema GNU/Linux.
En GNU/Linux, cada vez que un usuario ingresa al sistema utilizando la herramienta login
, se guarda un registro de su acceso en un archivo de log (generalmente en el archivo /var/log/wtmp
). La herramienta login
es la que busca al usuario en el archivo /etc/passwd
y gestiona el proceso de autenticación y autorización. Es decir, determina si el usuario es quien dice ser (mediante una contraseña) y si tiene permiso para ingresar al sistema (tiene acceso a una terminal o sólo se utiliza para autenticar un servicio o es el usuario con el que se ejecuta un demonio).
Además de los accesos desde la terminal conectada directamente al sistema (TTY) algunos servicios como SSH, SCP y SFTP utilizan la herramienta login
para autenticar y autorizar usuarios. Inclusive es posible restringir el acceso a estos servicios sólo a aquellos usuarios que pertenezcan a un grupo específico.
La herramienta last
muestra un listado de los últimos usuarios que han ingresado al sistema. Esta busca en el archivo /var/log/wtmp
y por defecto lista todos los usuarios que han ingresado desde que se creó el archivo de log. lastb
es similar a last
excepto que busca en el archivo /var/log/btmp
, el cual registra los intentos de acceso fallidos.
En un servidor, la salida por defecto del comando last
puede ser muy extensa y suele truncar los nombres de host, por lo tanto es necesario manipularla utilizando los parámetros disponibles.
La salida de last
está ordenada con los acceso más recientes al comienzo. Para mostrar sólo algunos de los últimos accesos (en vez de todos los que se encuentran registrados desde la creación del archivo /var/log/wtmp
) se debe utilizar la opción -n
. Por ejemplo, para que muestre sólo los últimos 5 accesos, utilizar:
[root@pepeserver154 ~]# last -n 5 root pts/3 193.202.112.211 Tue Nov 26 16:24 still logged in root pts/5 pepews.linuxito. Wed Nov 20 08:47 - 11:10 (02:22) root pts/3 pepews.linuxito. Wed Nov 20 08:16 - 14:10 (05:53) root pts/3 pepews.linuxito. Thu Nov 14 12:58 - 14:10 (01:11) root pts/3 pepews.linuxito. Wed Nov 13 07:52 - 13:03 (05:10) wtmp begins Mon Aug 13 13:56:09 2012
También es posible omitir la letra n
y poner el número directamente:
[root@pepeserver154 ~]# last -5 root pts/3 193.202.112.211 Tue Nov 26 16:24 still logged in root pts/5 pepews.linuxito. Wed Nov 20 08:47 - 11:10 (02:22) root pts/3 pepews.linuxito. Wed Nov 20 08:16 - 14:10 (05:53) root pts/3 pepews.linuxito. Thu Nov 14 12:58 - 14:10 (01:11) root pts/3 pepews.linuxito. Wed Nov 13 07:52 - 13:03 (05:10) wtmp begins Mon Aug 13 13:56:09 2012
La primera columna muestra el nombre de usuario; la segunda la terminal asociada; la tercera el nombre de host desde donde ingresó; la cuarta la fecha de ingreso; y la quinta la fecha de salida. Por último muestra el tiempo total en el sistema, entre paréntesis. El problema más común es que las columnas poseen un ancho fijo, por lo que el nombre de host (un dato que suele ser de interés) queda truncado. Para corregir esto es posible mostrar el nombre de host en la última columna, utilizando la opción -a
:
[root@pepeserver154 ~]# last -an 5 root pts/3 Tue Nov 26 16:24 still logged in 193.202.112.211 root pts/5 Wed Nov 20 08:47 - 11:10 (02:22) pepews.linuxito.com root pts/3 Wed Nov 20 08:16 - 14:10 (05:53) pepews.linuxito.com root pts/3 Thu Nov 14 12:58 - 14:10 (01:11) pepews.linuxito.com root pts/3 Wed Nov 13 07:52 - 13:03 (05:10) pepews.linuxito.com wtmp begins Mon Aug 13 13:56:09 2012
Como los sistemas GNU/Linux guardan tanto el nombre de host como IP, es posible mostrar las direcciones IP, en lugar de hostnames, utilizando la opción -i
:
[root@pepeserver154 ~]# last -ain 5 root pts/3 Tue Nov 26 16:24 still logged in 193.202.112.211 root pts/5 Wed Nov 20 08:47 - 11:10 (02:22) 167.34.5.122 root pts/3 Wed Nov 20 08:16 - 14:10 (05:53) 167.34.5.122 root pts/3 Thu Nov 14 12:58 - 14:10 (01:11) 167.34.5.122 root pts/3 Wed Nov 13 07:52 - 13:03 (05:10) 167.34.5.122 wtmp begins Mon Aug 13 13:56:09 2012
Si se desean mostrar las fechas en formato completo, utilizar -F
:
[root@pepeserver154 ~]# last -aiFn 5 root pts/3 Tue Nov 26 16:24:14 2013 still logged in 193.202.112.211 root pts/5 Wed Nov 20 08:47:44 2013 - Wed Nov 20 11:10:42 2013 (02:22) 167.34.5.122 root pts/3 Wed Nov 20 08:16:40 2013 - Wed Nov 20 14:10:02 2013 (05:53) 167.34.5.122 root pts/3 Thu Nov 14 12:58:45 2013 - Thu Nov 14 14:10:04 2013 (01:11) 167.34.5.122 root pts/3 Wed Nov 13 07:52:56 2013 - Wed Nov 13 13:03:10 2013 (05:10) 167.34.5.122 wtmp begins Mon Aug 13 13:56:09 2012
Por último un ejemplo con la herramienta lastb
, la cual muestra los intentos de acceso fallidos (algo de suma importancia en lo que respecta a la seguridad de nuestro servidor):
[root@pepeserver154 ~]# lastb -ia root ssh:notty Tue Nov 26 16:24 - 16:24 (00:00) 193.202.112.211 ssh:notty Fri Nov 22 12:19 - 12:19 (00:00) 107.22.83.149 ssh:notty Fri Nov 22 12:19 - 12:19 (00:00) 107.22.83.149 btmp begins Fri Nov 22 12:19:52 2013
Espero que les haya servido!