Виправте імена користувачів під час відстеження / etc / у сховищі git та виконуючи їх як root


13

Ми використовуємо git для відстеження змін /etc/на наших серверах.

Адміністратори працюють як root під час зміни файлів у / etc /, і тому їхні зобов'язання мають автора

root <root@machinename>

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

Що ми можемо зробити, щоб отримати справжні імена адміністратора в журналі git? Я не думаю, що зберігати локальний клон сховища є здійсненним, оскільки ми часто змінюємось інтерактивно, поки щось не спрацює, і цикл зміни-фіксування-натискання-побачення помилки не допоможе тут.


Як власне корінь, або sudo'd корінь?
Декадо

Наразі фактичний корінь (ssh root @ або "su", no sudo)
cweiske

Використовуйте etckeeper, він піклується про такі дивні хетчі, як це у версії / тощо. Також почніть використовувати облікові записи користувачів та sudo.
Калеб

Відповіді:


12

Автор мерзотник і ім'я комміттер можуть впливати на змінні оточення 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_*
    

Voila - git commitяк корінь у /etc/призводить до:

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

У випадку, якщо сервер за замовчуванням вийде через деякий час у майбутньому: http://cweiske.de/tagebuch/carry-git-settings.htm


5

По-перше, і це не стосується вашого питання, я б закликав вас терміново припинити використовувати 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змінними, ідентифікуючи кожен по-різному на комітах. Не дуже практично, але ви можете навіть автоматизувати це за допомогою сценаріїв.

EDIT: Зрозуміло, ще кращим підходом, який призначив @ScottPack, було б використання системи управління конфігурацією типу Puppet або Chef та використання git для відстеження змін на центральному сервері, а не на реальних серверах, щоб кожен адміністратор міг мати робочу копію конфігурації.


--authorМожливо, звичайно, але люди не використовують це у своєму звичайному робочому процесі, оскільки писати занадто багато. Що стосується вашої другої ідеї використовувати sudo: я одна з тих, хто вважає sudo шкідливим і скоріше використовує ssh root-доступ лише за допомогою ssh-ключів. І так, ми довіряємо нашим адміністраторам.
cweiske

5
@cweiske чому ти вважаєш судо шкідливим?
coredump

1
@cweiske Ви розглядали сценарій обгортки, який допитує комітента життєвої інформації (хто вони, що вони змінили, чому зміни були внесені, номер квитка, якщо це застосовується)? На моєму останньому місці працевлаштування була подібна система (на основі CVS) для змін у DNS, із обгортками, що застосовують політику - працює напрочуд добре.
voretaq7

4
@cweiske Я не згоден ні з твоїм оцінкою. Ви можете використовувати SSH агент для кешування пароля ключа SSH і бездумно увійти в кореневій машині, або просто використовувати просту фразу або один і той же пароль на вашому комп'ютері , ніж кореневої ключової фрази, в той час як з sudoвас змусити користувача ввести пароль (навіть якщо він використовує ключ ssh для входу в систему як свій користувач), і ви можете контролювати, що користувач може виконати, і в основному у вас є аудиторський слід того, хто що робив. Але кожен має право на власну думку.
coredump

2
Ви також можете налаштувати sudoзмусити користувача ввести пароль для кожної команди ( timestamp_timeout = 0). Можливо, не підходить для розробки та постановки ящиків, але, безумовно, підходить для виробництва. IMHO, виходячи з консенсусу SF, вам слід переосмислити свої погляди на sudo. Однією з чудових речей щодо SF є наявність спільноти однолітків, які справді знають свою sh * t :-).
Белмін Фернандес

3

За допомогою шпаклівки ви можете встановити це в розділі "З'єднання -> Дані -> Змінні середовища".

Вони також є присутніми після " su" кореневого використання.


3

Якщо ви надаєте облікові записи користувачів на своїх серверах за допомогою ssh-ключів, ви можете фактично приєднати змінні середовища до дозволених ключів під час налаштування - наприклад, у ~ bob / .ssh / pooblasti_keys

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

Таким чином, коли користувачі SSH у них автоматично встановлюють ці налаштування оточення - немає необхідності пересилати їх з локального клієнта. Бонусні бали, якщо ви вже маєте цю інформацію та генеруєте config_keys-конфігурації з системи управління конфігураціями.

Примітка. Вищезазначене вимагає PermitUserEnvironment yesв sshd_config


1

Якщо ви користуєтесь, sudoа у некористувального користувача встановлений домашній каталог:

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

Для автоматичного витягування конфігураційних файлів мого некористувача, я використовую bashпсевдонім:

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

Тоді я використовую gsudoзамість gitобох:

  • Запустити як корінь
  • Мати доступ до всіх некористувальних налаштувань git користувача

Перевірте, чи конфігурація справді імпортується:

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

0

На додаток до відповіді coredump, ви також можете встановити ці параметри у .git/configфайлі у вашій робочій копії сховища (вручну або за допомогою git configкоманди.

Докладнішу man git-configінформацію про команду та цікаві речі ви можете зробити з нею.


Це працює лише в тому випадку, якщо один адміністратор здійснює репортаж на цій машині, але він не працює з кількома адміністраторами.
cweiske

Правда - це більше підходить для ситуації, коли у вас є центральне сховище, і люди клонують і тягнуть / підштовхують до цього репо.
voretaq7
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.