리포지토리 일관성 검사
Gitaly는 리포지토리 일관성 검사를 수행합니다:
- 리포지토리 검사를 트리거할 때.
- 미러링된 리포지토리에서 변경 사항을 가져올 때.
- 사용자가 리포지토리에 변경 사항을 푸시할 때.
이러한 일관성 검사는 리포지토리에 모든 필요한 객체가 있고 이 객체들이 유효한 객체인지 확인합니다. 이들은 다음과 같이 분류될 수 있습니다:
- 리포지토리가 손상되지 않도록 보장하는 기본 검사. 여기에는 연결성 검사 및 객체를 구문 분석할 수 있는지 확인하는 검사가 포함됩니다.
- Git의 이전 보안 관련 버그를 악용하기에 적합한 객체를 인식하는 보안 검사.
- 모든 객체 메타데이터가 유효한지 확인하는 외관 검사. 이전 Git 버전 및 다른 Git 구현은 잘못된 메타데이터를 가진 객체를 생성했지만, 더 최신 버전은 이러한 형식이 잘못된 객체를 해석할 수 있습니다.
일관성 검사에서 실패한 잘못된 객체를 제거하려면 리포지토리의 내역을 다시 작성해야 하며, 이는 종종 불가능합니다. 따라서 Gitaly는 기본적으로 리포지토리 일관성에 부정적인 영향을 미치지 않는 여러 가지 외관 문제에 대한 일관성 검사를 비활성화합니다.
기본적으로, Gitaly는 Git 클라이언트에서 알려진 취약점을 유발할 수 있는 객체를 배포하지 않기 위해 기본 또는 보안 관련 검사를 비활성화하지 않습니다. 이는 악의적인 의도가 없는 프로젝트라도 이러한 객체가 포함된 리포지토리 가져오기를 제한합니다.
리포지토리 일관성 검사 재정의
인스턴스 관리자는 일관성 검사를 통과하지 않는 리포지토리를 처리해야 하는 경우 일관성 검사를 재정의할 수 있습니다.
Linux 패키지 설치의 경우, /etc/gitlab/gitlab.rb
를 편집하고 다음 키를 설정합니다 (이 예에서는 hasDotgit
일관성 검사를 비활성화하기 위해):
-
GitLab 15.10 이후:
ignored_blobs = "/etc/gitlab/instance_wide_ignored_git_blobs.txt" gitaly['configuration'] = { # ... git: { # ... config: [ # 파일을 하나의 축약되지 않은 SHA-1로 채우세요. # See https://git-scm.com/docs/git-config#Documentation/git-config.txt-fsckskipList { key: "fsck.skipList", value: ignored_blobs }, { key: "fetch.fsck.skipList", value: ignored_blobs }, { key: "receive.fsck.skipList", value: ignored_blobs }, { key: "fsck.hasDotgit", value: "ignore" }, { key: "fetch.fsck.hasDotgit", value: "ignore" }, { key: "receive.fsck.hasDotgit", value: "ignore" }, { key: "fsck.missingSpaceBeforeEmail", value: "ignore" }, ], }, }
-
GitLab 15.3에서 GitLab 15.9까지:
ignored_blobs = "/etc/gitlab/instance_wide_ignored_git_blobs.txt" gitaly['gitconfig'] = [ # 파일을 하나의 축약되지 않은 SHA-1로 채우세요. # See https://git-scm.com/docs/git-config#Documentation/git-config.txt-fsckskipList { key: "fsck.skipList", value: ignored_blobs }, { key: "fetch.fsck.skipList", value: ignored_blobs }, { key: "receive.fsck.skipList", value: ignored_blobs }, { key: "fsck.hasDotgit", value: "ignore" }, { key: "fetch.fsck.hasDotgit", value: "ignore" }, { key: "receive.fsck.hasDotgit", value: "ignore" }, { key: "fsck.missingSpaceBeforeEmail", value: "ignore" }, ]
-
GitLab 15.2 및 이전 버전 (유산 방법):
ignored_git_errors = [ "hasDotgit = ignore", "missingSpaceBeforeEmail = ignore", ] omnibus_gitconfig['system'] = { # 파일을 하나의 축약되지 않은 SHA-1로 채우세요. # See https://git-scm.com/docs/git-config#Documentation/git-config.txt-fsckskipList "fsck.skipList" => ignored_blobs, "fetch.fsck.skipList" => ignored_blobs, "receive.fsck.skipList" => ignored_blobs, "fsck" => ignored_git_errors, "fetch.fsck" => ignored_git_errors, "receive.fsck" => ignored_git_errors, }
자체 컴파일 설치의 경우, Gitaly 구성(gitaly.toml
)을 편집하여 동등한 작업을 수행합니다:
[[git.config]]
key = "fsck.hasDotgit"
value = "ignore"
[[git.config]]
key = "fetch.fsck.hasDotgit"
value = "ignore"
[[git.config]]
key = "receive.fsck.hasDotgit"
value = "ignore"
[[git.config]]
key = "fsck.missingSpaceBeforeEmail"
value = "ignore"
[[git.config]]
key = "fetch.fsck.missingSpaceBeforeEmail"
value = "ignore"
[[git.config]]
key = "receive.fsck.missingSpaceBeforeEmail"
value = "ignore"
[[git.config]]
key = "fsck.skipList"
value = "/etc/gitlab/instance_wide_ignored_git_blobs.txt"
[[git.config]]
key = "fetch.fsck.skipList"
value = "/etc/gitlab/instance_wide_ignored_git_blobs.txt"
[[git.config]]
key = "receive.fsck.skipList"
value = "/etc/gitlab/instance_wide_ignored_git_blobs.txt"
비활성화된 검사
Gitaly는 보안이나 Gitaly 클라이언트에 영향을 주지 않는 특정 형식이 잘못된 특성을 가진 리포지토리와 여전히 작업할 수 있도록 Gitaly에서 기본적으로 일부 미용 검사를 비활성화합니다.
전체 일관성 검사의 목록은 Git 문서를 참조하세요.
badTimezone
badTimezone
검사는 Git의 버그로 인해 사용자가 잘못된 시간대의 커밋을 생성하게 되었기 때문에 비활성화되었습니다. 그 결과, 일부 Git 로그에는 사양과 일치하지 않는 커밋이 포함되어 있습니다. Gitaly가 수신된 packfiles
에서 기본적으로 fsck
를 실행하기 때문에, 이러한 커밋을 포함한 모든 푸시는 거부될 것입니다.
missingSpaceBeforeDate
missingSpaceBeforeDate
검사는 서명이 메일과 날짜 사이에 공백이 없거나 날짜가 완전히 누락된 경우 git-fsck(1)
가 실패하기 때문에 비활성화되었습니다. 이는 다양한 문제로 인해 발생할 수 있으며, 문제를 일으키는 Git 클라이언트가 포함될 수 있습니다.
zeroPaddedFilemode
zeroPaddedFilemode
검사는 이전 Git 버전에서 일부 파일 모드를 제로 패딩하기 때문에 비활성화되었습니다. 예를 들어, 파일 모드가 40000
인 대신에 트리 객체는 파일 모드를 040000
으로 인코딩했을 것입니다.