타사 APT 저장소 사용의 위험을 제한하려고 합니다. 제가 방지하려는 것은 제가 Debian에서 설치한 것보다 최신 버전을 사용하는 타사 저장소에 악성 패키지가 유입되는 상황입니다.
최근에는 새로운 APT 소스를 추가할 때마다 다음과 같이 APT 고정을 사용하여 해당 소스의 특정 패키지만 설치합니다.
Package: *
Pin: origin debian.nabijaczleweli.xyz
Pin-Priority: -1
Package: systemd-zram
Pin: origin debian.nabijaczleweli.xyz
Pin-Priority: 500
Pin: origin <hostname>
이 작업을 수행하는 대신 사용하고 있습니다 Origin: <tag>
. 내가 올바르게 이해했다면 원본 태그는 저장소 자체(릴리스 파일에서)에 의해 제어되며 debian
악의적으로 또는 무지로 인해 쉽게 설정될 수 있습니다. (나는 이런 일이 실제로 일어나는 것을 보았습니다.) 대조적으로 소스 호스트 이름은 지정된 URI에서 파생됩니다 sources.list
.
이것은 잘 작동하는 것 같으며 이제 모든 타사 APT 소스에 적용하고 싶습니다. 이렇게 하려면 각 타사 저장소에서 어떤 패키지를 설치했는지 알아야 합니다. 문제는 설치된 패키지 목록과 원래 URI 또는 호스트 이름을 얻을 수 있는 방법을 찾을 수 없다는 것입니다.
Origin URI
적성(Aptitude)은 이를 발표하게 된 것을 기쁘게 생각합니다 .패키지 정보 화면1(포함하지 않음)검색 조건자그것도 표시되지 않습니다패키지 목록.
dpkg-query
apt-cache
패키지에 대한 많은 정보를 제공할 수 있지만 원래 URI나 호스트 이름을 얻을 수 있는 방법을 찾지 못했습니다 .
나는 파일 이름의 첫 번째 부분을 원래 호스트 이름으로 사용하여 내 콘텐츠를 해결할 수 있다고 가정 /var/lib/apt/lists/*_Packages
하지만 이로 인해 영향을 받고 싶지 않습니다.
그래서:
이 상황을 고려해 볼 가치가 있습니까? 손상된 저장소가 여러 가지 방법으로 나를 망칠 수 있으므로 걱정을 멈추고 폭탄을 사랑하는 법을 배워야 합니다.
패키지 소스를 나타내는
Releases
파일의 필드가 여기에 사용된 원래 호스트 이름보다 신뢰성이 낮다고 생각하는 것이 맞습니까 ?Origin
Pin: origin <hostname>
설치된 모든 패키지 목록과 원래 호스트 이름을 얻을 수 있는 방법이 있습니까?
감사해요!
¹해당 페이지의 스크린샷은 표시된 필드를 설명하기에는 너무 오래되었지만 Origin-URI
최신 버전의 Aptitude는 여기에 패키지의 전체 URI를 표시합니다.
답변1
aptitude
원하는 논리에 어리석은 것 같습니다.
해결책은 Python으로 전환하는 것입니다.
import apt
CACHE = apt.Cache()
for pkg in CACHE:
if not pkg.installed:
continue
for orig in pkg.candidate.origins if pkg.candidate else []:
if len(orig.site) == 0:
continue
print(pkg, pkg.candidate.version, orig.site)
고쳐 쓰다패키지 apt
에는 다음이 포함됩니다:
bash# dpkg -S /usr/lib/python3/dist-packages/apt/__init__.py
python3-apt: /usr/lib/python3/dist-packages/apt/__init__.py