GnuPG - Jak upravit soubor bez dešifrování uložit na lokální disk jako první?

hlasů
17

Já používám GnuPG šifrování moje soubory ASCII.

Naučil jsem se vygeneruje klíč, také jak používat jej pro šifrování a dešifrování souborů.

Existují dva způsoby, jak jsem použil:

gpg -d foo.txt.gpg

a

gpg --output foo.txt --decrypt
foo.txt.gpg

Uvědomil jsem si, první metoda zobrazí dešifrovaný soubor na obrazovce, například když jsem provedl příkaz přes SSH.

Co se týče druhého způsobu, dotyčný by mě, jestli to bude zanechat stopu na místním počítači - souboru foo.txt.

A co je nejdůležitější, já nevím, jak upravit obsah souboru foo v reálném čase. V ideálním případě bych chtěl otevřít soubor v průběhu používání SSH nano / pico, zadejte svůj přístupové heslo k dešifrování a pak upravit soubor, uložit a šifrovat. Moc rád vyhnul uložit všechny soubory na lokální disk.

Jakékoliv připomínky jsou vítány.

Děkuji předem.

Položena 02/10/2009 v 16:04
zdroj uživatelem
V jiných jazycích...                            


14 odpovědí

hlasů
5

Jednou z možností je použití vim. Viz tuto stránku a tento související otázku.

Pokud budete potřebovat více pružnosti, nebo nechtějí používat vim, psaní krátký program číst dešifrovaný text, přicházející z STDOUT upravit podle svých představ, a pak re-šifrování není příliš obtížné. Například, můžete použít tento minimální Python kód (104 řádků!) Dát holé kosti editor, a pak přidat další funkce potoka čtení a psaní sami.

Odpovězeno 02/10/2009 v 16:31
zdroj uživatelem

hlasů
4

Napsal jsem skript se to vyřešit (pro Linux). Funguje tak, že dešifrování soubor do / dev / shm zajistit, aby nezašifrované data nikdy zapsána na disk (i když je možné, že některý z programů s využitím údajů, které mají být vyměnil na disk, což je téměř vždy obavy).

To má několik výhod oproti některé z dalších přidaných odpovědi:

  • Jediné, co potřebujete k zadání hesla, jakmile
  • Pracuje s jakýmkoliv editorem

Zde je kód:

#!/usr/bin/python
import os, sys, subprocess, getpass, stat, shutil

editor = 'nano'
dataFile = sys.argv[1]

## make a backup of the encrypted file
bakFile = dataFile+'-gpgedit_backup'
shutil.copy(dataFile, bakFile)
dstat = os.stat(dataFile)

##  create temporary directory in tmpfs to work from
tmpDir = '/dev/shm/gpgedit'
n = 0
while True:
    try:
        os.mkdir(tmpDir+str(n))
        break
    except OSError as err:
        if err.errno != 17:  ## file already exists
            raise
    n += 1
tmpDir += str(n)

os.chmod(tmpDir, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)


try:
    ## Get password
    passwd = getpass.getpass()

    ## decrypt file
    tmpFile = os.path.join(tmpDir, 'data')
    cmd = "gpg -d --passphrase-fd 0 --output %s %s" % (tmpFile, dataFile)
    proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
    proc.stdin.write(passwd)
    proc.stdin.close()
    if proc.wait() != 0:
        raise Exception("Error decrypting file.")

    ## record stats of tmp file
    stat = os.stat(tmpFile)

    ## invoke editor
    os.system('%s %s' % (editor, tmpFile))

    ## see whether data has changed
    stat2 = os.stat(tmpFile)
    if stat.st_mtime == stat2.st_mtime and stat.st_size == stat2.st_size:
        raise Exception("Data unchanged; not writing encrypted file.")

    ## re-encrypt, write back to original file
    cmd = "gpg --yes --symmetric --passphrase-fd 0 --output %s %s" % (dataFile, tmpFile)
    proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
    proc.stdin.write(passwd)
    proc.stdin.close()
    if proc.wait() != 0:
        raise Exception("Error encrypting file.")
except:
    ## If there was an error AND the data file was modified, restore the backup.
    dstat2 = os.stat(dataFile)
    if dstat.st_mtime != dstat2.st_mtime or dstat.st_size != dstat2.st_size:
        print "Error occurred, restored encrypted file from backup."
        shutil.copy(bakFile, dataFile)
    raise
finally:
    shutil.rmtree(tmpDir)
    os.remove(bakFile)
Odpovězeno 05/09/2012 v 22:19
zdroj uživatelem

hlasů
2

Kde je GnuPG plugin - přesně na tomto místě např

Odpovězeno 24/05/2013 v 06:32
zdroj uživatelem

hlasů
2

Jedna věc je třeba mít na paměti, že drží nešifrovaná data v paměti není žádná záruka, že to zvyklý najít svou cestu na disk. Pokud daný systém je zatížení jakékoliv nešifrovaná data mohou být zapsána do swap partition. Podobně, pokud je systém uveden do režimu spánku, je stav jakýchkoli suspendovaných procesů se uloží na disk. Je-li váš program běží na vestavěný systém, je možné, že vaše paměť a „disk“ jsou jedno a totéž.

mlock()Volání systém bude chránit přidělené paměti od získání vyměnil na disk. To však vyžaduje oprávnění správce a omezuje vás na jazyku nízké úrovně, kde jsou přímo odpovědné za správu paměti.

To znamená, že je rozumné, aby se zabránilo vytváření souborů s nešifrovaná data. Jen vím, že to nebude nabídnout bezpečnost 100%, pokud je ohrožena základní systém.

Odpovězeno 03/10/2009 v 07:37
zdroj uživatelem

hlasů
1

Inspirovaná Lukášova odpověď jsem napsal skript se sám. Doufejme, že někdo najde to užitečné. Zde jsou klíčové vlastnosti:

  • používá dočasný soubor v adresáři / dev / shm pomocí bezpečný způsob generování tempfile
  • vytvoří záložní soubor v případě selhání
  • oba způsoby šifrování (veřejný klíč / symetrický)
  • vytvořte nový soubor on-the-fly
  • Vyberte si editor pomocí proměnných prostředí

Další informace lze najít v samotném skriptu. V současné době nebude fungovat na libovolném non * nix-stroj.

Pro instalaci skriptu stačí dát ho do libovolného adresáře na vaší cestě a učinit z něj spustitelný.

Get It Now!

Varování: Zálohování dat! Skript je bez jakékoliv záruky!

Odpovězeno 06/10/2014 v 13:39
zdroj uživatelem

hlasů
1

Alternativou je, že mají tmp do RAM použitím tmpfs pak, když vypne je pryč navždy.

Odpovězeno 02/10/2009 v 16:31
zdroj uživatelem

hlasů
0

Zde je mírné zlepšení na @ Lukově odpověď. To dává dvě malé vylepšení:

  • To se vyhne trasování zásobníku v případě, že soubor je nezměněn během úprav relace.

  • To obnoví původní soubor gpg-li re-šifrování zpět do původního souboru gpg byl pokus, což je o něco bezpečnější než kontrola data modifikace souboru pro úpravy.

#!/usr/bin/python

# Downloaded from https://stackoverflow.com/questions/1510105/gnupg-how-to-edit-the-file-without-decrypt-and-save-to-local-disk-first/12289967#12289967
# and then slightly improved.

import os, sys, subprocess, getpass, stat, shutil

editor = 'nano'
dataFile = sys.argv[1]

## make a backup of the encrypted file
bakFile = dataFile+'-gpgedit_backup'
shutil.copy(dataFile, bakFile)
dstat = os.stat(dataFile)

##  create temporary directory in tmpfs to work from
tmpDir = '/dev/shm/gpgedit'
n = 0
while True:
    try:
        os.mkdir(tmpDir+str(n))
        break
    except OSError as err:
        if err.errno != 17:  ## file already exists
            raise
    n += 1
tmpDir += str(n)

os.chmod(tmpDir, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)


reEncrypted = False
try:
    ## Get password
    passwd = getpass.getpass()

    ## decrypt file
    tmpFile = os.path.join(tmpDir, 'data')
    cmd = "gpg -d --cipher-algo AES256 --passphrase-fd 0 --output %s %s" % (tmpFile, dataFile)
    proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
    proc.stdin.write(passwd)
    proc.stdin.close()
    if proc.wait() != 0:
        raise Exception("Error decrypting file.")

    ## record stats of tmp file
    stat = os.stat(tmpFile)

    ## invoke editor
    os.system('%s %s' % (editor, tmpFile))

    ## see whether data has changed
    stat2 = os.stat(tmpFile)
    if stat.st_mtime == stat2.st_mtime and stat.st_size == stat2.st_size:
        print "Data unchanged; not re-writing encrypted file."
    else:
        ## re-encrypt, write back to original file
    reEncrypted = True
        cmd = "gpg --yes --symmetric --cipher-algo AES256 --passphrase-fd 0 --output %s %s" % (dataFile, tmpFile)
        proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE)
        proc.stdin.write(passwd)
        proc.stdin.close()
        if proc.wait() != 0:
            raise Exception("Error encrypting file.")
except:
    ## If there was an error AND re-encryption was attempted, restore the backup.
    if reEncrypted:
        print "Error occurred; restoring encrypted file from backup."
        shutil.copy(bakFile, dataFile)
    raise
finally:
    shutil.rmtree(tmpDir)
    os.remove(bakFile)

Já bych zaslali tyto návrhy na zlepšení jsou komentáře k @ Lukově odpověď - což se mi líbí hodně - ale neměl dostatek reputace bodů, aby tak učinily. :(

Odpovězeno 21/10/2017 v 02:24
zdroj uživatelem

hlasů
0

Jsem strávil bezpočet hodin na této cestě, taky: jednoduše zašifrovat textový soubor s přístupovým heslem s jednoduchým Otevřené + přístup pro čtení / zápis. Nechtěl jsem, aby se vypořádat s vlastním / veřejných klíčů ani klíčenek vázaných na přihlašovací OS, bla, bla, bla. šifrování souborů s přístupovým heslem je tak jednoduché, a tak univerzální a ideální pro jednoduchý textový soubor držet hesla pouze. Ne udit ani komplikace řešení databáze-řízený jako KeePass, atd (což také vyžaduje zadání dat do více prvků GUI, spíše než jen psát vaše hesla s možností vyhledávání textového souboru). Zlatý standard v systému Windows je Steganos LockNote. Jak to udělat na Linux? Překvapivě velmi obtížné najít, ale ...

Nakonec jsem se soustředil na doporučení považuji za nejlepší: krém. http://cream.sourceforge.net/ Cream je fasáda na vim, aby bylo více-user-friendly ... užitečné i pro ostatní členy rodiny (Jsem Linux geek, v práci spokojeni s vi [m], ale já potřeboval něco přístupnější pro mou rodinu).

Stačí zadat:

"Vim -x yourfile.txt"

Bude uložen jako šifrována pomocí přístupového hesla.

Můžete použít vim nebo smetany v tomto bodě:

"Vim yourfile.txt" nebo "krém yourfile.txt".

Buď z nich bude nativně open „yourfile.txt“ a vyzve k zadání přístupového hesla a transparentně umožňují úpravy a opětovné uložení jako šifrována. Nakonec se úkol dokončen !!!!

Odpovězeno 10/10/2015 v 03:37
zdroj uživatelem

hlasů
0

Pomocí editoru joe (aka Joe vlastní editor ) v příkazu podobného

gpg --decrypt foo.txt.gpg | joe - | gpg --armor --recipient name@example.com --encrypt > bar.txt.gpg

bude dělat to, co hledáte.

-Ve joe -říká Joe vzít svůj vstup ze standardního vstupu a psát svůj výstup na standardní výstup při ukládání souboru (hit Ctrl + K a poté x zachránit). Joe bude zpočátku zobrazovat nějakou crufty výstup z GPG; toto může být zrušeno tím, že udeří ctrl + r aktualizujte obrazovku.

Používám > bar.txt.gpgurčit výstupní soubor namísto --output bar.txt.gpgprotože --outputpříznak způsobí gpg k otevření interaktivní dialog, pokud jste přepsání výstupního souboru, a to mate Joe.

Odpovězeno 18/01/2015 v 04:15
zdroj uživatelem

hlasů
0

viencrypt Paul Tarjan je skript pro editaci gpg šifrovaných souborů v reálném čase.

Odpovězeno 05/03/2014 v 00:59
zdroj uživatelem

hlasů
0

Nenávidím vi, takže jsem musel udělat nějaké lepidlo kolem nano. To je to, co jsem přišel s. Nevýhodou je, že budete muset znovu zadat heslo při šifrování.

alias file_ed="gpg file.txt.gpg; nano file.txt; gpg -c --force-mdc -o file.txt.gpg_temp file.txt; mv file.txt.gpg_temp file.txt.gpg; rm file.txt"

To není příliš bezpečné ze souborového systému hlediska, ale obávám se, ostatním uživatelům i sám, ne jako root.

Odpovězeno 20/10/2010 v 16:29
zdroj uživatelem

hlasů
0

Zrovna dnes jsem zjistil, se o způsob, jak dělat to vše v vim!

Zde je odkaz: plná howto o zřízení vim pro gpg souborů

funguje jako kouzlo, jen v tomto tutoriálu, odkaz na plugin je url na stránku tak, aby to wget, ale přejděte na stránku a vyberte ten, který chcete stáhnout.

Odpovězeno 14/10/2010 v 17:11
zdroj uživatelem

hlasů
0

Chcete-li otevřít gpg souborů, jejich editaci a poté ecrypt / uložit znovu použít: ikonu KGpg v systray má možnost: Editor ... Press na něj, pak otevřete soubor gpg, pak na dně se nachází tlačítko pro dešifrování a voila vás mít svůj soubor v editoru, poté, co jste provedli nějaké změny, stačí stisknout zašifrovat a poté ji uložit.

Odpovězeno 06/09/2010 v 10:14
zdroj uživatelem

hlasů
0

Pokud váš editor umí číst vstup z roury a uložit do potrubí, pak můžete skutečně použít verzi gpg který dešifruje na standardní výstup a šifruje ze standardního vstupu. Bohužel, pro nanotechnologie, čtení z roury se pouze plánuje 2.4 . Např gvim můžete svázat dešifrování a šifrování (potrubím) na klíč .

Odpovězeno 02/10/2009 v 16:28
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more