Linuxパッケージの署名
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
弊社では、さまざまなOSパッケージを共有するために、https://packages.gitlab.comのPackagecloudインスタンスを使用しています。
このインスタンスは、さまざまな暗号学的な方法を使用して、これらのパッケージの整合性を確保しています。
パッケージリポジトリのメタデータ署名キー
パッケージクラウドインスタンス上のAPTおよびYUMリポジトリは、GPGキーを使用してメタデータに署名します。このキーは、インストール手順で指定されたリポジトリセットアップスクリプトによって自動的にインストールされます。
現在の署名キー
| キーの属性 | 値 |
|---|---|
| 名前 | GitLab B.V. |
| メール | packages@gitlab.com |
| コメント | package repository signing key |
| フィンガープリント | F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F |
| 有効期限 | 2026-02-27 |
このキーは2020-04-06から有効です。
このキーの有効期限は、2024-03-01から2026-02-27に延長されました。2024-03-01の有効期限が発生した場合は、以下の手順に従ってください。
パッケージクラウドはapt-keyを使用しましたが、これは非推奨です。TurnKey Linuxなど、一部のLinuxディストリビューションから手動でインストールまたは設定されたリポジトリは、Debianパッケージソースリストのsigned-byサポートをすでに使用しています。
apt-keyまたはsigned-byを使用しているかどうかを判断します:grep 'deb \[signed-by=' /etc/apt/sources.list.d/gitlab_gitlab-?e.listこのコマンドを実行した場合:
- 行が返された場合は、
apt-keyよりも優先されるsigned-byを使用しています。 - 行がない場合は、
apt-keyを使用しています。
- 行が返された場合は、
signed-byを使用している場合は、このスクリプトをrootとして実行して、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 doneapt-keyを使用している場合は、このスクリプトをrootとして実行して、GitLabリポジトリの公開キーを更新します:apt-key del 3F01618A51312F3F curl -s "https://packages.gitlab.com/gpg.key" | apt-key add - apt-key list 3F01618A51312F3F
YUMとDNFにはわずかな違いがありますが、基盤となる設定は同じです:
リポジトリキーリングから既存のキーを削除します:
for pubring in /var/cache/dnf/*gitlab*/pubring do gpg --homedir $pubring --delete-key F6403F6544A38863DAA0B6E03F01618A51312F3F doneキーの確認を求めるリポジトリデータとキャッシュを更新します:
dnf check-update
最新の署名キーをフェッチする
最新のリポジトリ署名キーをフェッチするには:
キーをダウンロードします:
curl "https://packages.gitlab.com/gpg.key" -o /tmp/omnibus_gitlab_gpg.keyキーをインポートします:
sudo apt-key add /tmp/omnibus_gitlab_gpg.keysudo rpm --import /tmp/omnibus_gitlab_gpg.key新しいキーがOSによって適切に認識されるために必要な権限を持っていることを確認してください。これは
644である必要があります。権限を設定するには、次を実行します:chmod 644 <keyfile>
前のキー
| シリアル番号 | キーID | 有効期限 |
|---|---|---|
| 1 | 1A4C 919D B987 D435 9396 38B9 1421 9A96 E15E 78F4 | 2020-04-15 |
パッケージの署名
このセクションでは、サポートされている場合は手動および自動で、GitLabで生成されたパッケージの署名を検証する方法について説明します。
現在のパッケージ署名キーの詳細
| キーの属性 | 値 |
|---|---|
| 名前 | GitLab, Inc. |
| メール | support@gitlab.com |
| フィンガープリント | 98BF DB87 FCF1 0076 416C 1E0B AD99 7ACC 82DD 593D |
| 有効期限 | 2026-02-14 |
古いパッケージ署名キー
| シリアル番号 | キーID | 失効日 | 有効期限 | ダウンロード場所 |
|---|---|---|---|---|
| 1 | 9E71 648F 3A35 EA00 CAE4 43E7 1155 1132 6BA7 34DA | 2025-02-14 | 2025-07-01 | https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey/gitlab-gitlab-ee-3D645A26AB9FBD22.pub.gpg |
RPMベースのディストリビューション
RPM形式には、GPG署名機能の完全な実装が含まれており、この形式に基づくパッケージ管理システムと完全に統合されています。
GitLabの公開キーが存在することを確認します。
RPMベースのLinuxディストリビューションでパッケージを検証するには、GitLab, Inc.の公開キーがrpmキーチェーンに存在することを確認します。例:
rpm -q gpg-pubkey-82dd593d-67aefdd8 --qf '%{name}-%{version}-%{release} --> %{summary}'このコマンドは、次のいずれかを生成します:
- 公開キーに関する情報。
- キーがインストールされていないというメッセージ。例:
gpg-pubkey-f27eab47-60d4a67e is not installed。
キーが存在しない場合は、インポートします。例:
rpm --import https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey/gitlab-gitlab-ee-CB947AD886C8E8FD.pub.gpg署名チェックがアクティブかどうかを確認します
パッケージ署名チェックが既存のインストールでアクティブかどうかを確認するには、リポジトリファイルのコンテンツを比較します:
リポジトリファイルが存在するかどうかを確認します。
file /etc/yum.repos.d/gitlab_gitlab-ce.repo署名チェックがアクティブであることを確認します。
grep gpgcheck /etc/yum.repos.d/gitlab_gitlab-ce.repoこのコマンドは、次のように出力する必要があります:repo_gpgcheck=1 gpgcheck=1または
repo_gpgcheck=1 pkg_gpgcheck=1
ファイルが存在しない場合は、リポジトリがインストールされていません。ファイルが存在するにもかかわらず、gpgpcheck=0という出力が表示される場合は、その値を編集して有効にする必要があります。
Linuxパッケージrpmファイルを検証する
公開キーが存在することを確認したら、パッケージを検証します:
rpm --checksig gitlab-xxx.rpmDebianベースのディストリビューション
Debianパッケージ形式には、パッケージに署名する方法が正式には含まれていません。弊社ではdebsig標準を実装しました。これは十分にドキュメント化されていますが、ほとんどのLinuxディストリビューションではデフォルトで有効になっていません。
次のいずれかの方法で、Linuxパッケージdebファイルを検証できます:
- 必要な
debsigsポリシーとキーリングを設定した後で、debsig-verifyを使用します。 - 含まれている
_gpgoriginファイルをGnuPGで手動で確認します。
debsigsを設定
debsigsのポリシーとキーリングの設定は複雑になる可能性があるため、設定用のgitlab-debsigs.shスクリプトを提供しています。このスクリプトを使用するには、公開キーとスクリプトをダウンロードする必要があります。
curl -JLO "https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey/gitlab-gitlab-ee-CB947AD886C8E8FD.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-ee-CB947AD886C8E8FD.pub.gpgdebsig-verifyで確認する
debsig-verifyの使用方法:
debsig-verifyパッケージをインストールします。debsig-verifyを実行してファイルを検証します:debsig-verify gitlab-xxx.deb
GnuPGで確認する
debsig-verifyによってインストールされた依存関係をインストールしたくない場合は、代わりにGnuPGを使用できます:
パッケージ署名公開キーをダウンロードしてインポートします:
curl -JLO "https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey/gitlab-gitlab-ee-CB947AD886C8E8FD.pub.gpg" gpg --import gitlab-gitlab-ee-CB947AD886C8E8FD.pub.gpg署名ファイル
_gpgoriginを抽出します:ar x gitlab-xxx.deb _gpgorigin署名がコンテンツと一致することを確認します:
ar p gitlab-xxx.deb debian-binary control.tar.xz data.tar.xz | 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
検証がgpg: BAD signature from "GitLab, Inc. <support@gitlab.com>" [unknown]で失敗した場合は、以下を確認してください:
- ファイル名が正しい順序で記述されている。
- ファイル名がアーカイブのコンテンツと一致する。
使用するLinuxディストリビューションによっては、アーカイブのコンテンツのサフィックスが異なる場合があります。これは、コマンドをそれに応じて調整する必要があることを意味します。アーカイブのコンテンツを確認するには、ar t gitlab-xxx.debを実行します。
たとえば、Ubuntu Focal(20.04)の場合:
$ ar t gitlab-ee_17.4.2-ee.0_amd64.deb
debian-binary
control.tar.xz
data.tar.xz
_gpgorigin