웹사이트 검색

gpg를 사용하여 Ubuntu 22.04에서 외부 리포지토리를 추가하는 apt-key 및 add-apt-repository 지원 중단을 처리하는 방법


소개

apt-key는 APT가 패키지를 인증하는 데 사용하는 키를 관리하는 데 사용되는 유틸리티입니다. APT 설치의 신뢰할 수 있는 소스 목록에 키 서버를 사용하여 외부 리포지토리를 추가하는 add-apt-repository 유틸리티와 밀접한 관련이 있습니다. 그러나 apt-keyadd-apt-repository를 사용하여 추가된 키는 apt에서 전역적으로 신뢰합니다. 이러한 키는 의도한 단일 리포지토리를 인증하는 데 제한되지 않습니다. 이러한 방식으로 추가된 모든 키는 중요한 보안 문제를 나타내는 다른 외부 리포지토리의 추가를 인증하는 데 사용될 수 있습니다.

Ubuntu 20.10부터 apt-key를 사용하면 도구가 가까운 장래에 사용되지 않을 것이라는 경고가 표시됩니다. 마찬가지로 add-apt-repository도 곧 지원 중단됩니다. 이러한 사용 중단 경고는 Ubuntu 22.04에서 apt-keyadd-apt-repository의 사용을 엄격히 금지하지는 않지만 무시하는 것은 바람직하지 않습니다.

현재 모범 사례는 apt-keyadd-apt-repository 대신 gpg를 사용하는 것이며 향후 Ubuntu 버전에서는 유일한 옵션이 됩니다. apt-keyadd-apt-repository 자체는 항상 백그라운드에서 gpg를 호출하는 래퍼 역할을 했습니다. gpg를 사용하면 중개자를 직접 차단합니다. 이러한 이유로 gpg 방법은 이전 버전의 Ubuntu와 호환되며 apt-key의 드롭인 대체품으로 사용할 수 있습니다.

이 자습서에서는 각각 apt-keyadd-apt-repository의 대안을 사용하는 두 가지 절차에 대해 설명합니다. 먼저 apt-key를 사용하는 대신 gpg와 함께 공개 키를 사용하여 외부 저장소를 추가합니다. 둘째, 부록으로 이 자습서에서는 add-apt-repository를 사용하는 대신 gpg가 있는 키 서버를 사용하여 외부 저장소를 추가하는 방법을 다룹니다.

전제 조건

이 자습서를 완료하려면 Ubuntu 22.04 서버가 필요합니다. sudo 권한이 있고 방화벽이 활성화된 루트가 아닌 사용자로 Ubuntu 22.04용 초기 서버 설정 가이드에 따라 이를 설정해야 합니다.

1단계 - 구성 요소 및 키 형식 식별

PGP(Pretty Good Privacy)는 파일 및 디렉토리 서명, 암호화 및 암호 해독에 사용되는 독점 암호화 프로그램입니다. PGP 파일은 apt 내의 유효한 소스로 리포지토리를 인증하기 위해 이 프로세스에서 사용되는 공개 키 파일입니다. GPG(GNU Privacy Guard)는 PGP의 오픈 소스 대안입니다. GPG 파일은 일반적으로 여러 키를 보유하는 파일인 키링입니다. 이 두 파일 형식은 일반적으로 파일 서명 및 암호화에 사용됩니다.

gpgapt와 함께 사용할 외부 저장소를 승인하는 데 사용할 수 있는 GPG의 명령줄 도구입니다. 그러나 gpg는 GPG 파일만 허용합니다. PGP 파일과 함께 이 명령줄 도구를 사용하려면 파일을 변환해야 합니다.

Elasticsearch는 키 변환에 대한 일반적인 시나리오를 제시하며 이 섹션의 예로 사용됩니다. PGP용으로 형식화된 키를 다운로드하고 파일 확장자가 .gpgapt 호환 형식으로 변환합니다. --dearmor 플래그와 함께 gpg 명령을 실행하면 됩니다. 다음으로 변환된 키에 대한 직접 참조를 첨부하면서 패키지 소스 목록에 리포지토리 링크를 추가합니다. 마지막으로 Elasticsearch 패키지를 설치하여 이 프로세스를 확인합니다.

키 확인을 통해 리포지토리를 추가해야 하는 프로젝트는 항상 공개 키와 정확한 위치를 나타내는 리포지토리 URI를 제공합니다. Elasticsearch 예제의 경우 설명서에서 설치 페이지에 이러한 구성 요소를 제공합니다.

다음은 Elasticsearch에 제공된 구성 요소입니다.

  • 키: https://artifacts.elastic.co/GPG-KEY-elasticsearch
  • 저장소: https://artifacts.elastic.co/packages/7.x/apt stable main

다음으로 작업할 PGP 또는 GPG 파일이 제공되었는지 여부를 결정해야 합니다. curl로 URL을 열어 키 파일을 검사할 수 있습니다.

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch

그러면 다음으로 시작하는 키 파일의 내용이 출력됩니다.

Output
-----BEGIN PGP PUBLIC KEY BLOCK----- . . .

URL에 GPG가 있음에도 불구하고 첫 번째 줄은 이것이 실제로 PGP 키 파일임을 나타냅니다. apt는 GPG 형식만 허용하므로 이 점에 유의하세요. 원래 apt-key는 백그라운드에서 gpg를 호출하여 PGP 파일을 감지하고 자동으로 GPG로 변환했습니다. 2단계에서는 PGP에서 GPG로의 수동 변환과 변환이 필요하지 않을 때 수행할 작업을 모두 다룹니다.

2단계 — 키 다운로드 및 apt 호환 파일 유형으로 변환

gpg 메서드를 사용하면 패키지 소스 목록에 추가하기 전에 항상 키를 다운로드해야 합니다. 이전에는 apt-key와 함께 이 순서가 항상 적용되지는 않았습니다. 이제 소스 목록에서 다운로드한 키 파일의 경로를 참조해야 합니다. 키를 다운로드하지 않은 경우 분명히 기존 경로를 참조할 수 없습니다.

Elasticsearch를 사용하면 PGP 파일로 작업하므로 다운로드 후 GPG 파일 형식으로 변환합니다. 다음 예제에서는 curl을 사용하여 키를 다운로드하고 다운로드는 gpg 명령으로 파이프됩니다. gpg는 PGP 키를 GPG 파일 형식으로 변환하기 위해 --dearmor 플래그와 함께 호출되며 -o는 파일 출력을 나타내는 데 사용됩니다. .

Ubuntu에서 /usr/share/keyrings 디렉토리는 Ubuntu가 키링을 저장하는 기본 위치이므로 변환된 GPG 파일의 권장 위치입니다. 이 예제에서는 파일 이름이 elastic-7.x.gpg이지만 아무 이름이나 사용할 수 있습니다.

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-7.x.gpg

그러면 PGP 파일이 올바른 GPG 형식으로 변환되어 apt의 소스 목록에 추가될 준비가 됩니다.

참고: 다운로드한 파일이 이미 GPG 형식인 경우 다음 예와 같은 명령을 사용하여 파일을 변환하지 않고 바로 /usr/share/keyrings로 파일을 다운로드할 수 있습니다.

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo tee /usr/share/keyrings/elastic-7.x.gpg

이 경우 curl 명령의 출력은 파일을 올바른 위치에 저장하기 위해 tee로 파이프됩니다.

3단계 - 패키지 소스 목록에 리포지토리 추가

올바른 GPG 파일 형식으로 다운로드한 키를 사용하여 획득한 키에 명시적으로 연결하면서 리포지토리를 apt 패키지 소스에 추가할 수 있습니다. 이를 달성하는 세 가지 방법이 있으며 모두 apt가 소스를 찾는 방법과 관련이 있습니다. apt는 중앙 sources.list 파일, sources.list.d 디렉토리의 .list 파일에서 소스를 가져옵니다. , 및 .source 파일은 sources.list.d 디렉토리에 있습니다. 세 가지 옵션 간에 기능적 차이는 없지만 세 가지 옵션을 고려하고 필요에 가장 적합한 방법을 선택하는 것이 좋습니다.

옵션 1 - sources.list에 직접 추가

첫 번째 방법은 소스를 나타내는 줄을 apt 소스를 포함하는 기본 파일인 /etc/apt/sources.list에 직접 삽입하는 것입니다. 이 파일에는 Ubuntu와 함께 제공되는 기본 소스를 포함하여 여러 소스가 있습니다. 이 파일을 직접 편집하는 것은 완벽하게 허용되지만 옵션 2와 옵션 3은 편집 및 유지 관리가 더 쉬운 모듈식 솔루션을 제공합니다.

nano 또는 원하는 텍스트 편집기로 /etc/apt/sources.list를 엽니다.

  1. sudo nano /etc/apt/sources.list

그런 다음 파일 맨 아래에 외부 저장소를 추가합니다.

. . .
deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main

이 행에는 소스에 대한 다음 정보가 포함되어 있습니다.

  • deb: 소스가 일반 Debian 아키텍처를 사용함을 지정합니다.
  • arch=amd64,arm64는 APT 데이터가 다운로드될 아키텍처를 지정합니다. 여기 amd64arm64입니다.
  • signed-by=/usr/share/keyrings/elastic-7.x.gpg: 이 소스를 인증하는 데 사용되는 키를 지정하며 여기서는 .gpg를 가리킵니다. 파일은 /usr/share/keyrings에 저장됩니다. 줄의 이 부분은 이전에 apt-key 메서드에 필요하지 않았지만 포함되어야 합니다. 이 추가는 apt-key에서 포팅할 때 가장 중요한 변경 사항입니다. 키를 단일 리포지토리에 연결하기 때문에 권한을 부여하고 apt-key<의 원래 보안 결함을 수정합니다. /코드>.
  • https://artifacts.elastic.co/packages/7.x/apt stable main: 저장소 내의 데이터를 찾을 수 있는 정확한 위치를 나타내는 URI입니다.
  • /etc/apt/sources.list.d/elastic-7.x.list: 생성할 새 파일의 위치와 이름입니다.
  • /dev/null: 명령의 출력이 필요하지 않을 때 사용됩니다. 이 위치를 가리키는 tee는 출력을 생략합니다.

CTRL+O를 누른 다음 CTRL+X를 눌러 저장하고 종료합니다.

옵션 2 - sources.list.d에 새 .list 파일 만들기

이 옵션을 사용하면 대신 sources.list.d 디렉토리에 새 파일을 생성합니다. apt는 저장소 추가를 위해 이 디렉토리와 sources.list를 모두 구문 분석합니다. 이 방법을 사용하면 별도의 파일 내에서 리포지토리 추가를 물리적으로 격리할 수 있습니다. 나중에 이 추가 사항을 제거하거나 편집해야 하는 경우 중앙 sources.list 파일을 편집하는 대신 이 파일을 삭제할 수 있습니다. 추가 항목을 별도로 유지하면 유지 관리가 더 쉬워지고 sources.list를 편집하면 파일의 다른 리포지토리에 영향을 주는 방식으로 오류가 발생하기 쉽습니다.

이렇게 하려면 echo 명령을 tee 명령으로 파이프하여 이 새 파일을 만들고 적절한 줄을 삽입합니다. 파일 이름은 다음 예제에서 elastic-7.x.list로 지정되지만 디렉터리에서 고유한 파일 이름이면 모든 이름이 작동합니다.

  1. echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list > /dev/null

이 명령은 수동으로 파일을 만들고 적절한 텍스트 줄을 삽입하는 것과 동일합니다.

옵션 3 - sources.list.d에 .sources 파일 만들기

세 번째 방법은 .list 파일 대신 .sources 파일에 씁니다. 이 방법은 비교적 새로운 방법이며 deb에 비해 덜 모호한 deb822 여러 줄 형식을 사용합니다. . . 선언은 기능적으로 동일합니다. 새 파일을 만듭니다.

  1. sudo nano /etc/apt/sources.list.d/elastic-7.x.sources

그런 다음 deb822 형식을 사용하여 외부 저장소를 추가합니다.

Types: deb
Architectures: amd64 arm64
Signed-By: /usr/share/keyrings/elastic-7.x.gpg
URIs: https://artifacts.elastic.co/packages/7.x/apt
Suites: stable
Components: main

텍스트를 삽입한 후 저장하고 종료합니다.

이것은 한 줄 형식과 유사하며 한 줄씩 비교하면 둘 다의 정보가 동일하고 단지 다르게 구성되어 있음을 알 수 있습니다. 한 가지 유의할 점은 이 형식은 여러 인수(예: amd64,arm64)가 있을 때 쉼표를 사용하지 않고 대신 공백을 사용한다는 것입니다.

다음으로 테스트 설치를 수행하여 이 프로세스를 확인합니다.

4단계 - 외부 리포지토리에서 패키지 설치

apt가 기본 sources.list 파일과 모든 .list.sources 파일은 sources.list.d에 있습니다. 먼저 업데이트 없이 apt install을 호출하면 설치가 실패하거나 apt에서 오래된 기본 패키지가 설치됩니다.

리포지토리를 업데이트합니다.

  1. sudo apt update

그런 다음 패키지를 설치합니다.

  1. sudo apt install elasticsearch

apt-key 방법과 비교하여 이 단계에서 변경된 사항은 없습니다. 이 명령이 완료되면 설치가 완료됩니다.

부록 - 키 서버를 사용하여 외부 저장소 추가

이 섹션에서는 공개 키 대신 키 서버와 함께 gpg를 사용하여 외부 저장소를 추가하는 방법을 간략하게 살펴보겠습니다. 이 프로세스는 gpg가 호출되는 방식이 다르다는 점을 제외하면 공개 키 방식과 거의 동일합니다.

add-apt-repositoryapt-key에 대응하는 키 서버 기반이며 둘 다 지원 중단될 예정입니다. 이 시나리오에서는 다른 구성 요소를 사용합니다. 키와 리포지토리 대신 키 서버 URL과 키 ID가 제공됩니다. 이 경우 아무 것도 변환하지 않고 키 서버에서 적절한 .gpg 형식으로 직접 다운로드할 수 있습니다. add-apt-repository는 곧 사용이 중단될 예정이므로 가져오기의 기본 gpg 동작을 재정의하면서 대신 gpg를 사용하여 파일로 다운로드합니다. 기존 키링에.

오픈 소스 프로그래밍 언어 R을 예로 사용하여 주어진 구성 요소는 다음과 같으며 공식 프로젝트 사이트의 설치 지침에서도 찾을 수 있습니다.

  • 키 서버: keyserver.ubuntu.com
  • 키 ID: E298A3A825C0D65DFD57CBB651716619E084DAB9
  • 저장소: https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/

먼저 gpg를 사용하여 키 서버에서 직접 다운로드합니다. 다운로드 트래픽에 따라 이 다운로드 명령을 완료하는 데 시간이 걸릴 수 있습니다.

  1. sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/R.gpg --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

이 명령에는 공개 키와 함께 gpg를 사용하는 것과 다른 다음 플래그가 포함됩니다.

  • --no-default-keyring --keyring과 결합하면 <의 기본 동작인 기존 키링으로 가져오는 대신 새 파일로 출력할 수 있습니다.gpg입니다.
  • --keyserver--recv-keys와 결합하여 다운로드 중인 특정 키와 위치를 제공합니다.
  • --homedir은 임시 파일을 생성하기 위한 gpg 기본 위치를 덮어쓰는 데 사용됩니다. gpg는 명령을 완료하기 위해 이러한 파일을 생성해야 합니다. 그렇지 않으면 gpg/root에 쓰기를 시도하여 권한 오류가 발생합니다. 대신 이 명령은 적절한 /tmp 디렉토리에 임시 파일을 배치합니다.

다음으로 리포지토리를 .list 파일에 추가합니다. 이는 echo 명령을 tee 명령으로 파이핑하여 공개 키를 사용하여 외부 저장소를 추가하는 것과 똑같은 방식으로 수행됩니다.

  1. echo "deb [arch=amd64 signed-by=/usr/share/keyrings/R.gpg] https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/" | sudo tee /etc/apt/sources.list.d/R.list > /dev/null

다음으로 리포지토리 목록을 업데이트합니다.

  1. sudo apt update

그런 다음 패키지를 설치할 수 있습니다.

  1. sudo apt install r-base

외부 리포지토리를 추가하기 위해 gpg를 사용하는 것은 공개 키와 키 서버 사이에서 유사하지만 차이점은 gpg를 호출하는 방법입니다.

결론

공개 키 또는 키 서버를 사용하여 외부 저장소를 추가하는 것은 apt-key 또는 add-apt-repository를 다음과 같이 사용하지 않고 gpg를 통해 수행할 수 있습니다. 중개인. apt-keyadd-apt-repository가 더 이상 사용되지 않으며 향후 버전에서 제거될 예정이므로 이 방법을 사용하여 향후 Ubuntu 버전에서 프로세스가 더 이상 사용되지 않도록 하세요. . gpg를 사용하여 외부 리포지토리를 추가하면 의도한 대로 단일 리포지토리를 승인하는 데만 키가 사용됩니다.