Tengo un servidor git corriendo sobre ssh y cada usuario tiene una cuenta unix en el sistema.
Dado que dos usuarios tienen acceso a un repositorio, ¿cómo puedo estar seguro de qué usuario realizó cada confirmación, ya que el nombre de usuario y el correo electrónico de confirmación son enviados y controlados por el cliente git?
Me preocupa que un usuario pueda intentar hacerse pasar por otro, incluso si tienen los mismos derechos de autorización.
Respuestas:
Si le preocupa tanto, hay un par de formas de abordar el problema.
fuente
.git/hooks/update.sample
inspiración. Por favor, notifíqueme si hace una pregunta sobre esto en SO, también sería interesante para mí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 ay cambiar eso a
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.
Las cosas importantes a tener en cuenta aquí son dobles
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.Entonces ahora conoce la siguiente informació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()
ocreat()
, 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.fuente
El único enfoque técnico que puede tomar es confiar en la identidad de la conexión ssh. Luego, podría exigir que cada usuario solo envíe confirmaciones que realizó al validar el confirmador de cada nueva confirmación enviada.
Para que esto sea confiable, es casi seguro que no desea dar a sus usuarios acceso ilimitado a la caja donde reside el repositorio; querrá garantizar el uso de algo como, de lo
git-shell
contrario, las restricciones se solucionan fácilmente.Sin embargo, los usuarios aún podrían hacerse pasar por autores. También podría restringir esto, pero esto perdería los flujos de trabajo comunes, como la selección de cerezas y el rebase y quizás incluso la ramificación (dependiendo de su implementación de enlace), por lo que es posible que no desee hacer esto.
En algún momento, hasta cierto punto, debe confiar en sus desarrolladores.
fuente
Muchos demonios ssh hacen una entrada
/var/log/audit.log
o algo similar cuando se recibe una conexión ssh. Hacer referencias cruzadas de este registro con el registro de confirmación debería darle una idea de qué usuario ssh se utilizó para emitir una confirmación. Este es un paso de auditoría, que se utilizará después del hecho para la verificación.En realidad, imponer al usuario ssh correcto al usuario git apropiado es una de las otras respuestas aquí.
fuente
Si todos los usuarios tienen cuentas de shell con acceso de escritura al repositorio, no podrá configurar un registro de auditoría confiable: aún podrían modificar el repositorio sin escribir en el registro, y podrían escribir lo que quieran en el registro.
Para poder confiar en el registro de auditoría, debe evitar el acceso directo de escritura a nivel de archivo al repositorio, en lugar de usar algo como gitolite (que se ejecuta en su propia cuenta) para mediar el acceso al repositorio.
fuente