Prawidłowe nazwy użytkowników podczas śledzenia / etc / w repozytorium git i zatwierdzania jako root

13

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.

cweiske
źródło
Jako rzeczywisty root lub sudo chciałbyś rootować?
Decado,
Obecnie jako rzeczywisty root (ssh root @ lub "su", bez sudo)
cweiske 7.04.11
Użyj etckeeper, zajmuje się takimi dziwnymi problemami jak ta w wersji / etc. Zacznij także korzystać z kont poszczególnych użytkowników i sudo.
Caleb

Odpowiedzi:

12

Autor git i nazwisko committer można wpływać ze zmiennych środowiskowych GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEi GIT_AUTHOR_EMAIL.

Teraz sztuczka polega na przesłaniu tych zmiennych do zdalnego serwera podczas łączenia przez SSH:

  1. Zdefiniuj i wyeksportuj zmienne w swoim ~/.bashrcpliku:

    export GIT_AUTHOR_NAME="Christian Weiske"
    
  2. Automatycznie wysyłaj je za pomocą połączenia SSH, dostosowując ~/.ssh/config:

    SendEnv LANG LC_* GIT_*
    

    LANGi LC_*nie są konieczne, ale Debian ma wtedy domyślny ssh_config, więc pomyślałem, że powinienem je również przesłać

  3. Na serwerze zdalnym dostosuj konfigurację sshd,/etc/ssh/sshd_config aby akceptować GIT_*zmienne środowiskowe:

    AcceptEnv LANG LC_* GIT_*
    

Voila - git commitjako root w /etc/prowadzi do:

commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <[email protected]>

W przypadku awarii serwera przez jakiś czas w przyszłości: http://cweiske.de/tagebuch/carry-git-settings.htm

cweiske
źródło
5

Po pierwsze i niezwiązany z twoim pytaniem, zachęcam do pilnego zaprzestania korzystania z rootloginów sui używania loginów użytkownika i sudozamiast tego. Ogranicz swoje rootlogowanie tylko do konsoli, a nawet nie.

To powiedziawszy, git commitma --authoropcję, która może ci w tym pomóc:

# git commit --author='Author Name <[email protected]>' -a

Możesz również ostrożnie używać zmiennych środowiskowych dla użytkownika do ustawienia GIT_AUTHOR_NAMEi GIT_AUTHOR_EMAILzmiennych. 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że sudozrootować i pobrać plik ze swoimi specyficznymi gitzmiennymi, 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.

rdzeń rdzeniowy
źródło
--authorjest 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.
cweiske
5
@cweiske, dlaczego uważasz sudo za szkodliwe?
rdzeń rdzeniowy
1
@cweiske Czy zastanawiałeś się nad skryptem otoki, który przesłuchuje osobę odpowiedzialną za przekazanie ważnych informacji (kim są, co zmienili, dlaczego dokonano zmiany, numer biletu, jeśli dotyczy)? Moje ostatnie miejsce zatrudnienia miało podobny system (oparty na CVS) dla zmian DNS, z opakowaniami do egzekwowania zasad - działa zaskakująco dobrze.
voretaq7
4
@cweiske Nie zgadzam się ani trochę z twoją oceną. Możesz użyć agenta ssh do buforowania hasła klucza ssh i bezmyślnie zalogować się na maszynę root, lub po prostu użyć prostego hasła lub tego samego hasła na swoim komputerze niż hasło root, podczas gdy sudoty 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.
coredump
2
Można również skonfigurować sudowymuszanie 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ądy sudo. Jedną ze wspaniałych rzeczy w SF jest posiadanie społeczności rówieśników, którzy naprawdę znają swoje gówno :-).
Belmin Fernandez
3

Za pomocą szpachli można to ustawić w „Połączenie -> Dane -> Zmienne środowiskowe”.

Są także obecne po „ su” w celu zrootowania.

Cybot
źródło
3

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

environment="GIT_AUTHOR_NAME=Bob Smith",environment="[email protected]" ssh-rsa AAAA.... [email protected]

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 yesw sshd_config

minaguib
źródło
1

Jeśli używasz, sudoa 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 bashaliasu:

alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""

Następnie używam gsudozamiast gitobu:

  • Uruchom jako root
  • Mają dostęp do wszystkich konfiguracji git użytkownika innego niż root

Sprawdź, czy konfiguracja rzeczywiście jest importowana:

gsudo config --list --show-origin --includes | less
Tom Hale
źródło
0

Oprócz odpowiedzi coredumpa możesz także ustawić te opcje w .git/configpliku w kopii roboczej repozytorium (ręcznie lub za pomocą git configpolecenia.

Zobacz man git-configwięcej informacji o poleceniu i fajne rzeczy, które możesz z nim zrobić.

voretaq7
źródło
Działa to tylko wtedy, gdy jeden administrator zatwierdzający w tym repozytorium na tym komputerze, ale nie powiedzie się z kilkoma administratorami.
cweiske
To prawda - jest bardziej odpowiedni w sytuacji, gdy masz centralne repozytorium, a ludzie klonują i ściągają / pchają do tego repozytorium.
voretaq7,