OfflineIMAP Parolasını Şifrele


19

Bir gpg şifreli dosya üzerinden kimlik doğrulaması yapmak için OfflineIMAP kurmaya çalışıyorum (bu şekilde tüm şifrelememi gpg aracısı işlemime birleştirebilirim).

Belgelere göre, bir kişinin sunucu şifrelerini şifrelemenin tek yolu gnome-keyring (başsız sunucumda çalışmamayı tercih ediyorum) kullanmaktır. Bir gpg dosyasından şifremi mutt ile yapabileceğiniz şekilde pipetlemenin bir yolu var mı?

Çevrimdışı haritaya eklenti python dosyası ile ekstra özellikler ekleyebileceğinizi biliyorum, ama bununla nereden başlayacağımı bilmiyorum.


1
Does bu işi ?
jasonwryan

@jasonwryan Bağlantı kesildi mi? NVM: Doğru bağlantı .
jw013

Bu bağlantı biraz yanıltıcı. Dosyaları şifrelemek, insanların sabit sürücünüzü / bilgisayarınızı çaldığında yararlı bir şey almasını önlemenin iyi bir yoludur, ancak oturum açtığınız aynı kutudaki kötü amaçlı bir kök kullanıcı için sadece küçük bir hız tümseği. Bir rootkullanıcının şifrelemeyi aşmak için yapabileceği birçok şey vardır . Güvenilmeyen makinelerden (ör. Yoluyla ssh -X) X11 yönlendirmenin bile güvenli olmadığını unutmayın.
jw013

Oturum açtığımda bağlanan , orijinali bir sembolik ile değiştiren ve onunla yapılacak bir ecryptfs kapsayıcısına tüm parola içeren yapılandırma dosyalarımı döktüm .
jw013

Yanıtlar:


6

Çevrimdışı haritanızı şifrenizin bilgisiyle çalışır halde bırakmanın başka bir yöntemi, parolayı diske koymadan, çevrimdışı haritanızı autorefreshayarınız etkinken tmux / ekran üzerinde çalışır durumda bırakmaktır~/.offlineimaprc

Sen eklemem gerekiyor autorefresh = 10için [Account X]her 10 dakikada bir kontrol etmek için, offlineimaprc dosyasının bölümüne. Herhangi bir yapılandırma satırını passwordveya ile silin passwordeval.

Sonra offlineimap çalıştırın - şifrenizi soracak ve bellekte önbellekleyecektir. İlk çalıştırmadan sonra çıkmaz, ancak 10 dakika uyur. Ardından uyanır ve tekrar çalışır, ancak yine de şifrenizi hatırlar.

Böylece offlineimap ile çalışan bir tmux oturumundan ayrılabilir, şifrenizi bir kez girebilirsiniz ve offlineimap daha sonra iyi durumda olacaktır.


29

Oldukça iyi çalışan aşağıdaki yöntemi kullanıyorum:

1) Parolalarınızı ayrı gpg şifreli dosyalarda saklayın. Örneğin~/.passwd/<accountname>.gpg

2) ~/.offlineimap.pyAşağıdaki içeriğe sahip , seçtiğiniz bir adla (örn. ) Bir python uzantı dosyası oluşturun :

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) .offlineimaprc dosyanızı python dosyası hakkında ve parolalarınızı nasıl okuyacağınızı anlatacak şekilde değiştirin

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

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

Aynı anda kontrol edilen birden fazla hesabınız varsa (ayrı iş parçacıkları) ve gpg-agent kullanıyorsanız, her hesap için parola ister. Bir dosya ( echo "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpg) oluşturarak ve offlineimap başlatıldığında bu dosyanın şifresini çözerek gpg aracısını hazırlayarak aracıyı hazırlatırım. Bunu yapmak için aşağıdakilerin sonuna ekleyin ~/.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
Bu cevap gerçekten iyi çalışıyor. Mutlak yollar kullandığınızdan emin olun, aksi takdirde alt işlem komutu şifrelenmiş dosyaları bulamaz.
Clément B.

4

@Kbeta'dan gelen cevabı çok seviyorum. Ancak subprocess.check_output()sadece python 2.7'de tanıtıldı - işte offlineimap.pypython'un eski sürümleriyle çalışacak bir sürümü :

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 ''
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.