ऑफ़लाइन पासवर्ड एन्क्रिप्ट करें


19

मैं एक Gpg एन्क्रिप्टेड फ़ाइल के माध्यम से प्रमाणित करने के लिए ऑफलाइनआईएमएपी स्थापित करने का प्रयास कर रहा हूं (इस तरह मैं अपने सभी एन्क्रिप्शन को अपने जीपीजी-एजेंट प्रक्रिया में समेकित कर सकता हूं)।

प्रलेखन से, यह एक ही तरीका है कि किसी के सर्वर पासवर्ड को एन्क्रिप्ट करने का तरीका सूक्ति-कीरिंग का उपयोग करना है (जो मैं अपने हेडलेस सर्वर पर नहीं चलाना चाहूंगा)। क्या मेरे पासवर्ड को gpg से पाइप करने का एक तरीका है जिस तरह से आप म्यूट कर सकते हैं?

मुझे पता है कि आप एक्सटेंशन पायथन फाइल के साथ ऑफलाइन फीचर में अतिरिक्त फीचर जोड़ सकते हैं, लेकिन मुझे डर है कि मुझे नहीं पता होगा कि कहां से शुरू करना है।


1
क्या यह काम करता है ?
जसोनव्रीयन

@jasonwryan लिंक नीचे है? एनवीएम: सही लिंक
jw013

वह लिंक थोड़ा भ्रामक है। फ़ाइलों को एन्क्रिप्ट करना एक अच्छा तरीका है जब लोगों को आपकी हार्ड ड्राइव / कंप्यूटर को चोरी करने से कुछ भी उपयोगी होने से रोकने के लिए, लेकिन यह केवल उसी बॉक्स पर दुर्भावनापूर्ण रूट उपयोगकर्ता के लिए एक मामूली गति टक्कर है जिस पर आप लॉग इन कर रहे हैं। कई चीजें हैं जो एक rootउपयोगकर्ता एन्क्रिप्शन के आसपास पाने के लिए कर सकता है। याद रखें कि अविश्वसनीय मशीनों से भी X11 अग्रेषित करना (जैसे कि ssh -X) सुरक्षित नहीं है।
jw013

मैं बस अपने सभी पासवर्ड युक्त कॉन्फ़िगरेशन फ़ाइलों को एक ईक्रिप्टिफ़ कंटेनर में डंप करता हूं जो लॉग इन करते समय माउंट करता है, मूल को सिमलिंक से बदल देता है, और इसके साथ किया जाता है।
jw013

जवाबों:


6

अपने पासवर्ड के ज्ञान के साथ ऑफ़लाइनमैप को छोड़ने का एक और तरीका है, लेकिन पासवर्ड को डिस्क पर रखे बिना, ऑफ़लाइन autorefreshकरना है, अपने में सक्षम सेटिंग के साथ tmux / स्क्रीन में चल रहा है~/.offlineimaprc

आपको प्रत्येक 10 मिनट की जांच करने के लिए, ऑफलाइनमाप्के फ़ाइल autorefresh = 10के [Account X]अनुभाग में जोड़ना होगा । इसके अलावा के साथ किसी भी config लाइन को हटाना passwordया passwordeval

फिर ऑफलाइनमैप चलाएं - यह आपके पासवर्ड के लिए पूछेगा और इसे मेमोरी में कैशे करेगा। यह पहले रन के बाद बाहर नहीं निकलेगा, लेकिन 10 मिनट तक सोएगा। फिर यह जाग जाएगा और फिर से चलेगा, लेकिन यह अभी भी आपका पासवर्ड याद रखेगा।

तो आप ऑफलाइनम के साथ चल रहे tmux सत्र को छोड़ सकते हैं, अपना पासवर्ड एक बार दर्ज कर सकते हैं, और उसके बाद ऑफलाइनमाप ठीक रहेगा।


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- एजेंट का उपयोग करते हैं, तो यह आपसे प्रत्येक खाते के लिए पासफ़्रेज़ मांगेगा। मैं एक फ़ाइल ( echo "prime" | gpg -e -r foo@bar.com > ~/.passwd/prime.gpg) बनाकर एजेंट को प्राइम करता हूं , और ऑफलाइन फाइल के लॉन्च पर इस फाइल को डिक्रिप्ट करके 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
यह उत्तर वास्तव में अच्छी तरह से काम करता है। बस सुनिश्चित करें कि आप निरपेक्ष पथों का उपयोग करते हैं, या उपप्रक्रम कमांड एन्क्रिप्टेड फ़ाइलों को नहीं मिलेगा।
क्लेमेंट बी।

4

@Kbeta से जवाब पसंद है। हालाँकि, subprocess.check_output()केवल अजगर 2.7 में पेश किया गया था - इसलिए यहाँ एक संस्करण है offlineimap.pyजो अजगर के पुराने संस्करणों के साथ काम करेगा:

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 ''
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.