Używamy git do śledzenia zmian /etc/
na naszych serwerach.
Administratorzy pracują jako root podczas zmiany plików w / etc /, a zatem ich zatwierdzenia mają autora
root <root@machinename>
Nie jest to zbyt satysfakcjonujące, ponieważ nie możesz zobaczyć, który administrator faktycznie dokonał zmiany.
Co możemy zrobić, aby uzyskać prawdziwe nazwy administracyjne w dzienniku git? Nie sądzę, aby utrzymywanie lokalnego klonu repozytorium było wykonalne, ponieważ często zmieniamy się interaktywnie, dopóki coś nie zadziała, a cykl zmiany zatwierdzenia, wypchnięcia, zobaczenia i powtórzenia błędu nie pomoże tutaj.
etckeeper
, zajmuje się takimi dziwnymi problemami jak ta w wersji / etc. Zacznij także korzystać z kont poszczególnych użytkowników isudo
.Odpowiedzi:
Autor git i nazwisko committer można wpływać ze zmiennych środowiskowych
GIT_COMMITTER_NAME
,GIT_COMMITTER_EMAIL
,GIT_AUTHOR_NAME
iGIT_AUTHOR_EMAIL
.Teraz sztuczka polega na przesłaniu tych zmiennych do zdalnego serwera podczas łączenia przez SSH:
Zdefiniuj i wyeksportuj zmienne w swoim
~/.bashrc
pliku:Automatycznie wysyłaj je za pomocą połączenia SSH, dostosowując
~/.ssh/config
:LANG
iLC_*
nie są konieczne, ale Debian ma wtedy domyślny ssh_config, więc pomyślałem, że powinienem je również przesłaćNa serwerze zdalnym dostosuj konfigurację sshd,
/etc/ssh/sshd_config
aby akceptowaćGIT_*
zmienne środowiskowe:Voila -
git commit
jako root w/etc/
prowadzi do:W przypadku awarii serwera przez jakiś czas w przyszłości: http://cweiske.de/tagebuch/carry-git-settings.htm
źródło
Po pierwsze i niezwiązany z twoim pytaniem, zachęcam do pilnego zaprzestania korzystania z
root
loginówsu
i używania loginów użytkownika isudo
zamiast tego. Ogranicz swojeroot
logowanie tylko do konsoli, a nawet nie.To powiedziawszy,
git commit
ma--author
opcję, która może ci w tym pomóc:Możesz również ostrożnie używać zmiennych środowiskowych dla użytkownika do ustawienia
GIT_AUTHOR_NAME
iGIT_AUTHOR_EMAIL
zmiennych. W dzienniku pojawią się różni autorzy i ten sam commiter (root@host
), ale da ci więcej kontroli. Oczywiście oznacza to, że ufasz swoim administratorom, że zachowają zmienne. Ponieważ każdy korzysta z określonej powłoki, możesudo
zrootować i pobrać plik ze swoimi specyficznymigit
zmiennymi, identyfikując każdy z nich inaczej w commits. Niezbyt praktyczne, ale możesz nawet zautomatyzować to za pomocą skryptów.EDYCJA: Oczywiście jeszcze lepszym podejściem wyznaczonym przez @ScottPack byłoby użycie systemu zarządzania konfiguracją, takiego jak Puppet lub Chef, i użycie git do śledzenia zmian na serwerze centralnym, a nie na prawdziwych serwerach, aby każdy administrator mógł mieć kopię roboczą konfiguracji.
źródło
--author
jest oczywiście możliwe, ale ludzie nie używają tego w swoim normalnym przepływie pracy, ponieważ jest zbyt wiele do pisania. Przy drugim pomyśle korzystania z sudo: jestem jedną z osób, które uważają sudo za szkodliwe i raczej używam dostępu do katalogu głównego ssh tylko za pomocą kluczy ssh. I tak, ufamy naszym administratorom.sudo
ty zmusisz użytkownika do wpisania hasła (nawet jeśli używa klucza ssh do zalogowania się jako użytkownik), a Ty możesz kontrolować, co użytkownik może wykonać, a przede wszystkim masz ścieżkę audytu dotyczącą tego, kto co zrobił. Ale każdy ma prawo do własnej opinii.sudo
wymuszanie na użytkowniku wprowadzenia hasła do każdego polecenia (timestamp_timeout = 0
). Być może nie nadaje się do pudełek rozwojowych i postojowych, ale z pewnością nadaje się do produkcji. IMHO, w oparciu o konsensus SF, powinieneś przemyśleć swoje poglądysudo
. Jedną ze wspaniałych rzeczy w SF jest posiadanie społeczności rówieśników, którzy naprawdę znają swoje gówno :-).Za pomocą szpachli można to ustawić w „Połączenie -> Dane -> Zmienne środowiskowe”.
Są także obecne po „
su
” w celu zrootowania.źródło
Jeśli zdarzy się, że administrujesz kontami użytkowników na swoich serwerach za pomocą kluczy ssh, możesz faktycznie dołączyć zmienne środowiskowe do autoryzowanych kluczy w czasie instalacji - na przykład w ~ bob / .ssh / author_keys
W ten sposób użytkownicy SSH automatycznie konfigurują te środowiska env - nie trzeba ich przesyłać dalej z lokalnego klienta. Punkty bonusowe, jeśli masz już te informacje i generujesz konfiguracje uprawnionych kluczy z systemu zarządzania konfiguracjami.
Uwaga: Powyższe wymaga
PermitUserEnvironment yes
w sshd_configźródło
Jeśli używasz,
sudo
a użytkownik inny niż root ma zamontowany katalog domowy:git -c include.path=<file>
obejmie konfigurację w<file>
.Aby automatycznie pobrać pliki konfiguracyjne użytkownika innego niż root, używam
bash
aliasu:Następnie używam
gsudo
zamiastgit
obu:Sprawdź, czy konfiguracja rzeczywiście jest importowana:
źródło
Oprócz odpowiedzi coredumpa możesz także ustawić te opcje w
.git/config
pliku w kopii roboczej repozytorium (ręcznie lub za pomocągit config
polecenia.Zobacz
man git-config
więcej informacji o poleceniu i fajne rzeczy, które możesz z nim zrobić.źródło