omnibus-gitlab 패키지와 관련된 암호화 세부 정보

Tier: Free, Premium, Ultimate Offering: Self-Managed

GitLab은 다양한 OS 패키지를 제공하고 이러한 패키지의 무결성을 보장하기 위해 다양한 암호화 방법을 사용하는데, 이를 공유하기 위해 packagecloud 인스턴스를 사용합니다. 본 페이지는 이러한 방법에 대한 세부 정보를 제공합니다.

패키지 리포지터리의 메타데이터 서명 키

GitLab packagecloud 인스턴스의 apt 및 yum 리포지터리는 메타데이터를 서명하기 위해 GPG 키를 사용합니다. 이 키는 설치 지침에서 지정된 리포 설정 스크립트에 의해 자동으로 설치됩니다.

현재 키

키 속성
이름 GitLab B.V.
이메일 packages@gitlab.com
코멘트 패키지 리포지터리 서명 키
지문 F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F
만료일 2026-02-27

이 키는 2020-04-06부터 활성화되었습니다. 이미 GitLab apt/yum 패키지 리포지터리를 구성한 사용자들은 리포지터리에서 패키지를 계속 설치하려면 이 키를 다시 신뢰할 수 있는 키 링에 추가해야 합니다. 여기에 대한 설명은 다음과 같습니다.

이 키의 만료일은 2024-03-01에서 2026-02-27로 연장되었습니다. 2024-03-01에 만료로 인한 불만을 만난다면, 업데이트된 공개 키 내용을 포함시키기 위해 만료 연장 후 키 업데이트 단계를 수행하세요.

만료 연장 후 키 업데이트

Debian 기반 배포판의 경우:

PackageCloud는 일반적으로 apt-key를 사용했으며, 향후에는 사용되지 않게 될 것입니다. 매뉴얼으로 설치된 또는 구성된 리포지터리, 예를 들어 TurnKey Linux와 같은 일부 배포판에서는 이미 Debian 패키지 소스 디렉터리 내의 signed-by 지원을 사용하고 있습니다.

  1. apt-key 또는 signed-by 기능을 사용 중인지 확인하세요:

     grep 'deb \[signed-by=' /etc/apt/sources.list.d/gitlab_gitlab-?e.list
    
    • grep 명령어가 어떤 행을 반환하면 signed-by 기능을 사용 중입니다. 이는 apt-key 사용보다 우선됩니다.
    • 이 명령어가 반환된 행이 없다면 apt-key 기능을 사용 중입니다.
  2. signed-by의 경우, 아래의 스크립트(루트로 실행)는 GitLab 리포지터리의 공개 키를 업데이트합니다:

     awk '/deb \[signed-by=/{
           pubkey = $2;
           sub(/\[signed-by=/, "", pubkey);
           sub(/\]$/, "", pubkey);
           print pubkey
         }' /etc/apt/sources.list.d/gitlab_gitlab-?e.list | \
       while read line; do
         curl -s "https://packages.gitlab.com/gpg.key" | gpg --dearmor > $line
       done
    
  3. apt-key의 경우, 아래의 스크립트(루트로 실행)는 GitLab 리포지터리의 공개 키를 업데이트합니다:

     apt-key del 3F01618A51312F3F
     curl -s "https://packages.gitlab.com/gpg.key" | apt-key add -
     apt-key list 3F01618A51312F3F
    

RPM 기반 배포판의 경우:

Yum와 Dnf 간에 약간의 차이가 있지만, 기본 구성은 동일합니다.

  1. 리포지터리 키링에서 기존 키를 제거합니다:

     for pubring in /var/cache/dnf/gitlab_gitlab-?e-*/pubring
     do
       gpg --homedir $pubring --delete-key F6403F6544A38863DAA0B6E03F01618A51312F3F
     done
    
  2. 리포지터리 데이터/캐시를 업데이트하고 키를 확인합니다:

     dnf check-update
    

2020-04-06 이전에 새 키 가져오기

# 새 키 다운로드
curl "https://gitlab-org.gitlab.io/omnibus-gitlab/gitlab_new_gpg.key" -o /tmp/omnibus_gitlab_gpg.key

# 키 가져오기
## Debian/Ubuntu/Raspbian
sudo apt-key add /tmp/omnibus_gitlab_gpg.key

# CentOS/OpenSUSE/SLES
sudo rpm --import /tmp/omnibus_gitlab_gpg.key

2020-04-06 이후에 새 키 가져오기

최신 리포지터리 서명 키를 가져오기 위해 사용자는 설치 페이지에서 언급된대로 curl 명령어를 다시 실행할 수 있습니다. 이렇게 하면 새 키를 가져와 사용자의 키링에 추가합니다.

또는 사용자는 다음 명령어를 사용하여 새 키를 매뉴얼으로 가져와 추가할 수 있습니다.

# 새 키 다운로드
curl "https://packages.gitlab.com/gpg.key" -o /tmp/omnibus_gitlab_gpg.key

# 키 가져오기
## Debian/Ubuntu/Raspbian
sudo apt-key add /tmp/omnibus_gitlab_gpg.key

# CentOS/OpenSUSE/SLES
sudo rpm --import /tmp/omnibus_gitlab_gpg.key

이전 키

일련번호 키 ID 만료일
1 1A4C 919D B987 D435 9396 38B9 1421 9A96 E15E 78F4 2020-04-15

패키지 서명

본 문서에서는 GitLab이 생성한 패키지의 서명을 매뉴얼 및 자동으로 확인하는 방법을 제공할 것입니다.

RPM 기반 배포판

RPM 포맷은 GPG 서명 기능의 완전한 구현을 포함하고 있으며, 따라서 해당 포맷을 기반으로 하는 패키지 관리 시스템과 완전히 통합되어 있습니다. 검증 방법은 두 가지가 있습니다.

GitLab 공개 키의 존재 확인

RPM 기반 배포판에서 패키지를 검증하려면, rpm 도구의 키체인에 GitLab, Inc. 공개 키가 있는지 확인해야 합니다.

rpm -q gpg-pubkey-f27eab47-60d4a67e --qf '%{name}-%{version}-%{release} --> %{summary}'

이는 공개 키에 대한 정보가 표시되거나 gpg-pubkey-f27eab47-60d4a67e가 설치되지 않았습니다를 표시합니다. 키가 존재하지 않으면 아래의 단계를 수행하세요:

rpm --import https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg

서명 확인이 활성화되어 있는지 확인

기존 설치에 패키지 서명 확인이 활성화되어 있는지 확인하는 가장 간단한 방법은 사용 중인 리포지터리 파일의 내용을 비교하는 것입니다.

  • 리포지터리 파일의 존재 여부 확인: /etc/yum.repos.d/gitlab_gitlab-ce.repo 파일을 확인합니다.
  • 서명 확인이 활성화되어 있는지 확인: /etc/yum.repos.d/gitlab_gitlab-ce.repo 파일에 대한 gpgcheck를 확인합니다.

    repo_gpgcheck=1
    gpgcheck=1
    

    또는

    repo_gpgcheck=1
    pkg_gpgcheck=1
    

파일이 존재하지 않으면 리포지터리가 설치되어 있지 않습니다. 파일이 존재하지만 출력이 gpgpcheck=0을 보인다면, 값을 편집하여 활성화해야 합니다.

자동 확인 활성화

rpm 도구 및 관련 패키지 관리자(yum,zypper)는 개입 없이 패키지를 자동으로 확인하는 기능을 직접 지원합니다. 이미 서명된 패키지가 제공되기 시작한 후 자동 리포지터리 구성 스크립트를 사용했다면 추가 조치가 필요하지 않습니다. 서명된 패키지가 제공되기 전에 설치했다면 필요한 변경을 가하거나 설치 페이지에서 찾을 수 있는 자동 리포지터리 구성 스크립트를 다시 실행할 수 있습니다.

Yum (RedHat, CentOS)
  1. 패키지의 GPG 확인 활성화

    sudo sed -i'' 's/^gpgcheck=0/gpgcheck=1/' /etc/yum.repos.d/gitlab_gitlab-ce.repo
    
  2. 패키지 서명 공개 키를 gpgkey 디렉터리에 추가: /etc/yum.repos.d/gitlab_gitlab-ce.repo를 편집하여 gpgkey를 다음과 같이 변경합니다:

    gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
            https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
    
  3. yum에게 리포지터리 캐시를 새로고침하도록 지시

    sudo yum -q makecache -y --disablerepo='*' --enablerepo='gitlab_gitlab-ce'
    
Zypper (SuSE/SLES)
  1. 패키지의 GPG 확인 활성화

    sudo sed -i'' 's/pkg_gpgcheck=0/pkg_gpgcheck=1/' /etc/zypp/repos.d/gitlab_gitlab-ce.repo
    
  2. 패키지 서명 공개 키를 gpgkey 디렉터리에 추가: /etc/zypp/repos.d/gitlab_gitlab-ce.repo를 편집하여 gpgkey를 다음과 같이 변경합니다:

    gpgkey=https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey
            https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
    
  3. 리포지터리를 새로 고치고 키를 가져오도록 zypper에 지시

    sudo zypper --gpg-auto-import-keys refresh gitlab_gitlab-ce
    

매뉴얼 확인

공개 키 확인이 완료된 후, RPM 패키지는 rpm --checksig gitlab-xxx.rpm 명령을 사용하여 매뉴얼으로 확인할 수 있습니다.

DEB 기반 배포

DEB 형식은 공식적으로 패키지에 서명하는 기본 포함 방법이 없습니다. GitLab에서는 대부분의 배포판에서 기본적으로 활성화되어 있지 않은 debsig 표준을 구현하기로 선택했습니다.

매뉴얼 확인

debsigs로 서명된 DEB 패키지의 매뉴얼 확인은 두 가지 방법으로 수행할 수 있습니다: 필요한 debsigs 정책 및 키링을 구성한 후 debsig-verify를 사용하거나 GnuPG로 포함된 _gpgorigin 파일을 매뉴얼으로 확인하는 것입니다.

GnuPG로 매뉴얼 확인

debsig-verify 패키지에는 사용자가 설치하고 싶어하지 않을 수 있는 다양한 의존성이 있습니다. debsig-verify 및 의존성을 설치하지 않고도 debsigs 기반 서명을 확인하려면 사용자는 다음 매뉴얼 단계를 완료할 수 있습니다:

  1. 패키지 서명 공개 키를 다운로드하고 가져오기

    curl -JLO "https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg"
    gpg --import gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
    
  2. 서명 파일(_gpgorigin)을 추출

    ar x gitlab-ce-xxx.deb _gpgorigin
    
  3. 서명이 내용과 일치하는지 확인

    ar p gitlab-xxx.deb debian-binary control.tar.gz data.tar.gz | gpg --verify _gpgorigin -
    

최종 명령어의 출력은 다음과 같아야 합니다:

$ ar p gitlab-xxx.deb debian-binary control.tar.gz data.tar.gz | gpg --verify _gpgorigin -

gpg: Signature made Tue Aug 01 22:21:11 2017 UTC
gpg:                using RSA key DBEF89774DDB9EB37D9FC3A03CFCF9BAF27EAB47
gpg:                issuer "support@gitlab.com"
gpg: Good signature from "GitLab, Inc. <support@gitlab.com>" [unknown]
Primary key fingerprint: DBEF 8977 4DDB 9EB3 7D9F  C3A0 3CFC F9BA F27E AB47
debsigs 구성

debsigs 정책 및 키링을 구성하는 것은 복잡할 수 있으므로 GitLab은 gitlab-debsigs.sh를 구성의 스크립트 방법으로 제공합니다.

이 스크립트를 사용하려면 공개 키와 스크립트를 다운로드해야 합니다.

curl -JLO "https://packages.gitlab.com/gitlab/gitlab-ce/gpgkey/gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg"
curl -JLO "https://gitlab.com/gitlab-org/omnibus-gitlab/raw/master/scripts/gitlab-debsigs.sh"
chmod +x gitlab-debsigs.sh
sudo ./gitlab-debsigs.sh gitlab-gitlab-ce-3D645A26AB9FBD22.pub.gpg
debsig-verify로 확인

debsig-verify를 사용하려면 debsigs 구성 단계를 수행하고 debsig-verify 패키지를 설치해야 합니다.

debsig-verify gitlab-xxx.deb