Невозможно изменить доверие, используя gpg и командный файл

230
Steiny

Я пытаюсь написать плагин для моего инструмента сборки, который упаковывает GnuPG.

До сих пор мне удавалось все делать, но одна вещь, на которой я застрял, это то, как доверять вновь добавленному ключу, не влияя на доверие к существующим ключам.

Если я сначала перечислю ключи:

root@7353afd2c546:/# gpg --with-keygrip --with-secret --batch --with-colons --status-fd 1 --list-keys tru::1:1542186184:0:3:1:5 pub:-:4096:1:B6A8B64B909CAF2F:1541574504:::-:::scESC:::#:::23::0: fpr:::::::::DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F: grp:::::::::9BEB53AD0C68FC629997DB0597DDD758C632B9CD: uid:-::::1541574504::5D90CFACEB3B07D9914327FD2981787B56ACD4A2::Testy <test@example.com>::::::::::0: sub:-:4096:1:0E839DDD93691327:1541574504::::::e:::+:::23: fpr:::::::::B9A633DBD1A309DB71ED55940E839DDD93691327: grp:::::::::6D475E5BA6A1502B1C083F780A537DBC15643EEA: 

Мы видим, что нет никакой ценности для действительности.

Теперь у меня есть командный файл:

root@7353afd2c546:/# cat /root/.gnupg/commands trust 5 save 

И когда я бегу:

root@7353afd2c546:/# gpg --batch --yes --status-fd 1 --command-file /root/.gnupg/commands --edit-key DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F [GNUPG:] KEY_CONSIDERED DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F 0 Secret subkeys are available.   pub:-:4096:1:B6A8B64B909CAF2F:1541574504:0::-:::sc fpr:::::::::DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F: ssb:-:4096:1:0E839DDD93691327:1541574504:0:::::e fpr:::::::::B9A633DBD1A309DB71ED55940E839DDD93691327: uid:-::::::::Testy <test@example.com>:::S9 S8 S7 S2 H10 H9 H8 H11 H2 Z2 Z3 Z1,mdc,no-ks-modify:1,p:: [GNUPG:] GET_LINE keyedit.prompt [GNUPG:] GOT_IT  Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.)  1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu  pub:-:4096:1:B6A8B64B909CAF2F:1541574504:0::-:::sc fpr:::::::::DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F: ssb:-:4096:1:0E839DDD93691327:1541574504:0:::::e fpr:::::::::B9A633DBD1A309DB71ED55940E839DDD93691327: uid:-::::::::Testy <test@example.com>:::S9 S8 S7 S2 H10 H9 H8 H11 H2 Z2 Z3 Z1,mdc,no-ks-modify:1,p:: [GNUPG:] GET_LINE edit_ownertrust.value [GNUPG:] GOT_IT [GNUPG:] GET_LINE edit_ownertrust.value [GNUPG:] GOT_IT  [GNUPG:] GET_LINE keyedit.prompt [GNUPG:] GOT_IT 

Мы видим здесь, что выглядит так, как будто он успешно прочитал входные данные из файла. Однако, когда я снова перечисляю ключи, действительность не изменилась.

И все же, если я отредактирую ключ вручную:

root@7353afd2c546:/# gpg --edit-key DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.  Secret subkeys are available.  pub rsa4096/B6A8B64B909CAF2F created: 2018-11-07 expires: never usage: SC trust: never validity: unknown ssb rsa4096/0E839DDD93691327 created: 2018-11-07 expires: never usage: E [ unknown] (1). Testy <test@example.com>  gpg> trust pub rsa4096/B6A8B64B909CAF2F created: 2018-11-07 expires: never usage: SC trust: never validity: unknown ssb rsa4096/0E839DDD93691327 created: 2018-11-07 expires: never usage: E [ unknown] (1). Testy <test@example.com>  Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.)  1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu  Your decision? 5 Do you really want to set this key to ultimate trust? (y/N) y  pub rsa4096/B6A8B64B909CAF2F created: 2018-11-07 expires: never usage: SC trust: ultimate validity: unknown ssb rsa4096/0E839DDD93691327 created: 2018-11-07 expires: never usage: E [ unknown] (1). Testy <test@example.com> Please note that the shown key validity is not necessarily correct unless you restart the program.  gpg> save Key not changed so no update needed. 

Тогда это работает:

root@7353afd2c546:/# gpg --with-keygrip --with-secret --batch --with-colons --status-fd 1 --list-keys gpg: checking the trustdb tru:o:1:1542190815:1:3:1:5 [GNUPG:] KEY_CONSIDERED DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F 0 gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub:u:4096:1:B6A8B64B909CAF2F:1541574504:::u:::scESC:::#:::23::0: fpr:::::::::DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F: grp:::::::::9BEB53AD0C68FC629997DB0597DDD758C632B9CD: uid:u::::1541574504::5D90CFACEB3B07D9914327FD2981787B56ACD4A2::Testy <test@example.com>::::::::::0: sub:u:4096:1:0E839DDD93691327:1541574504::::::e:::+:::23: fpr:::::::::B9A633DBD1A309DB71ED55940E839DDD93691327: grp:::::::::6D475E5BA6A1502B1C083F780A537DBC15643EEA: 

Почему это не работает?

0

1 ответ на вопрос

0
grawity

Ваш командный файл находится trust 5в одной строке, даже если trustкоманда не принимает параметры. Вместо этого он показывает отдельную подсказку для выбора меню, что означает, что ответ также должен быть в отдельной строке. Каждой подсказке нужна своя строка в командном файле.

Таким образом, доверие не обновляется, потому что GnuPG получает слово, saveкогда ему нужен номер.

Более быстрый способ установить доверие владельца:

echo "DE29CBE0AC9B2EB810E694D7B6A8B64B909CAF2F:6:" | gpg --import-ownertrust 

(Это 6не опечатка - это значение внутреннего доверия, а не номер пункта меню.)

Наличие их на отдельных линиях не имеет значения. Сначала я попробовал их на отдельных строках. Разве `--import-ownertrust` не перезаписывает существующую базу данных доверия? Я только хочу изменить доверие для одного ключа и не трогать доверие для других. Steiny 5 лет назад 0
Я обновил пример с параметрами в отдельных строках. Steiny 5 лет назад 0