Мы используем git для отслеживания изменений /etc/
на наших серверах.
Администраторы работают как root при изменении файлов в / etc /, и поэтому их коммиты имеют автора
root <root@machinename>
Это не очень удовлетворительно, так как вы не можете видеть, какой администратор действительно внес изменения.
Что мы можем сделать, чтобы получить настоящие имена администраторов в журнале git? Я не думаю, что сохранение локального клона репозитория возможно, так как мы часто меняемся интерактивно, пока что-то не работает, и цикл change-commit-push-seeError-repeat здесь не поможет.
etckeeper
, это заботится о странных ошибках, подобных этому в версии / etc. Также начните использовать учетные записи пользователей иsudo
.Ответы:
Автор мерзавец и имя коммиттер могут влиять на переменные окружения
GIT_COMMITTER_NAME
,GIT_COMMITTER_EMAIL
,GIT_AUTHOR_NAME
иGIT_AUTHOR_EMAIL
.Теперь хитрость заключается в отправке этих переменных на удаленный сервер при подключении через SSH:
Определите и экспортируйте переменные в вашем
~/.bashrc
файле:Автоматически отправляйте их по SSH-соединению, настраивая
~/.ssh/config
:LANG
иLC_*
не являются необходимыми, но тогда Debian имеет по умолчанию ssh_config, так что я подумал, что я тоже должен их отправитьНа удаленном сервере настройте конфигурацию sshd так,
/etc/ssh/sshd_config
чтобы она принималаGIT_*
переменные среды:Вуаля -
git commit
как корень в/etc/
приводит к:В случае сбоя сервера в будущем: http://cweiske.de/tagebuch/carry-git-settings.htm
источник
Во-первых, и не имеет отношения к вашему вопросу, я настоятельно призываю вас срочно прекратить использовать
root
логиныsu
и использовать логины пользователей иsudo
вместо них. Ограничьте вашиroot
логины только консолью или даже не этим.Тем не менее,
git commit
есть--author
вариант, который может помочь вам там:Вы также можете осторожно использовать переменные окружения для каждого пользователя
GIT_AUTHOR_NAME
иGIT_AUTHOR_EMAIL
переменные. В журнале появятся разные авторы и один и тот же commiter (root@host
), но это даст вам больше аудита. Конечно, это означает, что вы доверяете своим администраторам сохранять переменные нетронутыми. Поскольку каждый из них использует определенную оболочку, он можетsudo
получить root-права и исходный файл со своими конкретнымиgit
переменными, по-разному идентифицируя каждый в коммитах. Не очень практично, но вы можете даже автоматизировать это с помощью сценариев.РЕДАКТИРОВАТЬ: Конечно, еще лучший подход, назначенный @ScottPack, состоит в том, чтобы использовать систему управления конфигурацией, такую как Puppet или Chef, и использовать git для отслеживания изменений на центральном сервере, а не на реальных серверах, чтобы у каждого администратора была рабочая копия. конфигурации.
источник
--author
Конечно, это возможно, но люди не используют это в своем обычном рабочем процессе, потому что это слишком много для написания. Ваша вторая идея использовать sudo: Я один из тех, кто считает sudo вредным и предпочитает использовать ssh root-доступ только с ssh-ключами. И да, мы доверяем нашим администраторам.sudo
вы заставляете пользователя вводить пароль (даже если он использует ключ ssh для входа в систему как пользователь), и вы можете контролировать, что пользователь может выполнять, и, в основном, у вас есть контрольный журнал того, кто что сделал. Но каждый имеет право на собственное мнение.sudo
чтобы заставить пользователя вводить пароль для каждой команды (timestamp_timeout = 0
). Возможно, не подходит для разработки и постановки ящиков, но, безусловно, подходит для производства. ИМХО, основываясь на консенсусе SF, вы должны пересмотреть свои взглядыsudo
. Одной из замечательных особенностей SF является наличие сообщества сверстников, которые действительно знают свое дерьмо :-).С помощью putty вы можете установить это в «Соединение -> Данные -> Переменные среды».
Они также присутствуют после «
su
» для root.источник
Если вам случится подготовить учетные записи пользователей на ваших серверах с помощью ключей ssh, вы можете фактически прикрепить переменные среды к авторизованным ключам во время установки - например, в ~ bob / .ssh / авторизованные_коды
Таким образом, когда пользователи SSH автоматически устанавливают эти envs, им не нужно пересылать их с локального клиента. Бонусные баллы, если у вас уже есть эта информация и вы генерируете конфиг авторизованного_ключа из системы управления конфигами.
Примечание: вышеперечисленное требует
PermitUserEnvironment yes
в sshd_configисточник
Если вы используете,
sudo
и ваш не-root пользователь смонтировал свой домашний каталог:git -c include.path=<file>
будет включать конфигурацию в<file>
.Чтобы автоматически извлекать файлы конфигурации моего пользователя без полномочий root, я использую
bash
псевдоним:Тогда я использую
gsudo
вместоgit
обоих:Убедитесь, что конфиг действительно импортируется:
источник
В дополнение к ответу coredump вы также можете установить эти параметры в
.git/config
файле в вашей рабочей копии хранилища (вручную или с помощьюgit config
команды).Смотрите
man git-config
для получения дополнительной информации о команде и классные вещи, которые вы можете сделать с ней.источник