[[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 <dkg@fifthhorseman.net>" 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 <dkg@fifthhorseman.net>" 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 <dkg@fifthhorseman.net>
     uid       [ unknown] Daniel Kahn Gillmor <dkg@openflows.com>
     uid       [ unknown] Daniel Kahn Gillmor <dkg@astro.columbia.edu>
     uid       [ unknown] Daniel Kahn Gillmor <dkg-debian.org@fifthhorseman.net>
     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 <dkg@fifthhorseman.net>" 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 <dkg@fifthhorseman.net>
     [ unknown] (2)  Daniel Kahn Gillmor <dkg@openflows.com>
     [ unknown] (3)  Daniel Kahn Gillmor <dkg@astro.columbia.edu>
     [ unknown] (4)  Daniel Kahn Gillmor <dkg-debian.org@fifthhorseman.net>
     [ 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 <dkg@fifthhorseman.net>
          Daniel Kahn Gillmor <dkg@openflows.com>
          Daniel Kahn Gillmor <dkg@astro.columbia.edu>
          Daniel Kahn Gillmor <dkg-debian.org@fifthhorseman.net>
          [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:~#