gpg를 사용하여 Ubuntu 22.04에서 외부 리포지토리를 추가하는 apt-key 및 add-apt-repository 지원 중단을 처리하는 방법
소개
apt-key
는 APT가 패키지를 인증하는 데 사용하는 키를 관리하는 데 사용되는 유틸리티입니다. APT 설치의 신뢰할 수 있는 소스 목록에 키 서버를 사용하여 외부 리포지토리를 추가하는 add-apt-repository
유틸리티와 밀접한 관련이 있습니다. 그러나 apt-key
및 add-apt-repository
를 사용하여 추가된 키는 apt
에서 전역적으로 신뢰합니다. 이러한 키는 의도한 단일 리포지토리를 인증하는 데 제한되지 않습니다. 이러한 방식으로 추가된 모든 키는 중요한 보안 문제를 나타내는 다른 외부 리포지토리의 추가를 인증하는 데 사용될 수 있습니다.
Ubuntu 20.10부터 apt-key
를 사용하면 도구가 가까운 장래에 사용되지 않을 것이라는 경고가 표시됩니다. 마찬가지로 add-apt-repository
도 곧 지원 중단됩니다. 이러한 사용 중단 경고는 Ubuntu 22.04에서 apt-key
및 add-apt-repository
의 사용을 엄격히 금지하지는 않지만 무시하는 것은 바람직하지 않습니다.
현재 모범 사례는 apt-key
및 add-apt-repository
대신 gpg
를 사용하는 것이며 향후 Ubuntu 버전에서는 유일한 옵션이 됩니다. apt-key
및 add-apt-repository
자체는 항상 백그라운드에서 gpg
를 호출하는 래퍼 역할을 했습니다. gpg
를 사용하면 중개자를 직접 차단합니다. 이러한 이유로 gpg
방법은 이전 버전의 Ubuntu와 호환되며 apt-key
의 드롭인 대체품으로 사용할 수 있습니다.
이 자습서에서는 각각 apt-key
및 add-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 파일은 일반적으로 여러 키를 보유하는 파일인 키링입니다. 이 두 파일 형식은 일반적으로 파일 서명 및 암호화에 사용됩니다.
gpg
는 apt
와 함께 사용할 외부 저장소를 승인하는 데 사용할 수 있는 GPG의 명령줄 도구입니다. 그러나 gpg
는 GPG 파일만 허용합니다. PGP 파일과 함께 이 명령줄 도구를 사용하려면 파일을 변환해야 합니다.
Elasticsearch는 키 변환에 대한 일반적인 시나리오를 제시하며 이 섹션의 예로 사용됩니다. PGP용으로 형식화된 키를 다운로드하고 파일 확장자가 .gpg
인 apt
호환 형식으로 변환합니다. --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을 열어 키 파일을 검사할 수 있습니다.
- 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
이지만 아무 이름이나 사용할 수 있습니다.
- 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
로 파일을 다운로드할 수 있습니다.
- 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
를 엽니다.
- 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 데이터가 다운로드될 아키텍처를 지정합니다. 여기amd64
및arm64
입니다.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
로 지정되지만 디렉터리에서 고유한 파일 이름이면 모든 이름이 작동합니다.
- 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
여러 줄 형식을 사용합니다. . .
- 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
에서 오래된 기본 패키지가 설치됩니다.
리포지토리를 업데이트합니다.
- sudo apt update
그런 다음 패키지를 설치합니다.
- sudo apt install elasticsearch
apt-key
방법과 비교하여 이 단계에서 변경된 사항은 없습니다. 이 명령이 완료되면 설치가 완료됩니다.
부록 - 키 서버를 사용하여 외부 저장소 추가
이 섹션에서는 공개 키 대신 키 서버와 함께 gpg
를 사용하여 외부 저장소를 추가하는 방법을 간략하게 살펴보겠습니다. 이 프로세스는 gpg
가 호출되는 방식이 다르다는 점을 제외하면 공개 키 방식과 거의 동일합니다.
add-apt-repository
는 apt-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
를 사용하여 키 서버에서 직접 다운로드합니다. 다운로드 트래픽에 따라 이 다운로드 명령을 완료하는 데 시간이 걸릴 수 있습니다.
- 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
명령으로 파이핑하여 공개 키를 사용하여 외부 저장소를 추가하는 것과 똑같은 방식으로 수행됩니다.
- 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
다음으로 리포지토리 목록을 업데이트합니다.
- sudo apt update
그런 다음 패키지를 설치할 수 있습니다.
- sudo apt install r-base
외부 리포지토리를 추가하기 위해 gpg
를 사용하는 것은 공개 키와 키 서버 사이에서 유사하지만 차이점은 gpg
를 호출하는 방법입니다.
결론
공개 키 또는 키 서버를 사용하여 외부 저장소를 추가하는 것은 apt-key
또는 add-apt-repository
를 다음과 같이 사용하지 않고 gpg
를 통해 수행할 수 있습니다. 중개인. apt-key
및 add-apt-repository
가 더 이상 사용되지 않으며 향후 버전에서 제거될 예정이므로 이 방법을 사용하여 향후 Ubuntu 버전에서 프로세스가 더 이상 사용되지 않도록 하세요. . gpg
를 사용하여 외부 리포지토리를 추가하면 의도한 대로 단일 리포지토리를 승인하는 데만 키가 사용됩니다.