Criptografar offlineIMAP senha

19

Estou tentando configurar o OfflineIMAP para autenticar através de um arquivo criptografado por gpg (dessa forma, posso consolidar toda a minha criptografia no processo do agente gpg).

A partir da documentação, parece que a única maneira de criptografar as senhas de um servidor é usar o gnome-keyring (que eu preferiria não executar no meu servidor sem cabeça). Existe uma maneira de inserir minha senha de um arquivo gpg da maneira que você pode com o mutt?

Eu sei que você pode adicionar recursos extras ao offlineimap com o arquivo python de extensão, mas temo não saber por onde começar.

Tammer Ibrahim
fonte
11
Isso funciona ?
jasonwryan
@jasonwryan O link está desativado? NVM: Link correto .
Jw013
Esse link é um pouco enganador. Criptografar arquivos é uma boa maneira de impedir que as pessoas obtenham algo de útil quando roubam seu disco rígido / computador, mas é apenas um pequeno aumento de velocidade para um usuário raiz mal-intencionado na mesma caixa em que você está fazendo logon. Há muitas coisas que um rootusuário pode fazer para contornar a criptografia. Lembre-se de que mesmo o encaminhamento X11 de máquinas não confiáveis ​​(por exemplo, via ssh -X) não é seguro.
Jw013 31/07/12
Apenas despejo todos os meus arquivos de configuração que contêm senhas em um contêiner ecryptfs que é montado quando eu faço login, substituo o original por um link simbólico e pronto.
Jw013 31/07/12
11
Verifique também quotenil.com/OfflineIMAP-with-Encrypted-Authinfo.html
Nikos Alexandris

Respostas:

6

Outro método de deixar offlineimap em execução com o conhecimento de sua senha, mas sem colocar a senha no disco, é deixar offlineimap em execução no tmux / screen com a autorefreshconfiguração ativada no seu~/.offlineimaprc

Você precisa adicionar autorefresh = 10à [Account X]seção do arquivo offlineimaprc para fazer a verificação a cada 10 minutos. Exclua também qualquer linha de configuração com passwordou passwordeval.

Em seguida, execute offlineimap - ele solicitará sua senha e a armazenará em cache na memória. Ele não sai após a primeira execução, mas dorme por 10 minutos. Em seguida, ele será ativado e executado novamente, mas ainda lembrará sua senha.

Assim, você pode deixar uma sessão do tmux em execução com offlineimap, digite sua senha uma vez e offlineimap ficará bem depois.

Hamish Downer
fonte
29

Eu uso o seguinte método, que funciona bastante bem:

1) Armazene suas senhas em arquivos criptografados separados por gpg. Por exemplo~/.passwd/<accountname>.gpg

2) Crie um arquivo de extensão python com o nome de sua escolha (por exemplo, ~/.offlineimap.py), com o seguinte conteúdo:

def mailpasswd(acct):
  acct = os.path.basename(acct)
  path = "/home/<username>/.passwd/%s.gpg" % acct
  args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path]
  try:
    return subprocess.check_output(args).strip()
  except subprocess.CalledProcessError:
    return ""

3) Modifique o arquivo .offlineimaprc para informar sobre o arquivo python e como ler suas senhas

[general]
pythonfile = ~/.offlineimap.py
# ...

[Repository <reponame>]
# add this line for each remote repository
remotepasseval = mailpasswd("<accountname>")

Se você possui várias contas que são verificadas simultaneamente (threads separados) e usa o gpg-agent, ele solicitará a senha de cada conta. Preparo o agente criando um arquivo ( echo "prime" | gpg -e -r [email protected] > ~/.passwd/prime.gpg) e iniciando o agente gpg descriptografando esse arquivo no lançamento do offlineimap. Para fazer isso, adicione o seguinte ao final de ~/.offlineimap.py:

def prime_gpg_agent():
  ret = False
  i = 1
  while not ret:
    ret = (mailpasswd("prime") == "prime")
    if i > 2:
      from offlineimap.ui import getglobalui
      sys.stderr.write("Error reading in passwords. Terminating.\n")
      getglobalui().terminate()
    i += 1
  return ret

prime_gpg_agent()
kbeta
fonte
11
Esta resposta funciona muito bem. Apenas certifique-se de usar caminhos absolutos, ou o comando subprocess não encontrará os arquivos criptografados.
Clément B.
4

Amando a resposta de @kbeta. No entanto, subprocess.check_output()foi introduzido apenas no python 2.7 - então aqui está uma versão offlineimap.pyque funcionará com versões mais antigas do python:

import os
import subprocess

def mailpasswd(acct):
    acct = os.path.basename(acct)
    path = "/home/hamish/.passwd/%s.gpg" % acct
    args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path]
    proc = subprocess.Popen(args, stdout=subprocess.PIPE)
    output = proc.communicate()[0].strip()
    retcode = proc.wait()
    if retcode == 0:
        return output
    else:
        return ''
Hamish Downer
fonte