Niniejszy artykuł dostępny jest również pod łatwiejszymi do zapamiętania adresami dug.net.pl/gpg oraz dug.net.pl/klucze [1].

Wstęp

Dla bezpieczeństwa systemu repozytoria Debiana są podpisywane cyfrowo. Zapobiega to nieświadomemu instalowaniu pakietów z niepewnych źródeł.

Jeśli nie dodaliśmy podpisu któregoś z repozytoriów do bazy zaufanych kluczy, podczas aktualizacji listy pakietów (aptitude update) pojawi się podobny błąd:

W: GPG error: http://adres.repozytorium.org gałąź Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ID_KLUCZA

Brak klucza repozytorium w bazie nie oznacza, że nie możemy skorzystać z repozytorium — w takim wypadku menedżer pakietów poinformuje, że pakiet(-y) pochodzi(-ą) z niepewnego źródła i poprosi o wyraźne potwierdzenie chęci ich instalacji.

Istnieją trzy metody dodawania kluczy:

Instalacja pakietu z kluczami

Niektóre repozytoria udostępniąją specjalne pakiety dodające do bazy APT-a cyfrowy podpis. Pakiety te zazwyczaj noszą nazwę nazwa-repozytorium-keyring, np. debian-keyring, debian-multimedia-keyring.

Jest to najwygodniejsza metoda dodawania (i w przyszłości: aktualizacji) podpisów cyfrowych, jeśli repozytorium udostępnia pakiet z kluczem — zalecana jest jego instalacja.

Pobranie klucza z serwera kluczy

Można klucz ręcznie pobrać ze specjalnego serwera służącego do ich przechowywania, po czym wyeksportować go i dodać do bazy APT-a. Aby to zrobić, należy jako root wykonać następujące polecenia:

gpg --keyserver pgp.mit.edu --recv-keys ID_KLUCZA
gpg --armor --export ID_KLUCZA | apt-key add -

Pobranie wyeksportowanego klucza

Czasami twórca repozytorium udostępnia już wyeksportowany klucz. Taki klucz można dodać do bazy APT-a za pomocą następującego polecenia:

wget -O - http://adres.repozytorium/klucz.gpg | apt-key add -

Skrypty do zautomatyzowanego dodawania kluczy

Ręczne pobieranie podpisów z serwerów kluczy i dodawanie ich do bazy, można zautomatyzować za pomocą skryptów powłoki.

Skrypt do zautomatyzowanego dodawania podanych kluczy

#!/bin/sh
for KEY in $@; do
    echo "Przetwarzanie klucza $KEY:"
    echo -n " -> pobieranie klucza z serwera... " && \
      gpg --keyserver pgp.mit.edu --recv-keys "$KEY" >/dev/null 2>&1 && \
      echo "OK" && echo -n " -> dodawanie klucza do bazy... " && \
      gpg --armor --export "$KEY" | apt-key add -
done

Aby dodać klucze za pomocą powyższego skryptu, należy podać je jako argument skryptu, np.

./dodaj_klucze.sh EA8E8B2116BA136C 3D8C732C3799DA8A

Skrypt do automatycznego dodania wszystkich brakujących kluczy

#!/bin/sh

if [ `id -u` -ne 0 ]; then
    echo "Tylko root może dodać klucze"
    exit 1
fi

echo -n "Aktualizacja listy pakietów (może trochę potrwać)... " && \
  apt-get update >/dev/null 2>/tmp/apt-get-update-errors && echo "OK"

if ! grep -q NO_PUBKEY /tmp/apt-get-update-errors; then
    echo "Wszystkie klucze są dodane, nie ma nic do roboty."
    rm -f /tmp/apt-get-update-errors
    exit 0
fi

for KEY in `awk '/NO_PUBKEY/ {print $NF}' /tmp/apt-get-update-errors`; do
    echo "Przetwarzanie klucza $KEY:"
    echo -n " -> pobieranie klucza z serwera... " && \
      gpg --keyserver pgp.mit.edu --recv-keys "$KEY" >/dev/null 2>&1 && \
      echo "OK" && echo -n " -> dodawanie klucza do bazy... " && \
      gpg --armor --export "$KEY" | apt-key add -
done
rm -f /tmp/apt-get-update-errors

Po uruchomieniu, skrypt spróbuje pobrać i dodać wszystkie brakujące klucze.


Przypisy:

  1. http://dug.net.pl/gpg