Назад | Перейти на главную страницу

Правильные имена пользователей при отслеживании / etc / в репозитории git и фиксации от имени пользователя root

Мы используем git для отслеживания изменений в /etc/ на наших серверах.

Администраторы работают как root при изменении файлов в / etc /, поэтому их коммиты имеют автора

root <root@machinename>

Это не очень приятно, поскольку вы не можете увидеть, какой администратор на самом деле внес изменения.

Что мы можем сделать, чтобы получить настоящие имена администраторов в журнале git? Я не думаю, что сохранение локального клона репозитория возможно, поскольку мы часто меняем интерактивно, пока что-то не сработает, и цикл change-commit-push-seeError-repeat здесь не поможет.

На имя автора и коммиттера git можно влиять с помощью переменных среды GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME и GIT_AUTHOR_EMAIL.

Теперь уловка состоит в том, чтобы отправить эти переменные на удаленный сервер при подключении через SSH:

  1. Определите и экспортируйте переменные в свой ~/.bashrc файл:

    export GIT_AUTHOR_NAME="Christian Weiske"
    
  2. Автоматически отправлять их через SSH-соединение, настроив ~/.ssh/config:

    SendEnv LANG LC_* GIT_*
    

    LANG и LC_* не обязательны, но в Debian по умолчанию используется ssh_config, поэтому я подумал, что тоже должен отправить их

  3. На удаленном сервере настройте sshd конфигурация в /etc/ssh/sshd_config принять GIT_* переменные среды:

    AcceptEnv LANG LC_* GIT_*
    

Вуаля - а git commit как корень в /etc/ приводит к:

commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <christian.weiske@netresearch.de>

В случае сбоя сервера когда-нибудь в будущем: http://cweiske.de/tagebuch/carry-git-settings.htm

Во-первых, и не имеющий отношения к вашему вопросу, я настоятельно рекомендую вам срочно прекратить использовать root логины и su и использовать логины пользователей и sudo вместо. Ограничьте свой root вход только в консоль или даже не в этом.

Тем не менее, git commit имеет --author вариант, который может вам помочь:

# git commit --author='Author Name <author@email.address.com>' -a

Вы также можете осторожно использовать переменные среды для каждого пользователя, чтобы установить GIT_AUTHOR_NAME и GIT_AUTHOR_EMAIL переменные. В журнале появятся разные авторы и один и тот же коммитер (root@host), но это даст вам больше аудита. Конечно, это означает, что вы доверяете своим администраторам сохранять переменные нетронутыми. Поскольку каждый из них использует определенную оболочку, они могут sudo для рутирования и источника файла с их конкретными git переменные, идентифицирующие каждую по-разному в коммитах. Не очень практично, но вы можете даже автоматизировать это с помощью скриптов.

РЕДАКТИРОВАТЬ: Конечно, даже лучший подход, назначенный @ScottPack, - это использовать систему управления конфигурацией, такую ​​как Puppet или Chef, и использовать git для отслеживания изменений на центральном сервере, а не на реальных серверах, чтобы каждый администратор мог иметь рабочую копию конфигурация.

С участием замазка вы можете установить это в «Соединение -> Данные -> Переменные среды».

Они также присутствуют после 'su'получить root права.

Если вы настроили учетные записи пользователей на своих серверах с помощью ключей ssh, вы можете фактически присоединить переменные среды к авторизованным ключам во время установки - например, в ~ bob / .ssh / authorized_keys

environment="GIT_AUTHOR_NAME=Bob Smith",environment="GIT_AUTHOR_EMAIL=bob.smith@megacorp.com" ssh-rsa AAAA.... bob.smith@megacorp.com

Таким образом, когда пользователи SSH входят в систему, они автоматически настраивают эти envs - им не нужно пересылать их с локального клиента. Бонусные баллы, если у вас уже есть эта информация и вы генерируете конфигурации authorized_keys из системы управления конфигурациями.

Примечание: для вышеуказанного требуется PermitUserEnvironment yes в sshd_config

Если вы используете sudo и у вашего пользователя без полномочий root смонтирован домашний каталог:

git -c include.path=<file> будет включать конфигурацию в <file>.

Чтобы автоматически загружать файлы конфигурации моего пользователя без полномочий root, я использую bash псевдоним:

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

Тогда я использую gsudo вместо того git как для:

  • Запуск от root
  • Иметь доступ ко всей конфигурации git пользователя без полномочий root

Убедитесь, что конфигурация действительно импортируется:

gsudo config --list --show-origin --includes | less

В дополнение к ответу coredump вы также можете установить эти параметры в .git/config файл в вашей рабочей копии репозитория (вручную или с помощью git config команда.

Видеть man git-config для получения дополнительной информации о команде и интересных вещах, которые вы можете с ней делать.