Usamos o git para rastrear alterações em /etc/
nossos servidores.
Os administradores trabalham como raiz ao alterar arquivos no / etc / e, portanto, seus commits têm autor
root <root@machinename>
Isso não é muito satisfatório, pois você não pode ver qual administrador realmente fez a alteração.
O que podemos fazer para obter os nomes reais de administrador no log do git? Eu não acho que manter um clone local do repositório seja viável, pois geralmente mudamos interativamente até que algo funcione, e um ciclo de mudança de confirmação de envio e push de seeError-repeat não ajudaria aqui.
etckeeper
, ele cuida de truques estranhos como este no versionamento / etc. Comece também a usar contas por usuário esudo
.Respostas:
O autor git eo nome committer pode ser influenciada com as variáveis de ambiente
GIT_COMMITTER_NAME
,GIT_COMMITTER_EMAIL
,GIT_AUTHOR_NAME
eGIT_AUTHOR_EMAIL
.Agora, o truque é enviar essas variáveis ao servidor remoto ao se conectar através do SSH:
Defina e exporte as variáveis em seu
~/.bashrc
arquivo:Envie-os automaticamente com uma conexão SSH ajustando
~/.ssh/config
:LANG
eLC_*
não são necessários, mas o Debian possui o ssh_config padrão, então pensei em enviá-los tambémNo servidor remoto, ajuste a configuração sshd
/etc/ssh/sshd_config
para aceitarGIT_*
variáveis de ambiente:Voila - a
git commit
raiz como/etc/
leva a:Caso a falha do servidor falhe em algum momento no futuro: http://cweiske.de/tagebuch/carry-git-settings.htm
fonte
Primeiro, e não relacionado à sua pergunta, recomendamos que você interrompa com urgência o uso de
root
logons esu
os logins de usuáriosudo
. Restrinja seusroot
logins apenas ao console, ou nem isso.Dito isto,
git commit
tem uma--author
opção que pode ajudá-lo lá:Você também pode usar cuidadosamente variáveis de ambiente por usuário para definir
GIT_AUTHOR_NAME
eGIT_AUTHOR_EMAIL
variáveis. No log, aparecerão autores diferentes e o mesmo commiter (root@host
), mas fornecerão mais auditorias. Claro que isso significa que você confia em seus administradores para manter as variáveis intactas. Como cada um está usando um shell específico, eles podemsudo
fazer root e originar um arquivo com suasgit
variáveis específicas , identificando cada um de maneira diferente nos commits. Não é muito prático, mas você pode até automatizar isso com scripts.EDIT: É claro que uma abordagem ainda melhor, como apontada pelo @ScottPack, seria usar um sistema de gerenciamento de configuração como Puppet ou Chef e usar o git para rastrear as alterações no servidor central e não nos servidores reais, para que cada administrador pudesse ter uma cópia de trabalho. da configuração.
fonte
--author
é possível, é claro, mas as pessoas não usam isso em seu fluxo de trabalho normal, pois é muito difícil escrever. Na sua segunda idéia de usar o sudo: sou uma das pessoas que consideram o sudo prejudicial e, em vez disso, usam o acesso root ssh apenas com chaves ssh. E sim, confiamos em nossos administradores.sudo
você forçar o usuário digite uma senha (mesmo se ele usa uma chave ssh para registrar como usuário) e você pode controlar o que o usuário pode executar e, principalmente, você tem uma trilha de auditoria de quem fez o que. Mas todo mundo tem direito a sua própria opinião.sudo
para forçar um usuário a inserir uma senha para cada comando (timestamp_timeout = 0
). Talvez não seja adequado para caixas de desenvolvimento e preparação, mas certamente adequado para produção. IMHO, com base no consenso do SF, você deve repensar suas opiniõessudo
. Uma das grandes coisas sobre SF é ter uma comunidade de colegas que realmente conhecem seus sh * t :-).Com o putty, você pode definir isso em "Conexão -> Dados -> Variáveis de ambiente".
Eles também estão presentes após
su
a raiz.fonte
Se você provisionar contas de usuário em seus servidores usando chaves ssh, poderá conectar variáveis de ambiente às chaves autorizadas no momento da configuração - por exemplo, em ~ bob / .ssh / allowed_keys
Dessa forma, quando os usuários fazem o SSH, eles automaticamente configuram esses envs - não há necessidade deles de encaminhá-los a partir do cliente local. Pontos de bônus, se você já possui essas informações e está gerando configurações author_keys a partir de um sistema de gerenciamento de configurações.
Nota: O acima requer
PermitUserEnvironment yes
no sshd_configfonte
Se você estiver usando
sudo
e seu usuário não root tiver o diretório inicial montado:git -c include.path=<file>
incluirá a configuração em<file>
.Para puxar automaticamente os arquivos de configuração do meu usuário não raiz, eu uso o
bash
alias:Então eu uso em
gsudo
vez degit
para ambos:Verifique se a configuração está realmente sendo importada:
fonte
Além da resposta do coredump, você também pode definir essas opções no
.git/config
arquivo da sua cópia de trabalho do repositório (manualmente ou usando ogit config
comandoVeja
man git-config
para obter mais informações sobre o comando e as coisas legais que você pode fazer com ele.fonte