kb/security
Двухфакторная аутентификация на аккаунте, Dependabot для security alerts и обновления зависимостей, code scanning через CodeQL, secret scanning для случайно закоммиченных ключей, подписанные коммиты через GPG/SSH.
Файл в корне репо со списком паттернов: что Git должен полностью игнорировать. Не путать с staging: уже tracked файлы .gitignore не трогает. Главная защита от случайного коммита секретов и мусора.
Современная замена устаревшему `git filter-branch`. Переписывает историю на месте: удаляет файлы, меняет email авторов, заменяет строки. Используется для удаления секретов или огромных бинарей, которые попали в репо.
Коммиты в Git можно подписывать GPG-ключом (или SSH-ключом начиная с Git 2.34). Подпись криптографически доказывает, что в момент коммита у подписавшего был доступ к private key. Связь «ключ → конкретный человек» обеспечивается уже не Git, а проверкой ключа (web of trust в OpenPGP, подтверждение через GitHub-аккаунт и т.п.) - сам Git не проверяет, кто ты есть.
SSH-ключ - пара файлов: приватный (у тебя) и публичный (на сервере). Аутентификация без пароля при push/clone. По безопасности SSH-key с passphrase + ssh-agent и HTTPS + scoped/expiring PAT в credential helper примерно сопоставимы - оба упираются в защиту локального секрета. SSH чаще выбирают за удобство и отсутствие ротации. ed25519 - современный дефолт, RSA 4096 - legacy-совместимость.
Регулярно сканировать репо на случайно закоммиченные секреты (API-ключи, пароли, токены). Главные инструменты: gitleaks, detect-secrets, trufflehog. Лучше - заранее, в pre-commit. После утечки - ротация ключа неотменимо, чистка истории необязательно.