OfflineIMAP-Passwort verschlüsseln


19

Ich versuche, OfflineIMAP für die Authentifizierung über eine gpg-verschlüsselte Datei einzurichten (auf diese Weise kann ich die gesamte Verschlüsselung für meinen gpg-agent-Prozess konsolidieren).

Aus der Dokumentation geht hervor, dass die einzige Möglichkeit zum Verschlüsseln von Serverkennwörtern die Verwendung des Gnome-Schlüsselbunds ist (den ich lieber nicht auf meinem kopflosen Server ausführen möchte). Gibt es eine Möglichkeit, mein Passwort aus einer gpg-Datei einzugeben, wie Sie es mit mutt tun können?

Ich weiß, dass Sie offlineimap mit der Erweiterungs-Python-Datei zusätzliche Funktionen hinzufügen können, aber ich fürchte, ich würde nicht wissen, wo ich damit anfangen soll.



@jasonwryan Link ist ausgefallen? NVM: Link korrigieren .
JW013

Dieser Link ist etwas irreführend. Das Verschlüsseln von Dateien ist eine gute Möglichkeit, um zu verhindern, dass Personen beim Diebstahl Ihrer Festplatte / Ihres Computers auf nützliche Dinge stoßen. Für einen böswilligen Root-Benutzer auf demselben Computer, auf dem Sie sich anmelden, ist dies jedoch nur eine geringfügige Geschwindigkeitsverletzung. Es gibt viele Dinge, die ein rootBenutzer tun könnte, um die Verschlüsselung zu umgehen. Denken Sie daran, dass auch das Weiterleiten von X11 von nicht vertrauenswürdigen Computern (z. B. über ssh -X) nicht sicher ist.
JW013

Ich speichere einfach alle meine kennworthaltigen Konfigurationsdateien in einem ecryptfs- Container, der beim Anmelden aktiviert wird , ersetze das Original durch einen Symlink und beende es.
JW013

Antworten:


6

Eine andere Möglichkeit, offlineimap mit Kenntnis Ihres Passworts laufen zu lassen, ohne das Passwort auf die Festplatte zu legen, besteht darin, offlineimap in tmux / screen laufen zu lassen, wobei die autorefreshEinstellung in Ihrem Browser aktiviert ist~/.offlineimaprc

Sie müssen autorefresh = 10den [Account X]Abschnitt der offlineimaprc-Datei hinzufügen, damit diese alle 10 Minuten überprüft wird. Löschen Sie auch jede Konfigurationszeile mit passwordoder passwordeval.

Dann führen Sie offlineimap aus - es fragt nach Ihrem Passwort und speichert es im Speicher. Es wird nach dem ersten Lauf nicht beendet, sondern für 10 Minuten in den Ruhezustand versetzt. Dann wird es wieder aktiviert und ausgeführt, aber es wird sich immer noch an Ihr Passwort erinnern.

Sie können also eine tmux-Sitzung mit offlineimap verlassen, Ihr Passwort einmal eingeben und offlineimap ist danach in Ordnung.


29

Ich benutze die folgende Methode, die ziemlich gut funktioniert:

1) Speichern Sie Ihre Passwörter in separaten gpg-verschlüsselten Dateien. Beispielsweise~/.passwd/<accountname>.gpg

2) Erstellen Sie eine Python-Erweiterungsdatei mit einem Namen Ihrer Wahl (z. B. ~/.offlineimap.py) mit folgendem Inhalt:

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) Ändern Sie Ihre .offlineimaprc-Datei, um sie über die Python-Datei zu informieren und um ihr mitzuteilen, wie sie Ihre Passwörter lesen soll

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

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

Wenn Sie über mehrere Konten verfügen, die gleichzeitig überprüft werden (separate Threads), und Sie gpg-agent verwenden, werden Sie nach der Passphrase für jedes Konto gefragt. Ich bereite den Agenten vor, indem ich eine Datei ( echo "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpg) erstelle , und bereite den gpg-Agenten vor, indem ich diese Datei beim Start von offlineimap entschlüssele. Fügen Sie dazu am Ende von Folgendes hinzu ~/.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
Diese Antwort funktioniert wirklich gut. Stellen Sie einfach sicher, dass Sie absolute Pfade verwenden, da der Unterprozessbefehl die verschlüsselten Dateien sonst nicht findet.
Clément B.

4

Ich liebe die Antwort von @ kbeta. Wurde subprocess.check_output()jedoch nur in Python 2.7 eingeführt - hier ist eine Version offlineimap.py, die mit älteren Python-Versionen funktioniert:

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 ''
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.