Chcemy używać sygnatur gpg do weryfikacji niektórych aspektów naszych narzędzi do zarządzania konfiguracją systemu. Ponadto chcielibyśmy zastosować model „zaufania”, w którym poszczególne klucze sysadmin są podpisywane za pomocą głównego klucza podpisującego, a następnie nasze systemy ufają temu kluczowi głównemu (i używają „sieci zaufania” do sprawdzania poprawności podpisów przez naszych sysadminów).
Daje nam to dużą elastyczność, na przykład możliwość łatwego odwołania zaufania do klucza, gdy ktoś odchodzi, ale mamy problem. Chociaż gpg
polecenie powie ci, czy klucz jest niezaufany, nie wydaje się, aby zwracał kod wyjścia wskazujący na ten fakt. Na przykład:
# gpg -v < foo.asc
Version: GnuPG v1.4.11 (GNU/Linux)
gpg: armor header:
gpg: original file name=''
this is a test
gpg: Signature made Fri 22 Jul 2011 11:34:02 AM EDT using RSA key ID ABCD00B0
gpg: using PGP trust model
gpg: Good signature from "Testing Key <someone@example.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: ABCD 1234 0527 9D0C 3C4A CAFE BABE DEAD BEEF 00B0
gpg: binary signature, digest algorithm SHA1
To, na czym nam zależy, to:
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Kod wyjścia zwracany przez gpg w tym przypadku wynosi 0, pomimo niepowodzenia zaufania:
# echo $?
0
Jak sprawić, by gpg zawiódł w przypadku, gdy coś jest podpisane niezaufanym podpisem?
Widziałem kilka sugestii, że gpgv
polecenie zwróci odpowiedni kod wyjścia, ale niestety gpgv
nie wie, jak pobrać klucze z serwerów kluczy. Wydaje mi się, że możemy przeanalizować dane wyjściowe statusu (używając --status-fd) gpg
, ale czy jest lepszy sposób?