Безопасность

Помощник учётных данных

Gitcito имеет дело с тремя разными видами секретов, и люди вполне обоснованно считают, что это одно и то же:

Кто хранит
Токены API хостинга — пул-реквесты, задачи, проверки CI Gitcito, в связке ключей ОС
Транспорт git@… Ваш SSH-ключ, через системный ssh-агент
Транспорт https:// Собственный credential helper git

Третий никто не считает функцией — ровно до того момента, когда он ломается, и тогда рождаются две самые частые жалобы в git: почему он опять у меня спрашивает? и почему он всё ещё отправляет токен, который я отозвал?

⌘K → Помощник учётных данных.

Настроенный помощник, правила для отдельных хостов и предупреждение о файле в открытом виде

Что вы видите

Каждый настроенный credential.helper — в той области, откуда он пришёл: system, global, затем этот репозиторий. Помощники складываются: git опрашивает их по очереди, и помощник уровня репозитория не заменяет глобальный.

Каждый проверяется на вашей машине:

Метка Что означает
готов Программа-помощник существует и запустится
не установлен Настроен, но программы нет — каждый запрос сводится к тому, что вы снова набираете пароль руками
пароли в обычном файле Помощник store (см. ниже)

Правила для конкретных хостов перечисляют секции credential.<url>.*. Они перекрывают общую настройку для тех URL, которым соответствуют, и обычно именно они отвечают на вопрос «почему вот этот хост ведёт себя иначе».

Как выбрать

Помощник Куда попадает пароль
osxkeychain Связка ключей macOS — зашифровано, для каждого пользователя отдельно
manager Git Credential Manager (Windows, кроссплатформенный)
wincred Диспетчер учётных данных Windows
libsecret Служба секретов Linux (GNOME Keyring, KWallet)
cache Память, на 15 минут. На диск ничего не пишется
store Обычный файл в вашем домашнем каталоге. Без шифрования

Gitcito предлагает то, что действительно установлено на этой машине, отмечает подходящий для вашей ОС и делает остальные неактивными.

Область имеет значение. Для всех репозиториев пишет в вашу глобальную конфигурацию — почти всегда именно это вам и нужно; только для этого репозитория пригодится для того редкого репозитория, который аутентифицируется где-то ещё.

Помощник store и файл ~/.git-credentials

store пишет строки вида https://user:password@host в ~/.git-credentials, открытым текстом, вообще без какого-либо шифрования. Прочитать его может всё, что запускается от вашего имени: скрипт, postinstall какой-нибудь зависимости, что угодно.

Если такой файл существует, эта страница сообщает об этом и считает записи. Она никогда их не показывает — весь смысл в счётчике, а прочитать содержимое, чтобы его отобразить, было бы той же самой ошибкой.

Если вы нашли такой файл и не собирались его заводить: выберите здесь настоящий помощник, затем удалите файл и один раз пройдите аутентификацию заново.

Как забыть сохранённые учётные данные

Когда токен отозван или заменён, помощник продолжает подсовывать старый, и каждый пуш падает с 401, который ничего не объясняет. Забыть просит настроенный помощник стереть свою запись для этого хоста — это git credential reject, штатный документированный путь самого git.

По дороге ничего не читается: Gitcito никогда не вызывает git credential fill — команду, которая напечатала бы действующий пароль в стандартный вывод.

Следующий пуш спросит вас один раз, и помощник сохранит новый ответ.

Ограничения, о которых стоит знать

  • Это хранилище git, а не Gitcito. Меняя его, вы меняете и поведение своего терминала — в этом и смысл, но знать об этом стоит заранее.
  • Помощники системного уровня показываются, но не редактируются. Они живут в конфигурации, писать в которую может только администратор.
  • Gitcito не может перечислить содержимое помощника. Ни один API учётных данных не отдаёт этого, не выдав сами секреты, поэтому диалог сообщает конфигурацию и стирает записи по запросу — и ничего больше.
  • Токен, который вы отдали Gitcito, — это отдельная история. Отзыв одного не затрагивает другой; про сторону связки ключей см. безопасность.

См. также: Безопасность · SSH-ключи · Синхронизация

Улучшить этот перевод на GitHub