Podpisywanie pakietów w Arch Linuksie, cz. 2: pacman-key

17 styczeń 2012

Wpis jest swobodnym tłumaczeniem Pacman Package Signing – 2: Pacman-key autorstwa Allana McRae, zajmującego się rozwijaniem pacmana i toolchainem w Arch Linuksie.

W drugiej części serii wpisów dotyczących implementacji podpisywania pakietów w w pacmanie przybliżę zarządzanie kluczami oraz nowe narzędzie pacman-key.

Sposób, w jaki baza kluczy pacmana, jest zasadniczym aspektem bezpieczeństwa systemu. Baza kluczy (w połączeniu z ustawieniami pacmana) będzie zarządzać którym pakietom i podpisów baz baz danych zaufa użytkownik i w ten sposób, które pakiety wpuści do swojego systemu. Wciąż nie jestem do końca przekonany w jaki sposób ustawić bazę kluczy w zakresie ważności kluczy i ich poziomie zaufania - jedyne repozytorium z którego korzystam i w pełni korzysta z podpisywania pakietów jest moje własne. Dodawanie mojego klucza z absolutnym zaufaniem może nie być najlepszą rzeczą do zrobienia dla innych użytkowników, jednak może być to akceptowalne w bazie kluczy pacmana, nie całego systemu. Mimo wszystko jest to społeczne zagadnienie używania PGP, więc zostawię dyskusję na ten temat na inną okazję.

Zakładając, że baza kluczy jest już ustawiona, narzędzie do zarządzania nią może być pomocne. Co prawda można to zrobić korzystając z gpg i parametru --homedir, jest kilka problemów związanych z pacmanem, dzięki którym powstało odrębne narzędzie - pacman-key. Początkowo pacman-key był portem debianowego apt-key autorstwa Denisa A. Altoé Falquet, ale powoli stawał się nakładką na gpg z dodatkowymi funkcjami. Swoje zasługi mieli także Ivan Kanakarakis i Pang Yan Han, którzy wnieśli wiele poprawek do skryptu oraz Guillaume Alaux, autora początkowej strony man.

Baza kluczy pacmana (domyślnie) będzie znajdywać się w /etc/pacman.d/gnupg (aczkolwiek może to zostać zmienione za pomocą dyrektywy GPGDir w pacman.conf). Baza powinna być stworzona z użyciem pacman-key --init, aby mieć pewność, że pliki mają odpowiednie uprawnienia i sprawdzanie podpisów będzie działać. Na przykład, aby zweryfikować podpis pakietu (pacman -Qip), użytkownik musi mieć uprawnienia do odczytania plików bazy kluczy, przy czym gnupg nie może tworzyć pliku blokady (obecnie jest to ustawione globalnie, biblioteka gpgme użyta w pacmanie nie ma funkcji kontrolującej tworzenie plików blokady…).

Klucze mogą zostać dodane do bazy na kilka różnych sposób. Mogą zostać importowane z lokalnego pliku bądź plików przy użyciu pacman-key -a/-add albo z publicznego serwera za pomocą pacman-key -r/--receive. Można również zaimportować cały zestaw kluczy z innej bazy kluczy GnuPG. Klucze można usunąć za pomocą opcji -d/--delete. Istnieje również możliwość dla dystrybucji albo innego dostawcy repo udostępnienia bazy zawierającej klucze wszystkich packagerów, ale ten mechanizm ciągle podlega pracom.

Gdy w bazie znajdują się klucze, można nimi zarządzać za pomocą pacman-key i częścią parametrów GnuPG (--edit-key, --export, --list-keys, --list-sigs). Opcja umożliwiająca modyfikowanie klucza jest istotna ze względu na możliwość ustawienia poziomu zaufania i podpisywania innych kluczy. W przypadku bardziej zaawansowanych operacji, konieczne jest bezpośrednie użycie gpg, ale jestem pewien, że jeżeli będzie to często używane polecenie, zostanie dodane do pacman-key na prośbę.

I to by było wszystko na temat pacman-key. Jest dosyć proste, jednak zostało najmniej przetestowane jako narzędzie, które nie jest używane codziennie. Jeżeli chciałbyś pomóc przy testach bez naruszania pacmana zainstalowanego w systemie, możesz zbudować i uruchomić go bezpośrednio z gita.

git clone git://projects.archlinux.org/pacman.git
cd pacman
./autogen.sh
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make -C scripts
./scripts/pacman-key

Sprawdź tworzenie nowej bazy, dodawanie i usuwanie kluczy, modyfikowanie ich, weryfikowanie pakietów i oczywiście, zgłoś wszystkie błędy, które napotkasz.