python-gnupg search_keys () retorna resultado diferente quando executado como root

0

Eu tenho um script python que precisa ser executado como root (para acessar framebuffer em um pi de framboesa com um pequeno touchscreen ). Esse script também precisa procurar chaves em um servidor de chaves. Para conseguir isso, estou usando a função search_keys() de python-gnupg .

O script a seguir funciona bem quando eu o executo com python gpg_test.py :

import gnupg

gpg= gnupg.GPG(gnupghome="/home/pi/.gnupg")
keyserver= "pool.sks-keyservers.net"
search_string= "[email protected]"
print gpg.search_keys(search_string, keyserver)

Isto imprime uma lista contendo algumas chaves.

No entanto, se eu executar o mesmo script com sudo python gpg_test.py , acabei de obter uma lista vazia. Alguém sabe o motivo desse comportamento? E talvez uma solução para fazê-lo funcionar quando executado como root?

Edit: Eu olhei para a fonte do python-gnupg e descobri que o resultado de search_keys() inclui a saída stderr da chamada pgp subjacente. Atribuindo o resultado de search_keys () a uma variável result e chamando print result.stderr imprime o seguinte:

gpg: WARNING: unsafe ownership on homedir '/home/pi/.gnupg'
gpg: external program calls are disabled due to unsafe options file permissions
gpg: keyserver communications error: general error
gpg: keyserver search failed: general error

Portanto, parece-me que o problema é que estou tentando acessar o homedir pgp de um usuário diferente ( pi em vez de root ).

Edit: Mudar o dono do /home/pi/.gnupg para o root corrigiu, mas isso parece ser uma "solução" horrível. E também me obriga a usar sudo gpg ... em vez de gpg ... quando eu quiser usar o gpg na linha de comando. Então, ainda estou curioso sobre melhores soluções!

    
por Dave 23.09.2014 / 21:31

1 resposta

0

Estou respondendo minha própria pergunta aqui, caso alguém tenha um problema semelhante.

Minha solução foi inicializar python-gnupg com um novo homedir. Esse novo homedir agora pertence ao usuário root porque o script é executado como root.

Dessa forma, tudo o que o script faz é independente da instalação do gpg que eu acesso ao digitar gpg [command] no terminal. E não há mais erros ao pesquisar servidores de chaves.

Portanto, alterar o código python acima faz o trabalho:

import gnupg

gpg= gnupg.GPG(gnupghome="/home/pi/gnupg_myscript")
keyserver= "pool.sks-keyservers.net"
search_string= "[email protected]"
print gpg.search_keys(search_string, keyserver)
    
por 24.09.2014 / 16:28