Nous utilisons git pour suivre les changements /etc/
sur nos serveurs.
Les administrateurs travaillent en tant que root lors de la modification de fichiers dans / etc /, et donc leurs validations ont un auteur
root <root@machinename>
Ce n'est pas très satisfaisant car vous ne pouvez pas voir quel administrateur a réellement effectué le changement.
Que pouvons-nous faire pour obtenir les vrais noms d'administrateur dans le journal git? Je ne pense pas qu'il soit possible de conserver un clone local du référentiel car nous changeons souvent de manière interactive jusqu'à ce que quelque chose fonctionne, et un cycle change-commit-push-seeError-repeat ne serait pas utile ici.
etckeeper
, il s'occupe des étranges accrochages comme celui-ci dans le versioning / etc. Commencez également à utiliser les comptes par utilisateur etsudo
.Réponses:
L'auteur git et nom de la peut être influencée par les variables d'environnement
GIT_COMMITTER_NAME
,GIT_COMMITTER_EMAIL
,GIT_AUTHOR_NAME
etGIT_AUTHOR_EMAIL
.Maintenant, l'astuce consiste à soumettre ces variables au serveur distant lors de la connexion via SSH:
Définissez et exportez les variables de votre
~/.bashrc
fichier:Envoyez-les automatiquement avec une connexion SSH en ajustant
~/.ssh/config
:LANG
etLC_*
ne sont pas nécessaires, mais Debian a ensuite dans leur ssh_config par défaut, donc j'ai pensé que je devrais aussi les soumettreSur le serveur distant, ajustez la configuration sshd dans
/etc/ssh/sshd_config
pour accepterGIT_*
les variables d'environnement:Voila - un
git commit
comme racine dans/etc/
mène à:En cas de défaillance du serveur dans le futur: http://cweiske.de/tagebuch/carry-git-settings.htm
la source
Tout d'abord, et sans rapport avec votre question, je vous exhorte à arrêter d' urgence d'utiliser les
root
connexionssu
et d'utiliser les connexions utilisateur et à lasudo
place. Limitez vosroot
connexions à la console uniquement, ou même pas à cela.Cela dit,
git commit
a une--author
option qui peut vous y aider:Vous pouvez également utiliser soigneusement les variables d'environnement par utilisateur pour définir les variables
GIT_AUTHOR_NAME
etGIT_AUTHOR_EMAIL
. Dans le journal, il apparaîtra différents auteurs et le même commiter (root@host
), mais cela vous donnera plus d'audits. Bien sûr, cela signifie que vous faites confiance à vos administrateurs pour garder les variables intactes. Comme chacun utilise un shell spécifique, ils peuventsudo
rooter et source un fichier avec leursgit
variables spécifiques , identifiant chacun différemment sur les validations. Pas très pratique, mais vous pouvez même automatiser cela avec des scripts.EDIT: Bien sûr, une approche encore meilleure telle que désignée par @ScottPack serait d'utiliser un système de gestion de configuration comme Puppet ou Chef et d'utiliser git pour suivre les modifications sur le serveur central et non sur les serveurs réels afin que chaque administrateur puisse avoir une copie de travail de la configuration.
la source
--author
est possible bien sûr, mais les gens ne l'utilisent pas dans leur flux de travail normal car c'est trop à écrire. Sur votre deuxième idée d'utiliser sudo: je fais partie de ceux qui considèrent sudo comme nuisible et utilisent plutôt l'accès root ssh avec les clés ssh uniquement. Et oui, nous faisons confiance à nos administrateurs.sudo
vous forcer l'utilisateur à saisir un mot de passe (même s'il utilise une clé ssh pour se connecter en tant qu'utilisateur) et vous pouvez contrôler ce que l'utilisateur peut exécuter et vous disposez principalement d'une piste d'audit de qui a fait quoi. Mais chacun a droit à sa propre opinion.sudo
pour forcer un utilisateur à entrer un mot de passe pour chaque commande (timestamp_timeout = 0
). Peut-être pas adapté pour le développement et les boîtes de mise en scène mais certainement adapté à la production. À mon humble avis, sur la base du consensus SF, vous devriez repenser votre point de vuesudo
. L'une des grandes choses à propos de SF est d'avoir une communauté de pairs qui connaissent vraiment leur sh * t :-).Avec putty, vous pouvez définir cela sous "Connexion -> Données -> Variables d'environnement".
Ils sont également présents après '
su
' pour rooter.la source
S'il vous arrive de provisionner des comptes d'utilisateurs sur vos serveurs à l'aide de clés ssh, vous pouvez réellement attacher des variables d'environnement aux clés autorisées au moment de la configuration - par exemple dans ~ bob / .ssh / authorized_keys
De cette façon, lorsque les utilisateurs SSH ont automatiquement configuré ces envs, il n'est pas nécessaire de les transférer depuis le client local. Des points bonus si vous disposez déjà de ces informations et que vous générez des configurations author_keys depuis un système de gestion de configuration
Remarque: ce qui précède nécessite
PermitUserEnvironment yes
dans sshd_configla source
Si vous utilisez
sudo
et que votre utilisateur non root a son répertoire personnel monté:git -c include.path=<file>
inclura la configuration dans<file>
.Pour extraire automatiquement les fichiers de configuration de mon utilisateur non root, j'utilise l'
bash
alias:Ensuite, j'utilise
gsudo
au lieu degit
deux:Vérifiez que la configuration est bien importée:
la source
En plus de la réponse de coredump, vous pouvez également définir ces options dans le
.git/config
fichier de votre copie de travail du référentiel (à la main ou à l'aide de lagit config
commande).Voir
man git-config
pour plus d'informations sur la commande et les choses intéressantes que vous pouvez en faire.la source