3.3. GPG를 사용하여 리포지토리 메타데이터 확인
손상된 패키지를 감지하고 방지하려면 DNF 패키지 관리자를 사용하여 RPM 패키지에서 GNU Privacy Guard(GPG) 서명을 확인하고, 리포지토리 메타데이터가 GPG 키로 서명되었는지 확인할 수 있습니다.
키 URL로 gpgkeys
필드를 설정하여 https
를 통해 확인할 gpgkey
를 입력할 수 있습니다. 또는 보안을 개선하기 위해 전체 키를 gpgkeys
필드에 삽입하여 URL에서 키를 가져오는 대신 직접 가져올 수도 있습니다.
사전 요구 사항
- 리포지토리로 사용할 디렉터리가 존재하고 패키지가 포함되어 있습니다.
절차
리포지토리를 생성할 폴더에 액세스합니다.
$ cd repo/
createrepo_c
를 실행하여 RPM 패키지에서 리포지토리를 생성합니다.$ createrepo_c .
repodata가 있는 디렉터리에 액세스합니다.
$ cd repodata/
repomd.xml
파일에 서명합니다.$ gpg -u <_gpg-key-email_> --yes --detach-sign --armor /srv/repo/example/repomd.xml
리포지토리에서 GPG 서명 검사를 활성화하려면 다음을 수행합니다.
-
리포지토리 소스에서
check_repogpg = true
를 설정합니다. 검사를 수행할
gpgkey
를 입력합니다.https
를 통해 키를 사용할 수 있는 경우 키 URL을 사용하여gpgkeys
필드를 설정합니다. 필요한 만큼 URL 키를 추가할 수 있습니다.다음은 예제입니다.
check_gpg = true check_ssl = true id = "signed local packages" name = "repository_name" type = "yum-baseurl" url = "https://local/repos/projectrepo/" check_repogpg = true gpgkeys=["https://local/keys/repokey.pub"]
또는
gpgkeys
필드에 직접 GPG 키를 추가합니다. 예를 들면 다음과 같습니다.check_gpg = true check_ssl = true check_repogpg id = "custom-local" name = "signed local packages" type = "yum-baseurl" url = "https://local/repos/projectrepo/" gpgkeys=["https://remote/keys/other-repokey.pub", '''-----BEGIN PGP PUBLIC KEY BLOCK----- … -----END PGP PUBLIC KEY BLOCK-----''']
테스트에서 서명을 찾을 수 없는 경우 GPG 툴에 다음과 유사한 오류가 표시됩니다.
$ GPG verification is enabled, but GPG signature is not available. This may be an error or the repository does not support GPG verification: Status code: 404 for http://repo-server/rhel/repodata/repomd.xml.asc (IP: 192.168.1.3)
서명이 유효하지 않은 경우 GPG 툴에 다음과 유사한 오류가 표시됩니다.
repomd.xml GPG signature verification error: Bad GPG signature
-
리포지토리 소스에서
검증
리포지토리의 서명을 수동으로 테스트합니다.
$ gpg --verify /srv/repo/example/repomd.xml.asc