OfflineIMAP 비밀번호 암호화


19

gpg 암호화 파일을 통해 인증하도록 OfflineIMAP을 설정하려고합니다 (모든 암호화를 gpg 에이전트 프로세스에 통합 할 수 있습니다).

문서에서 서버 암호를 암호화하는 유일한 방법은 gnome-keyring을 사용하는 것입니다 (헤드리스 서버에서 실행하지 않는 것이 좋습니다). gpg 파일에서 내 비밀번호를 파이프로 할 수있는 방법으로 파이프하는 방법이 있습니까?

확장명 python 파일을 사용하여 offlineimap에 추가 기능을 추가 할 수 있다는 것을 알고 있지만 어디서부터 시작 해야할지 모르겠습니다.


1
합니까 이 일을 ?
jasonwryan

@jasonwryan 링크가 다운 되었습니까? NVM : 올바른 링크 .
jw013

그 링크는 약간 오해의 소지가 있습니다. 파일을 암호화하면 사람들이 하드 드라이브 / 컴퓨터를 훔칠 때 유용한 정보를 얻지 못하게하는 좋은 방법이지만, 로그인 한 상자에서 악의적 인 루트 사용자에게는 속도가 약간만 떨어집니다. root암호화를 피하기 위해 사용자가 할 수있는 일이 많이 있습니다 . 신뢰할 수없는 시스템 (예 :)을 통한 X11 포워딩도 ssh -X안전하지 않습니다.
jw013

로그인 할 때 마운트 되는 ecryptfs 컨테이너 에 모든 비밀번호가 포함 된 구성 파일을 덤프 하고 원본을 심볼릭 링크로 바꾸고 완료합니다.
jw013

답변:


6

암호를 알고 있지만 디스크에 암호를 입력하지 않고 offlineimap을 실행 상태로 두는 다른 방법은 offlineimap을 autorefresh설정을 활성화 한 상태에서 tmux / screen 에서~/.offlineimaprc

10 분마다 확인할 수 있도록 offlineimaprc 파일 autorefresh = 10[Account X]섹션에 추가해야합니다 . password또는로 구성 줄을 삭제하십시오 passwordeval.

그런 다음 offlineimap을 실행하십시오-암호를 요청하고 메모리에 캐시합니다. 첫 실행 후에는 종료되지 않지만 10 분 동안 휴면 상태가됩니다. 그런 다음 깨우고 다시 실행되지만 여전히 암호를 기억합니다.

따라서 offlineimap을 사용하여 tmux 세션을 종료하고 비밀번호를 한 번 입력하면 offlineimap이 정상적으로 작동합니다.


29

나는 다음과 같은 방법을 사용한다.

1) 암호를 별도의 gpg 암호화 파일에 저장하십시오. 예를 들어~/.passwd/<accountname>.gpg

2) ~/.offlineimap.py다음과 같은 내용으로 선택한 이름 (예 :)으로 파이썬 확장 파일을 만듭니다

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 파일을 수정하여 파이썬 파일에 대해 알려주고 암호를 읽는 방법을 알려주십시오.

[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
이 답변은 정말 잘 작동합니다. 절대 경로를 사용하지 않으면 subprocess 명령이 암호화 된 파일을 찾지 못합니다.
Clément B.

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.