У меня есть git-сервер, работающий через ssh, и у каждого пользователя есть учетная запись unix в системе.
Учитывая, что два пользователя имеют доступ к репо, как я могу быть уверен, какой пользователь выполнил какую-либо фиксацию, поскольку имя пользователя и электронная почта для фиксации передаются и контролируются клиентом git.
Я обеспокоен тем, что пользователь может попытаться выдать себя за другого, даже если у него одинаковые права авторизации.
Ответы:
Если вас это беспокоит, есть несколько способов решения проблемы.
источник
.git/hooks/update.sample
вдохновение. Пожалуйста, @ сообщите мне, если вы зададите вопрос по этому вопросу в SO, мне это тоже будет интересноЯ вижу два хороших способа получения такой информации. Один из них заключается в увеличении регистрации в самом sshd, а другой - в более глубоком мониторинге репозитория git на диске. Поскольку ни один из них не предоставляет вам необходимую информацию, вы можете сделать и то, и другое и сопоставить данные журнала, используя внешний механизм анализа журнала или по запросу, используя человеческие глаза и временные метки.
SSHD модификации
По умолчанию, как вы, несомненно, видели, вы можете видеть, когда пользователь вошел в систему и откуда, используя журналы аутентификации ssh. То, что вы хотите сделать, это изменить уровень при выходе из sshd. Так что отредактируйте
/etc/ssh/sshd_config
и найдите строку, которая выглядит каки изменить это на
затем перезапустите службу sshd. Это увеличивает уровень протоколирования sshd на 1 шаг, что дает намного больше информации. Посмотрите этот фрагмент моего удаленного доступа после внесения изменений.
Здесь важно отметить два аспекта
При использовании стандартного LogLevel (INFO) sshd не регистрирует ни один из этих элементов. Получение отпечатка ключа - еще один шаг. Вы должны обработать соответствующий
authorized_keys
файл с помощью ssh-keygen как такового.Итак, теперь вы знаете следующую информацию:
Теперь, когда у нас есть способ приписать действия пользователя в определенное время, предполагая, что оба пользователя не вошли в систему одновременно, мы можем начать смотреть на изменения, внесенные в репозиторий.
Мониторинг каталогов с помощью Auditd
Как сказал sysadmin1138, это может быть отличным вариантом использования для подсистемы audd. Если вы не используете дистрибутив на основе RedHat, возможно, есть аналог, но вам придется его найти. Конфигурация для audd довольно интенсивна и содержит много вариантов конфигурации. Чтобы получить представление о некоторых из вариантов, пожалуйста, проверьте этот вопрос на нашем родственном сайте для специалистов по информационной безопасности .
Как минимум, я бы порекомендовал установить так называемый «watch» для каталога на диске, который содержит ваш git-репозиторий. Это дает команду модулю ядра сообщать о попытках выполнить вызовы доступа к файлу, такие как
open()
илиcreat()
, на дескрипторах файлов, указывающих на файлы или каталоги, которые мы перечисляем.Вот пример конфигурации, которая сделает это, и только это. Так что будьте внимательны, чтобы прочитать и понять ваше существующее,
/etc/audit/audit.rules
чтобы правильно интегрировать изменения.источник
Единственный технический подход, который вы можете использовать, - это доверять идентификатору соединения ssh. Затем вы можете принудительно установить, что каждый пользователь отправляет только те коммиты, которые он сделал, проверяя коммитер каждого нового проталкиваемого коммита.
Для того чтобы это было надежным, вы почти наверняка не хотите предоставлять своим пользователям неограниченный доступ к оболочке к тому месту, где находится хранилище; Вы хотели бы обеспечить использование чего-то подобного,
git-shell
иначе ограничения легко обойдутся.Пользователи по-прежнему смогут выдавать себя за других авторов. Вы также можете ограничить это, но это может привести к потере общих рабочих процессов, таких как сбор вишни и перебазировка, и, возможно, даже ветвление (в зависимости от реализации хука), поэтому вы можете не захотеть этого делать.
В какой-то момент, в какой-то степени, вы должны доверять своим разработчикам.
источник
Многие ssh-демоны делают запись
/var/log/audit.log
или что-то подобное, когда получено ssh-соединение. Перекрестная ссылка на этот журнал с коммит-логом должна дать вам представление о том, какой ssh-пользователь использовался для выработки коммита. Это этап аудита, который будет использоваться после проверки для подтверждения.На самом деле приведение правильного ssh-пользователя к соответствующему git-пользователю - один из других ответов здесь.
источник
Если у всех пользователей есть учетные записи оболочки с доступом для записи в хранилище, вы не сможете настроить заслуживающий доверия журнал аудита: они все равно могут изменять хранилище без записи в журнал, и они могут записывать в журнал все, что захотят.
Чтобы иметь возможность доверять журналу аудита, вам нужно будет запретить прямой доступ на уровне файлов к записи в хранилище, вместо этого использовать что-то вроде gitolite (который запускается под собственной учетной записью) для обеспечения доступа к хранилищу.
источник