Comúnmente sudo es utilizado para switchearse como root, sin embargo, si queremos analizar las acciones realizadas por algún usuario como root, no podríamos ya que sudo solo nos registraría el acceso al comando su. Para poder registrar las acciones de algún usuario, podemos hacer uso de una herramienta que complementa a sudo, sudosh.

sudosh es básicamente un VCR que permite grabar y registrar las sesiones de shell y, también tiene la capacidad de reproducir las sesiones como fueron ejecutadas originalmente. Registra toda la entrada-salida (input/output), entradas de teclado, así como información del tiempo de ejecución para poder reproducirla en su formato original. Fue diseñado específicamente para ser utilizado conjuntamente con sudo o por sí mismo como un login shell, esto es, puede ser utilizado cmo un filtro o como el shell por default de un usuario. Cada comando que el usuario mecanografía dentro del shell, incluso del shell de root, se registra, así como su salida.No importa el shell utilizado, todas las líneas de comando se registran al syslog (incluyendo entradas de teclado en vi).

En este caso utilizaremos una versión mejorada, sudosh2, que mejora algunos detalles que se encontraron en el desarrollo de sudosh.

Para iniciar, lo compilamos, e instalamos, mediante:

[root@ragnarok ~]# ./configure && make && make install

A continuación, creamos el directorio donde vamos a almacenar los registros y le asignamos permisos:

[root@ragnarok ~]# mkdir -p /var/log/sudosh

[root@ragnarok ~]# chmod 0733 /var/log/sudosh

Para el acceso a sudosh, podemos agregar un alias en /etc/sudoers:

## Cmnd alias specification

Cmnd_Alias SUDOSH=/usr/local/bin/sudosh

Para que sudosh pueda ser utilizado como shell, lo debemos incluir en el archivo de shells autorizados para su uso:

[root@ragnarok ~]# echo “/usr/local/bin/sudosh” >> /etc/shells

Si lo configuramos como shell, lo debemos configurar a los usuarios a monitorear:

[root@ragnarok ~]# grep opera /etc/passwd

opera:x:600:600:Operador del sistema:/home/opera:/usr/local/bin/sudosh

[root@ragnarok ~]# grep jdevel /etc/passwd

jdevel:x:700:700:Usuario desarrollador java:/home/jdevel:/usr/local/bin/sudosh

[root@ragnarok ~]# grep beca01 /etc/passwd

beca01:x:800:800:Usuario becario:/home/beca01:/usr/local/bin/sudosh

Para que sudosh funcione como algún shell determinado, podemos configurarlo en el archivo /etc/sudosh.conf

[root@ragnarok ~]# vim /etc/sudosh.conf

# Sudosh Configuration File

logdir = /var/log/sudosh

default shell = /bin/bash

delimiter = –

syslog.priority = LOG_INFO

syslog.facility = LOG_LOCAL2

clearenvironment = yes

# Allow Sudosh to execute -c arguments?  If so, what?

-c arg allow = scp

Desde este archivo, también podemos indicarle que comandos puede ejecutar.

Una vez instalado, podemos listar las sesiones almacenadas con el comando sudosh-replay:

[root@ragnarok ~]# sudosh-replay

Date                Duration From         To           ID
====                ======== ====         ==           ==
09/14/2009 12:04:49 3m10s    sistema      sistema      sistema-sistema-1250615089-FVr1k26cIUKdUrtR
09/14/2009 13:05:45 5m43s    sistema      root      sistema-root-1250618745-FBjzLbIh7AuA4BqM
09/15/2009 14:12:10 15m10s       root         sistema      root-sistema-1250622730-6UFb6w4UMvJM4nLx
09/15/2009 11:55:07 5h       sistema      sistema      sistema-sistema-1250700907-dza0xWuenmNdSMjj

Usage: sudosh-replay ID [MULTIPLIER] [MAXWAIT]
See ‘sudosh-replay -h’ for more help.
Example: sudosh-replay sistema-sistema-1250615089-FVr1k26cIUKdUrtR 1 2
[root@ragnarok ~]#

Para ver alguna sesión ejecutamos el comando sudosh-replay más el ID de la sesión, por ejemplo:

[root@ragnarok ~]# sudosh-replay sistema-sistema-1250615089-FVr1k26cIUKdUrtR

Con esta herramienta, tendríamos un mejor control de lo que sucede en nuestro sistema.