OfflineIMAPパスワードを暗号化する


19

私はgpg暗号化ファイルを介して認証するようにOfflineIMAPを設定しようとしています(そのようにしてすべての暗号化をgpg-agentプロセスに統合できます)。

ドキュメントから、サーバーのパスワードを暗号化する唯一の方法はgnome-keyringを使用することだと思われます(ヘッドレスサーバーでは実行しないことをお勧めします)。muttで可能な方法でgpgファイルからパスワードをパイプする方法はありますか?

拡張機能のpythonファイルを使用してofflineimapに追加の機能を追加できることは知っていますが、どこから始めればいいのかわからないでしょう。


1
これは機能しますか?
-jasonwryan

@jasonwryanリンクがダウンしていますか?NVM:正しいリンク
jw013

そのリンクは少し誤解を招くです。ファイルの暗号化は、ユーザーがハードドライブ/コンピューターを盗むときに何か有用なものを取得するのを防ぐ良い方法ですが、ログインしている同じボックスで悪意のあるルートユーザーにとってはほんのわずかなスピードバンプです。root暗号化を回避するためにユーザーができることはたくさんあります。信頼できないマシンからのX11転送(を介したなどssh -X)でも安全ではないことに注意してください。
jw013

ログイン時にマウントするecryptfsコンテナーに、すべてのパスワードを含む構成ファイルをダンプし、元のファイルをシンボリックリンクに置き換えて完了です。
jw013

回答:


6

パスワードを知っているが、パスワードをディスクに保存せずにofflineimapを実行したままにする別の方法は、autorefresh設定を有効にしてtmux / screenでofflineimapを実行したままにすることです。~/.offlineimaprc

offlineimaprcファイルのセクションに追加autorefresh = 10して、[Account X]10分ごとにチェックするようにする必要があります。passwordまたはで設定行を削除しますpasswordeval

次にofflineimapを実行します-パスワードを要求し、メモリにキャッシュします。最初の実行後は終了しませんが、10分間スリープします。その後、スリープが解除されて再度実行されますが、パスワードは記憶されます。

したがって、tmuxセッションをofflineimapで実行したままにして、パスワードを1回入力するだけで、その後はofflineimapで問題なく実行できます。


29

私は次の方法を使用しますが、これはかなりうまく機能します。

1)パスワードを別のgpg暗号化ファイルに保存します。例えば~/.passwd/<accountname>.gpg

2)選択した名前(例:)~/.offlineimap.pyで、次の内容のpython拡張ファイルを作成します。

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ファイルを変更して、pythonファイルについて通知し、パスワードの読み方を通知します

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

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

同時にチェックされる複数のアカウント(別々のスレッド)があり、gpg-agentを使用している場合、各アカウントのパスフレーズが要求されます。ファイルを作成してエージェントecho "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpgを準備し()、offlineimapの起動時にこのファイルを復号化してgpgエージェントを準備します。これを行うには、次の行を末尾に追加します~/.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
この答えは本当にうまくいきます。絶対パスを使用してください。そうしないと、サブプロセスコマンドが暗号化されたファイルを見つけられません。
クレメントB。13年

4

@kbetaからの回答が大好きです。ただしsubprocess.check_output()、Python 2.7でのみ導入されたためofflineimap.py、古いバージョンの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 ''
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.