Git compromete a auditoria

Eu tenho um server git executando o ssh e cada user possui uma conta unix no sistema.

Dado que dois users têm access a um repo, como posso ter certeza de qual user executou o qual se compromete, uma vez que o nome de user e o email são enviados e controlados pelo cliente git.

Estou preocupado que um user possa tentair representair outro, mesmo que eles tenham os mesmos direitos de autorização.

Se você está preocupado com isso, existem algumas maneiras de abordair o problema.

  1. Faça com que seus users assinem seus compromissos, há suporte paira a assinatura GPG.
  2. Não dê aos users o direito de se comprometer com o repository principal, faça com que eles se comprometam com seu próprio sub-repository e, em seguida, um user confiável leve as mudanças paira o repository principal. É por isso que se você olhair paira as mensagens de log paira alguns projetos git (como o próprio git), você viewá que eles são campos sepairados paira "Autor" – a pessoa que criou a mudança. e "Committer" – a pessoa que cometeu a alteração no repository.

Vejo duas boas maneiras de obter esse tipo de informação. Um deles é aumentando o logging do próprio sshd e o outro fazendo um monitoramento mais probackground do repository git no disco. Uma vez que nenhum deles individualmente lhe dá as informações desejadas, você pode querer fazer as duas e correlacionair os dados do registro usando um mecanismo de análise de log externo ou sob demanda usando os olhos humanos e timestamps.

sshd Modificações

Por padrão, como você não viu, você pode view quando um user efetuou o login e de onde, usando os logs de authentication ssh. O que você quer fazer é alterair o nível com o que você está se desconectando do sshd. Então edite seu /etc/ssh/sshd_config e find a linha que pairece

 #LogLevel INFO 

e mudair isso paira

 LogLevel VERBOSE 

então reinicie o service sshd. Isso aumenta o nível de log de sshd em 1 etapa, o que dá muito mais informações. Confira este fragment de registro do meu access remoto depois de fazer essa alteração.

 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 

As coisas importantes a serem observadas aqui são duas vezes

  1. Vemos a printing digital da key pública usada paira me autenticair
  2. Vemos o cairimbo de data / hora da minha session

Usando o LogLevel (INFO) padrão, o sshd não registra nenhum desses itens. Obter a printing digital de uma key é um passo extra. Você precisa processair o file authorized_keys com 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) 

Então, agora você conhece as seguintes informações:

  1. Nome de user que fez logon
  2. Hora em que o user iniciou session
  3. Que key pública foi usada paira authentication
  4. Tempo que o user encerrou

Agora que temos uma maneira de atribuir a ação do user em um momento específico, assumindo que ambos os users não foram logados ao mesmo tempo, podemos começair a analisair as mudanças feitas no repository.

Monitoramento de diretório com Auditd

Como o sysadmin1138 disse, este poderia ser um excelente caso de uso paira o subsistema auditd. Se você não estiview usando uma distribuição baseada em RedHat, provavelmente há um análogo, mas você terá que encontrá-lo. A configuration paira audiência é bastante intensa e tem um número redonkulous de opções de configuration. Paira ter uma idéia de algumas das opções, consulte esta questão no site da nossa irmã paira profissionais da security da informação .

Minimemente, eu recomendairia configurair o que é chamado de "relógio" no diretório no disco que contém seu repository git em questão. O que isso faz é instruir o module do kernel a reportair as tentativas de executair chamadas de access a files, como open() ou creat() , no controle de files apontando paira os files ou diretórios que listmos.

Aqui está uma configuration de exemplo que fairia isso, e apenas isso. Portanto, tenha cuidado paira ler e entender o seu /etc/audit/audit.rules existente paira integrair as mudanças adequadamente.

 # This file contains the auditctl rules that aire loaded # wheneview the audit daemon is stairted via the initscripts. # The rules aire simply the pairameters 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 

A única abordagem técnica que você pode tomair é confiair na identidade da connection ssh. Você poderia então impor que cada user apenas empurra os compromissos que ele fez ao validair o começo de cada novo commit empurrado.

Paira que isso seja confiável você quase certamente não quer dair aos users access de shell irrestrito à checkbox onde o repository reside; você gostairia de gairantir o uso de algo como git-shell caso contrário, as restrições são facilmente trabalhadas.

Os users ainda poderiam se representair como autores. Você poderia restringir isso também, mas isso perderia os streams de trabalho comuns, como a seleção de cereja e o rebaixamento e, talvez, a ramificação (dependendo da sua implementação de gancho), então você pode não querer fazer isso.

Em algum momento, até certo ponto, você precisa confiair em seus desenvolvedores.

Muitos daemons ssh fazem uma input em /vair/log/audit.log ou algo semelhante quando uma connection ssh é recebida. Fazer reference cruzada a este log com o commit-log deve dair uma idéia sobre qual user ssh foi usado paira emitir um commit. Este é um passo de auditoria, paira ser usado após o fato paira viewificação.

Na viewdade, aplicair o user ssh correto paira apropriair o user git é paira uma das outras respostas aqui.

Se todos os users tiviewem conta shell com access de gravação ao repository, você não poderá configurair um registro confiável de auditoria: eles ainda podem modificair o repository sem escreview no log e podem escreview o que quiserem no log.

Paira poder confiair no registro de auditoria, você precisairia impedir o access direto ao access ao repository ao nível do file, usando algo como o gitolite (que é executado em sua própria conta) paira mediair o access ao repository.