Crittografa password OfflineIMAP


19

Sto cercando di configurare OfflineIMAP per l'autenticazione tramite un file crittografato con gpg (in questo modo posso consolidare tutta la mia crittografia nel mio processo di agente gpg).

Dalla documentazione, sembra che l'unico modo per crittografare le password del proprio server sia utilizzare gnome-keyring (che preferirei non eseguire sul mio server senza testa). C'è un modo per reindirizzare la mia password da un file gpg come puoi con mutt?

So che puoi aggiungere funzionalità extra a offlineimap con il file di estensione python, ma temo di non sapere da dove cominciare.



@jasonwryan Il link non funziona? NVM: collegamento corretto .
jw013

Quel collegamento è un po 'fuorviante. La crittografia dei file è un buon modo per impedire alle persone di ottenere qualcosa di utile quando rubano il tuo disco rigido / computer, ma è solo un piccolo aumento di velocità per un utente root dannoso nella stessa casella in cui stai effettuando l'accesso. Ci sono molte cose che un rootutente potrebbe fare per aggirare la crittografia. Ricorda che anche l'inoltro X11 da macchine non attendibili (ad es. Via ssh -X) non è sicuro.
jw013

Ho appena scaricato tutti i miei file di configurazione contenenti password in un contenitore ecryptfs che si monta quando eseguo l' accesso, sostituisco l'originale con un collegamento simbolico e ho finito.
jw013

Risposte:


6

Un altro metodo per lasciare offlineimap in esecuzione con la conoscenza della tua password, ma senza mettere la password sul disco, è di lasciare offlineimap in esecuzione in tmux / screen con l' autorefreshimpostazione abilitata nel tuo~/.offlineimaprc

È necessario aggiungere autorefresh = 10alla [Account X]sezione del file offlineimaprc, per farlo controllare ogni 10 minuti. Elimina anche qualsiasi riga di configurazione con passwordo passwordeval.

Quindi esegui offlineimap: ti chiederà la password e la memorizzerà nella cache. Non uscirà dopo la prima corsa, ma dormirà per 10 minuti. Quindi si risveglierà e funzionerà di nuovo, ma ricorderà comunque la tua password.

Quindi puoi lasciare una sessione di tmux in esecuzione con offlineimap, inserire la password una volta e offlineimap andrà bene lì dopo.


29

Uso il seguente metodo, che funziona abbastanza bene:

1) Memorizza le tue password in file crittografati gpg separati. Per esempio~/.passwd/<accountname>.gpg

2) Crea un file di estensione python con un nome di tua scelta (ad es. ~/.offlineimap.py), Con i seguenti contenuti:

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) Modifica il tuo file .offlineimaprc per raccontarlo sul file Python e per dirgli come leggere le tue password

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

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

Se hai diversi account che vengono controllati contemporaneamente (thread separati) e usi gpg-agent, ti chiederà la passphrase per ogni account. Adesco l'agente creando un file ( echo "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpg) e innescando l'agente gpg decodificando questo file all'avvio di offlineimap. Per fare ciò, aggiungi quanto segue alla fine di ~/.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()

1
Questa risposta funziona davvero bene. Assicurati solo di usare percorsi assoluti, altrimenti il ​​comando subprocess non troverà i file crittografati.
Clément B.

4

Adoro la risposta di @kbeta. Tuttavia, è subprocess.check_output()stato introdotto solo in Python 2.7, quindi ecco una versione offlineimap.pyche funzionerà con le versioni precedenti di 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 ''
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.