GIT - 커밋에 서명하는 방법과 이유

Git - 서명 커밋 방법 및 이유



요약



항상 git 커밋에 서명해야 합니다. Why?

커밋에 서명하는 이유



git 커밋은 사용자에게 매우 쉽게 참조됩니다. 전 세계 누구나 ​​다른 이름으로 커밋을 푸시할 수 있습니다. 참조는 user.email과 함께 커밋 메시지에서 수행됩니다.

당신은 자신을 시도 할 수 있습니다. 선택한 폴더에 새 리포지토리를 생성하기만 하면 됩니다.

로컬에 git 저장소를 생성해 봅시다.

mkdir sign_commits
cd sign_commits
git init




먼저 현재 전역 설정을 확인하겠습니다.

$ git config --global user.email
[email protected]


로컬 git repo 설정과 비교합니다.

git config user.email


그것들은 동일합니다. 이제 로컬 git repo 설정을 변경할 수 있습니다.

git config user.email '[email protected]'


비고 git config <--global> --edit를 사용하여 편집기에서 모든 구성 값을 편집할 수도 있습니다.

이제 현재 설정을 확인하고 전역 설정과 비교해 보겠습니다.

git config user.email
git config --global user.email


그것들이 다르다는 것을 알 수 있습니다. 이것은 현재 컨텍스트에 대한 가치를 제공하지 않습니다.
하지만 전역 설정을 건드리지 않는지 확인하고 싶었습니다.



이제 커밋을 생성하고 히스토리를 확인해보자.

echo "# git sign commits" >> README.md
git add .
git commit -m "doc(): add some super nice docs"
git log




이제 사용자 이름과 메일을 변경하고 다른 커밋을 수행해 보겠습니다.

git config user.email '[email protected]'
git config user.name 'fake me'
echo "if the account exists e.q. on github.com the commit will be assigned to that person" >> README.md
git add .
git commit -m "doc(): add some super nice docs"
git log




두 번째 커밋이 메일 주소[email protected]로 가짜 나를 할당한 것을 볼 수 있습니다.
github.com을 git provider로 사용 중이고 커밋을 푸시하고 기존 사용자에게 메일 주소[email protected]가 등록되어 있으면 커밋이 해당 사용자에게 할당됩니다.

보시다시피 다른 사람의 이름으로 커밋하는 것은 매우 쉽습니다.
예를 들면? 다음은 linux is deleted 이라고 말하는 가짜 Linus Torvalds의 장난입니다.

상상할 수 있듯이 장난만 있는 것은 아닙니다. 이것은 보안 문제입니다. github의 오픈 소스 프로젝트 팀에서 작업하고 있다고 상상해보십시오. 팀원(가짜)이 풀 리퀘스트를 여는 중입니다. 당신은 원래 팀 동료가 훌륭한 코더라는 것을 알고 있으며 변경 사항을 자세히 확인하지 않고 메인 브랜치에 병합하지 않습니다. 이것은 분명히 공격 벡터입니다. 예방하는 방법? 오늘 커밋 서명 시작

커밋에 서명하는 방법



GPG로 git 커밋에 서명할 수 있습니다.
먼저 가짜 변경 사항을 되돌립니다.

git config --user.name 'john doe'
git config --user.email '[email protected]'


이제 gpg 키를 생성해야 합니다.

gpg --gen-key


대화 상자를 따라 O로 저장합니다.
이제 Key-id를 가져와서 git config에 추가할 수 있습니다.

$ gpg --list-key $(git config user.email)

$ git config [--global] user.signingkey <key_id>



이제 -S 플래그로 커밋에 서명하거나 git 설정에 추가하여 기본 동작으로 만들 수 있습니다.

git config [--global] commit.gpgsign true


이제 변경된 내용을 확인하겠습니다. 먼저 서명된 커밋을 만들고 서명을 확인합니다.

echo "now the commits are signed" >> README.md
git add .
git commit -S -m "doc(): now with signed commit :star:"
git log --show-signatur




이제 git 공급자가 서명을 확인할 수 있도록 git 공급자 설정에 키도 추가해야 합니다.

추가 정보


  • github sign commits
  • git sign commits

  • 좋은 웹페이지 즐겨찾기