Podpisy cyfrowe repozytoriów (klucze GPG)
Kategoria: Artykuły, etykiety: system
Dodany: 2009-07-22 17:22
(zmodyfikowany: 2011-10-08 21:39)
Przez: azhag
Wyświetleń: 72240
Niniejszy artykuł dostępny jest również pod łatwiejszymi do zapamiętania adresami dug.net.pl/gpg oraz dug.net.pl/klucze.
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 zawierającego klucze
- pobranie klucza z serwera kluczy
- pobranie wyeksportowanego klucza
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.