Veo dos buenas formas de obtener este tipo de información. Una es aumentar el registro desde sshd, y la otra haciendo un monitoreo más profundo del repositorio git en el disco. Dado que ninguno de los dos le brinda la información que desea individualmente, es posible que desee hacer ambas cosas y correlacionar los datos de registro utilizando un motor de análisis de registro externo o bajo demanda utilizando ojos humanos y marcas de tiempo.
Modificaciones sshd
De manera predeterminada, como sin duda ha visto, puede ver cuándo un usuario inició sesión y desde dónde, utilizando los registros de autenticación ssh. Lo que quiere hacer es cambiar el nivel en el que está cerrando sesión en sshd. Edite su /etc/ssh/sshd_config
y encuentre la línea que se parece a
#LogLevel INFO
y cambiar eso a
LogLevel VERBOSE
luego reinicie el servicio sshd. Esto aumenta el nivel de registro de sshd en 1 paso, lo que proporciona mucha más información. Echa un vistazo a este fragmento de registro de mi acceso remoto después de hacer ese cambio.
Nov 2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov 2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov 2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov 2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov 2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov 2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott
Las cosas importantes a tener en cuenta aquí son dobles
- Vemos la huella digital de la clave pública utilizada para autenticarme
- Vemos la marca de tiempo de mi cierre de sesión
Al usar el nivel de registro predeterminado (INFO), sshd no registra ninguno de esos elementos. Obtener la huella digital de una clave es un paso adicional. Debe procesar el authorized_keys
archivo apropiado con ssh-keygen como tal.
[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)
Entonces ahora conoce la siguiente información:
- Nombre de usuario que inició sesión
- Hora en que el usuario inició sesión
- Qué clave pública se usó para la autenticación
- Hora en que el usuario cerró sesión
Ahora que tenemos una manera de atribuir la acción del usuario en un momento específico, suponiendo que ambos usuarios no hayan iniciado sesión al mismo tiempo, podemos comenzar a mirar los cambios realizados en el repositorio.
Monitoreo de directorios con Auditd
Como dijo sysadmin1138, este podría ser un excelente caso de uso para el subsistema auditado. Si no está utilizando una distribución basada en RedHat, probablemente haya un análogo, pero tendrá que encontrarlo. La configuración para auditado es bastante intensa y tiene una cantidad redonculosa de opciones de configuración. Para tener una idea de algunas de las opciones, consulte esta pregunta en nuestro sitio asociado para profesionales de seguridad de la información .
Como mínimo, recomendaría configurar lo que se llama un "reloj" en el directorio del disco que contiene su repositorio git en cuestión. Lo que esto hace es indicar al módulo del núcleo que informe sobre los intentos de realizar llamadas de acceso a archivos, como open()
o creat()
, en los identificadores de archivos que apuntan a los archivos o directorios que enumeramos.
Aquí hay una configuración de muestra que haría esto, y solo esto. Por lo tanto, tenga cuidado de leer y comprender su existencia /etc/audit/audit.rules
para integrar los cambios adecuadamente.
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-w /path/to/git/repos-p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2