[[meta title="Problems with root-owned gpg keyrings"]] `/var/lib/monkeysphere/gnupg-host/` is root-owned, and the public keyring in that directory is controlled by the superuser. We currently expect the `monkeysphere` user to read from (but not write to) that keyring. But using a keyring in a directory that you don't control appears to trigger [a subtle bug in gpg](http://bugs.debian.org/361539) that has been unresolved for quite a long time. With some of the new error checking i'm doing in `monkeysphere-server`, typical operations that involve both keyrings as the non-privileged user can fail with an error message like: gpg: failed to rebuild keyring cache: file open error Running the relevant operation a second time as the same user usually lets things go through without a failure, but this seems like it would be hiding a bug, rather than getting it fixed correctly. Are there other ways we can deal with this problem? --dkg Here is an example when using monkeysphere-server add-identity-certifier on a host with a newly-installed monkeysphere installaton. Note that running the same command a second time works as expected: 0 pip:~# monkeysphere-server c+ 0EE5BE979282D80B9F7540F1CCD2ED94D21739E9 gpg: requesting key D21739E9 from hkp server pool.sks-keyservers.net gpg: key D21739E9: public key "Daniel Kahn Gillmor " imported gpg: can't create `/var/lib/monkeysphere/gnupg-host/pubring.gpg.tmp': Permission denied gpg: failed to rebuild keyring cache: file open error gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2009-03-30 gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) Could not receive a key with this ID from the 'pool.sks-keyservers.net' keyserver. 255 pip:~# monkeysphere-server c+ 0EE5BE979282D80B9F7540F1CCD2ED94D21739E9 gpg: requesting key D21739E9 from hkp server pool.sks-keyservers.net gpg: key D21739E9: "Daniel Kahn Gillmor " not changed gpg: Total number processed: 1 gpg: unchanged: 1 key found: pub 4096R/D21739E9 2007-06-02 [expires: 2012-05-31] Key fingerprint = 0EE5 BE97 9282 D80B 9F75 40F1 CCD2 ED94 D217 39E9 uid [ unknown] Daniel Kahn Gillmor uid [ unknown] Daniel Kahn Gillmor uid [ unknown] Daniel Kahn Gillmor uid [ unknown] Daniel Kahn Gillmor uid [ unknown] [jpeg image of size 3515] sub 2048R/4BFA08E4 2008-06-19 [expires: 2009-06-19] sub 4096R/21484CFF 2007-06-02 [expires: 2012-05-31] Are you sure you want to add the above key as a certifier of users on this system? (y/N) y gpg: key D21739E9: public key "Daniel Kahn Gillmor " imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2009-03-30 gpg (GnuPG) 1.4.9; Copyright (C) 2008 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. pub 4096R/D21739E9 created: 2007-06-02 expires: 2012-05-31 usage: SC trust: unknown validity: unknown [ unknown] (1). Daniel Kahn Gillmor [ unknown] (2) Daniel Kahn Gillmor [ unknown] (3) Daniel Kahn Gillmor [ unknown] (4) Daniel Kahn Gillmor [ unknown] (5) [jpeg image of size 3515] pub 4096R/D21739E9 created: 2007-06-02 expires: 2012-05-31 usage: SC trust: unknown validity: unknown Primary key fingerprint: 0EE5 BE97 9282 D80B 9F75 40F1 CCD2 ED94 D217 39E9 Daniel Kahn Gillmor Daniel Kahn Gillmor Daniel Kahn Gillmor Daniel Kahn Gillmor [jpeg image of size 3515] This key is due to expire on 2012-05-31. 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 trust marginally 2 = I trust fully Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter a domain to restrict this signature, or enter for none. Are you sure that you want to sign this key with your key "ssh://pip.fifthhorseman.net" (9B83C17D) The signature will be marked as non-exportable. gpg: can't create `/var/lib/monkeysphere/gnupg-host/pubring.gpg.tmp': Permission denied gpg: failed to rebuild keyring cache: file open error gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 1 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: depth: 1 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 1f, 0u gpg: next trustdb check due at 2009-03-30 Identity certifier added. 0 pip:~#