Buforuj wszystkie hasła podklucza gpg jednocześnie? Zapobiegasz konieczności wielokrotnego wprowadzania hasła gpg?

10

Czy mogę wprowadzić hasło gpg tylko raz i odblokować wszystkie moje klucze podrzędne (podpisywanie, deszyfrowanie, uwierzytelnianie)?

W tej chwili muszę trzy razy wpisać hasło gpg (w celu podpisania, odszyfrowania, uwierzytelnienia). Jest to niewygodne.

Próbowałem wymyślić skrypt powłoki.

#!/bin/bash
set -x
set -e
set +o history

signing_key=77BB3C48
encryption_key=CE998547

tempfile="$(mktemp)"
echo "test" > testfile

unset passphrase || exit 1
read -sp 'Enter password. ' passphrase ; echo

exec 3<<<"$passphrase"

gpg2 --no-tty --use-agent --batch --yes --passphrase-fd 3 --sign-with "$signing_key" --clearsign "$tempfile"
gpg2 --no-tty --use-agent --verify "$tempfile.asc"

gpg2 --no-tty --use-agent --yes --armor --recipient "$encryption_key" --encrypt "$tempfile"

exec 3<<<"$passphrase"
gpg2 --no-tty --use-agent --batch --decrypt --passphrase-fd 3 "$tempfile.asc"

Ale niestety w ten sposób hasła gnupg-agent nie buforują hasła. Czy można to naprawić?

Informacje o systemie:

  • Kiedy nie używam tego skryptu powłoki, nie mam problemów z gnupg-agent. Kiedy ręcznie podpisuję / odszyfrowuję plik w powłoce, pinentry pyta o hasło dwukrotnie, a następnie buforuje je do ponownego uruchomienia.
  • Korzystanie z Debian Wheezy.
  • wersja gpg:

dpkg -l | grep gnupg

ii  gnupg                                        1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement
ii  gnupg-agent                                  2.0.22-3                           i386         GNU privacy guard - password agent
ii  gnupg-curl                                   1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement (cURL)
ii  gnupg2                                       2.0.22-3                           i386         GNU privacy guard - a free PGP replacement (new v2.x)

Ja zapytałem na GnuPG listy dyskusyjnej użytkowników jakiś czas temu, ale nie ma odpowiedzi.

Być może ta odpowiedź zadziała? Być może gpg-connect-agentjest to wymagane?

adrelanos
źródło
Jestem pod wrażeniem: exec 3<<<"$passphrase"był nowy nawet dla mnie ... I właśnie rzuciłem nagrodę w wysokości 250 powtórzeń za odpowiedź, którą zacytowałeś.
Hauke ​​Laging

Odpowiedzi:

3

Istnieje gnome-keyring-daemon i konik morski, dzięki czemu zarządzanie kluczami i hasłami jest bardzo łatwe.

Zasadniczo, jeśli używasz gnome-keyring-daemon jako agent gpg, ma on możliwość automatycznego odblokowania twoich kluczy GPG. Robi to, utrzymując brelok do hasła, który zawiera hasła do stron internetowych, kluczy GPG, kluczy SSH itp. Ten brelok do hasła jest następnie zabezpieczany własnym hasłem. Odblokowujesz go, a breloczek do gnomów odblokuje wszystko inne.
Jako dodatkowy bonus gnome-keyring-daemon ma brelok „login”, który jeśli hasło pasuje do hasła użytkownika, brelok jest automatycznie odblokowywany po zalogowaniu.


Konfiguracja

Jak to działa? Wystarczy zainstalować gnome-keyring-daemon i konika morskiego. Pakiet powinien wykonać całą konfigurację systemu. Tylko upewnij się, że nie uruchamiasz innego demona kluczy lub agenta GPG . Cokolwiek zaczyna się od ostatniego „wygrywa”, a breloczek do gnome zaczyna się na stosie PAM, tak bardzo wcześnie.

Jeśli twoje klucze GPG są zapisane ~/.gnupg, automatycznie je odbierze i będzie działać jako agent GPG. To samo dotyczy kluczy SSH przechowywanych w~/.ssh

Przy pierwszej próbie użycia klucza prywatnego pojawi się okno dialogowe wyglądające tak: (Uruchomiłem go za pomocą prostej linii poleceń gpg -d myfile.gpg). odblokuj brelok
Po prostu wybierz opcję „Automatycznie odblokuj ten brelok za każdym razem, gdy jestem zalogowany”

Teraz tak naprawdę nie rozmawialiśmy o koniku morskim. To dlatego, że nie jest to absolutnie konieczne. Wszystko to zostało zrobione przy pomocy zwykłego demona gnome-keyring. Jednak za pomocą konika morskiego możesz przeglądać i zarządzać wszystkimi swoimi kluczami i brelokami. A jeśli używasz scentralizowanego uwierzytelniania (LDAP), musisz go użyć podczas zmiany hasła logowania, aby również zmienić hasło w kluczu „login”, aby je dopasować.

konik morski - klucze gpg


Inne hasła

Jak wspomniano wcześniej, gnome-keyring-daemon może również przechowywać hasła do stron internetowych. Ostatnio sprawdziłem, że chrome obsługuje to, ale Firefox nie. Jest jednak jedna sztuczka, aby go uruchomić.
Domyślnie będziesz mieć 2 breloki, brelok „login” i „domyślny” brelok. „Domyślny” brelok jest domyślny (stąd nazwa). Ale to osobny brelok, więc nie zostanie automatycznie odblokowany. W koniku morskim, po kliknięciu prawym przyciskiem myszy klucza „login”, istnieje możliwość „ustawienia domyślnego”. Wybierz to, a zacznie się przyzwyczajać do haseł. Ja osobiście po prostu usuwam „domyślny” i używam „login” do wszystkiego.

Patrick
źródło
Szkoda, że ​​nie jestem użytkownikiem gnome. Zrobiłem sudo apt-get remove gnupg-agenti sudo apt-get install gnome-keyring seahorse. Następnie utworzył plik /etc/X11/Xsession.d/999gnomekeyringo następującej treści. eval $(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh) export GNOME_KEYRING_CONTROL GNOME_KEYRING_PID GPG_AGENT_INFO SSH_AUTH_SOCK(W przeciwnym razie gnome-keyring nie uruchomiłby się nawet w KDE.) Teraz, kiedy uruchomię gpg -d myfile.gpg, zostaniesz poproszony o hasło i zostanie ono zapisane w pamięci podręcznej, ale nigdy nie pojawiło się to okno dialogowe.
adrelanos
(Jest to złe, ponieważ wróciłem tam, gdzie zacząłem. Klucz podpisujący zostanie buforowany osobno.) (Istnieje nowa linia między
wersją
Nie używam też gnome dla mojego menedżera pulpitu. To nie jest wymagane. Gnome robi znacznie więcej niż tylko menedżer pulpitu. Nie powinieneś nic dodawać /etc/X11/Xsession.d. Należy to zrobić na stosie PAM. Powinieneś mieć session optional pam_gnome_keyring.so auto_startwpis w co najmniej jednym pliku /etc/pam.d. Niestety nie używam Debiana, więc nie wiem, który z nich. Jeśli tego nie ma, to jest problem.
Patrick
Bez zwiększania /etc/X11/Xsession.d, ps aux | grep gnomepokazuje, że gnome-keyring-daemon nie zacząć. (Niemniej jednak usunąłem.) /usr/share/doc/libpam-gnome-keyring/README.DebianMówi If you want to start gnome_keyring from another display manager, you need to add the following lines to the corresponding /etc/pam.d/?dm file: auth optional pam_gnome_keyring.so session optional pam_gnome_keyring.so auto_start(nowe wiersze usunięte przez komentarze). Czy to, dodane do /etc/pam.d/kdm, zrestartowało KDM. Brak ładowania agenta, brak dostępnych.
adrelanos
Jestem zagubiony. Jeśli używasz kdmi wkładasz to /etc/pam.d/kdm, powinno to zrobić. Jedyne, co mogę zasugerować, jeśli nadal chcesz podążać tą trasą, to przekopać dzienniki. Przepraszam za fałszywą nadzieję, pomyślałem, że byłoby to dla ciebie proste rozwiązanie.
Patrick
0

Przeprowadziłem pewne dochodzenie, a wynik jest dla mnie zaskakujący, ale prosty:

Wywołany w ten sposób gpgnie komunikuje się gpg-agent w ogóle ! gpgjest w stanie samodzielnie wykonać wszystkie te operacje.

Ale jeśli gpg-agentnawet nie wie, że coś się stało, to z trudem zna hasło, którego wcześniej nie znał.

Hauke ​​Laging
źródło
Wygląda na to, że odkryłem sposób, w jaki nie można tego rozwiązać.
adrelanos
Moje pierwotne pytanie jest nadal otwarte. (Który jest Can I enter my gpg password just once and unlock all my sub keys (signing, decryption, authentication)?) Mam nadzieję, że przesłanie hasła do gpg-agentlub gpg-connect-agentbędzie w jakiś sposób możliwe.
adrelanos