Wir verwenden git, um Änderungen /etc/
auf unseren Servern nachzuverfolgen.
Administratoren arbeiten als Root, wenn sie Dateien in / etc / ändern, und daher haben ihre Commits Autor
root <root@machinename>
Dies ist nicht sehr befriedigend, da Sie nicht sehen können, welcher Administrator die Änderung tatsächlich vorgenommen hat.
Was können wir tun, um die echten Admin-Namen in das Git-Protokoll aufzunehmen? Ich denke nicht, dass es machbar ist, einen lokalen Klon des Repositorys zu behalten, da wir häufig interaktiv wechseln, bis etwas funktioniert, und ein Change-Commit-Push-SeeError-Repeat-Zyklus hier nicht hilfreich wäre.
etckeeper
, es kümmert sich um die seltsamen Fallstricke wie diese in Versionierung / etc. Beginnen Sie auch mit der Verwendung von Benutzerkonten undsudo
.Antworten:
Der git Autor und Committer Name kann mit den Umgebungsvariablen beeinflusst werden
GIT_COMMITTER_NAME
,GIT_COMMITTER_EMAIL
,GIT_AUTHOR_NAME
undGIT_AUTHOR_EMAIL
.Der Trick besteht nun darin, diese Variablen beim Herstellen einer Verbindung über SSH an den Remoteserver zu senden:
Definieren und exportieren Sie die Variablen in Ihrer
~/.bashrc
Datei:Senden Sie sie automatisch mit einer SSH-Verbindung, indem Sie Folgendes einstellen
~/.ssh/config
:LANG
undLC_*
sind nicht notwendig, aber Debian hat dann in ihrer Standardeinstellung ssh_config, also dachte ich, ich sollte sie auch einreichenPassen Sie auf dem Remote-Server die sshd- Konfiguration an
/etc/ssh/sshd_config
, umGIT_*
Umgebungsvariablen zu akzeptieren :Voila -
git commit
als root in/etc/
führt zu:Für den Fall, dass in Zukunft ein Serverfehler auftritt: http://cweiske.de/tagebuch/carry-git-settings.htm
quelle
Erstens, und nicht im Zusammenhang mit Ihrer Frage, möchte ich Sie dringend auffordern, die Verwendung von
root
Anmeldungen undsu
und Benutzeranmeldungen undsudo
stattdessen einzustellen . Beschränken Sie Ihreroot
Anmeldungen nur auf die Konsole oder nicht einmal auf diese.Das heißt,
git commit
hat eine--author
Option, die Ihnen dort helfen kann:Sie können Umgebungsvariablen pro Benutzer auch sorgfältig zum Festlegen
GIT_AUTHOR_NAME
undGIT_AUTHOR_EMAIL
Variabeln verwenden. Im Protokoll werden verschiedene Autoren und derselbe Commiter (root@host
) angezeigt , Sie erhalten jedoch mehr Überwachungsmöglichkeiten . Das bedeutet natürlich, dass Sie darauf vertrauen, dass Ihre Administratoren die Variablen intakt halten. Da jeder Benutzer eine bestimmte Shell verwendet, kannsudo
er eine Datei mit ihren spezifischengit
Variablen als Root und Quelle verwenden , wobei jeder bei den Commits unterschiedlich identifiziert wird. Nicht sehr praktisch, aber Sie können dies sogar mit Skripten automatisieren.BEARBEITEN: Ein noch besserer Ansatz als von @ScottPack vorgegeben wäre natürlich, ein Konfigurationsmanagementsystem wie Puppet oder Chef zu verwenden und die Änderungen mit git auf dem zentralen Server und nicht auf den realen Servern zu verfolgen, sodass jeder Administrator eine Arbeitskopie haben könnte der Konfiguration.
quelle
--author
Das ist natürlich möglich, aber die Leute verwenden das nicht in ihrem normalen Arbeitsablauf, da es zu viel ist, um es zu schreiben. Zu Ihrer zweiten Idee, sudo zu verwenden: Ich gehöre zu den Leuten, die sudo als schädlich betrachten und den SSH-Root-Zugriff eher nur mit SSH-Schlüsseln verwenden. Und ja, wir vertrauen unseren Admins.sudo
Sie den Benutzer zwingen , ein Passwort (gerade) einzugeben Wenn er einen SSH-Schlüssel verwendet, um sich als Benutzer anzumelden, können Sie steuern, was der Benutzer ausführen kann, und vor allem können Sie nachvollziehen, wer was getan hat. Aber jeder hat Anspruch auf seine eigene Meinung.sudo
, dass ein Benutzer gezwungen wird, für jeden Befehl ein Kennwort einzugeben (timestamp_timeout = 0
). Vielleicht nicht für Entwicklungs- und Staging-Boxen geeignet, aber durchaus für die Produktion geeignet. IMHO, basierend auf dem SF-Konsens, sollten Sie Ihre Ansichten überdenkensudo
. Eines der großartigen Dinge an SF ist, dass es eine Community von Gleichgesinnten gibt, die sich wirklich auskennen :-).Mit putty können Sie dies unter "Verbindung -> Daten -> Umgebungsvariablen" einstellen.
Sie sind auch nach "
su
root" vorhanden.quelle
Wenn Sie Benutzerkonten auf Ihren Servern mithilfe von SSH-Schlüsseln bereitstellen, können Sie Umgebungsvariablen zum Zeitpunkt der Einrichtung an die autorisierten Schlüssel anhängen, z. B. in ~ bob / .ssh / authorized_keys
Auf diese Weise müssen Benutzer, die sich in SSH befinden, diese Envs automatisch einrichten. Sie müssen sie nicht vom lokalen Client weiterleiten. Bonuspunkte, wenn Sie bereits über diese Informationen verfügen und "authorized_keys" -Konfigurationen von einem Konfigurationsverwaltungssystem generieren.
Hinweis:
PermitUserEnvironment yes
Dies ist in sshd_config erforderlichquelle
Wenn Sie verwenden
sudo
und Ihr Nicht-Root-Benutzer sein Basisverzeichnis angehängt hat:git -c include.path=<file>
beinhaltet die Konfiguration in<file>
.Um die Konfigurationsdateien meines Nicht-Root-Benutzers automatisch abzurufen, verwende ich den
bash
Alias:Dann benutze ich
gsudo
stattgit
zu beiden:Überprüfen Sie, ob die Konfiguration tatsächlich importiert wird:
quelle
Zusätzlich zur Antwort von coredump können Sie diese Optionen auch in der
.git/config
Datei in Ihrer Arbeitskopie des Repositorys festlegen (von Hand oder mit demgit config
Befehl).Siehe
man git-config
für weitere Informationen über den Befehl und die coolen Dinge , die man damit machen kann.quelle