Portál AbcLinuxu, 30. dubna 2025 14:33

Šifrovaný adresář v Linuxu (2. aktualizace)

6.5.2012 21:11 | Přečteno: 1439× | GNU/Linux | poslední úprava: 9.5.2012 09:01

Tento zápisek pojednává o vytvoření adresáře, jehož obsah bude (automaticky) šifrován pomocí GNU Privacy Guard. Skripty nejsou dokonalé. Můžete si s nimi dělat, co chcete. Inspiroval jsem se (zdroj): http://legroom.net/howto/gnupg.

Vylepšené skripty pro (de)šifrování souborů v aktuálním adresáři

Když už jsem se pustil do psaní skriptů pro (de)šifrování, tak mi nedá, abych zde neuvedl vylepšenou verzi těchto skriptů. 2. aktualizace: místo příkazu rm používám bezpečnější příkaz srm (secure remove, secure_deletion toolkit). Též může být třeba použít příkazy smem, sfill a sswap:

#!/bin/bash
# zasifruj.sh
source /cesta/nastaveni || { echo 'Nepodarilo se nacist soubor s nastavenim' ; exit -1; }

GLOBIGNORE='*.gpg:.*.gpg'
for soubor in * .* ; do
   if [ -f "${soubor}" ] ; then
      gpg --homedir "${KLICE}" --encrypt-files --batch -q \
      --recipient 'Jmeno Prijmeni' "${soubor}"
      if [ $? -eq 0 ] ; then
         case "${1}" in
         [aA]) srm "${soubor}"
         ;;
         esac
      fi
   fi
done

Skript pro dešifrování:

#!/bin/bash
# desifruj.sh
source /cesta/nastaveni || { echo 'Nepodarilo se nacist soubor nastaveni' ; exit -1; }

for soubor in *.gpg .*.gpg ; do
   if [ -f "${soubor}" ] ; then
      echo 'heslo' | gpg --homedir "${KLICE}" --passphrase-fd 0 --decrypt-file --batch "${soubor}"
      if [ $? -eq 0 ] ; then
         case "${1}" in
         [aA]) srm "${soubor}"
         ;;
         esac
      fi
   fi
done

nastaveni:

KLICE='/cesta/.gnupg'

Co bude třeba

Budeme potřebovat program GNU Privacy Guard a jim vygenerované klíče, jeden veřejný a jeden privátní. Asymetrické šifrování jsem zvolil, protože lze data zašifrovat veřejným klíčem bez jakékoli znalosti hesla (passphrase). K dešifrování už je heslo nutné.

Upozornění

Používejte silná hesla (tzn. NE slovo ze slovníku apod.), která nikdy nezapomenete. Adresáři (a jeho obsahu) obsahující data pro program GNU Privacy Guard nastavte oprávnění hodně restriktivně -- např. pomocí chmod -R go-rwx ~/.gnupg. Je dobrou myšlenkou mít (privátní) klíč(e) na jiném médiu, než jsou zašifrovaná data.

Dva primitivní shellové skripty (Bash) (jejich aktualizovaná verze viz výše)

Následují dva skripty pro šifrování/dešifrování. Šifrují se všechny soubory v aktuálním adresáři, které nekončí gpg. Dešifrují se všechny soubory v aktuálním adresáři končíčí gpg. A nyní už slíbené skripty + jeden "konfigurační soubor":

# nastaveni
# Spolecne nastaveni k zasifruj.sh a desifruj.sh
KLICE='/cesta/.gnupg'

Skript pro zašifrování dat:

#!/bin/bash
# zasifruj.sh
# Skript pro zasifrovani obsahu aktualniho adresare.
# Vsimnete si volby -A programu ls

# 1. parametr skriptu rika, zda maji byt nesifrovane soubory po zasifrovani vymazany nebo ne.
# Nastaveni (cesta) a klice se budou brat z promenne KLICE.
source nastaveni

case "${1}" in
[aA]) gpg --homedir "${KLICE}" --encrypt-files --batch -q \
      --recipient 'Jmeno Prijmeni majitele verejneho klice' $(ls -A | grep -v gpg$)
   rm -f $(ls -A | grep -v gpg$)
   echo ''
   echo 'Nezasifrovane soubory vymazany.'
   echo ''
;;
*) gpg --homedir "${KLICE}" --encrypt-files --batch -q \
   --recipient 'Jmeno Prijmeni majitele klice' $(ls -A | grep -v gpg$)
   echo ''
   echo 'Nezasifrovane soubory nebyly vymazany.'
   echo ''
;;
esac

Druhý skript pro dešifrování obsahu aktuálního adresáře. Budete dotázáni na heslo (passphrase) k privátnímu klíči:

#!/bin/bash
# desifruj.sh
# slouzi pro desifrovani souboru v aktualnim adresari
source nastaveni
gpg --homedir "${KLICE}" --decrypt-file *.gpg .*.gpg
echo 'Smazat zasifrovane soubory (a/n)?'
read vstup
case "${vstup}" in
[aA]) rm *.gpg .*.gpg
   echo ''
   echo 'Zasifrovane soubory byly vymazany.'
   echo ''
;;
*) echo ''
   echo 'Zasifrovane soubory NEBYLY vymazany.'
   echo ''
;;
esac

Tip

Pokud do skriptu, který se spouští před vypnutím/restartováním počítče umístíte něco takového:

ADR_ZASIF='/cesta'
cd "${ADR_ZASIF}"
su prihl_jmeno -c '/cesta/zasifruj.sh a'

Tak se vám tímto před vypnutím/restartem zašifruje obsah adresáře ${ADR_ZASIF}, což je určitě milé. :-)

       

Hodnocení: 60 %

        špatnédobré        

Anketa

Mělo by GnuPG mít volbu „smazat soubor po zašifrování“?
 (0 %)
 (60 %)
 (40 %)
Celkem 15 hlasů

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

6.5.2012 21:38 Lenny_ | skóre: 10 | blog: lenny | Brno
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Odpovědět | Sbalit | Link | Blokovat | Admin
https://launchpad.net/ecryptfs - a znovu a znovu vymýšlíme kolo...
6.5.2012 21:43 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu

Pokud jsem ten odkaz dobře pochopil, tak se jedná o šifrování na úrovni systému souborů. Já zůstávám na úrovni souborů.

6.5.2012 22:52 Lenny_ | skóre: 10 | blog: lenny | Brno
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Není to tak úplně přesné, jedná se o abstraakční FUSE fs, který šiftuje adresář na úrovni souborů, stejně jako ten skript s gpg. Stačí se podívat do Ubuntu, používají to tam
7.5.2012 11:02 prqek | blog: prqek
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Přes FUSE funguje encfs (který mimochodem dělá přesně to, co mají dělat ty skripty a navíc za běhu). Jetli jsem to dobře pochopil, tak ecryptfs běží na úrovní kernelu (což má své výhody i nevýhody). Nebo mi někde něco uniká? Jinak ten skript je opravu vynalézání kola a skoro bych řek, že ne lepšího kola, ale horšího.
6.5.2012 21:43 Debian
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
A brzy možná vymyslíme trakař...
Bluebear avatar 6.5.2012 23:44 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Vymýšlet znovu kolo není nutně špatně, pokud se snažíme vyrobit lepší kolo než kdykoli předtím. Přinejmenším je to dobré intelektuální cvičení.
To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
Bystroushaak avatar 7.5.2012 11:45 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Není to špatné i kdyby ti z kola nakonec vyšel čtverec, protože se na tom člověk dost naučí.
xkucf03 avatar 6.5.2012 23:39 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Odpovědět | Sbalit | Link | Blokovat | Admin
Chtělo by to ošetřit případ, kdy GPG selže a nezašifruje soubory – aby se nesmazaly → asi bych je procházel v cyklu a po úspěšném zašifrování bych daný soubor smazal, ne takhle hromadně. Když už to chceš řešit takhle.

Jinak bych taky spíš doporučoval nějaké to EncFS nebo LUKS.
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
7.5.2012 07:06 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu

Děkuju.

7.5.2012 07:26 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
nebo LUKS.
Přesně. Ono občas i samotné názvy souborů můžou leccos napovědět.
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
7.5.2012 08:20 xm | skóre: 36 | blog: Osvobozený blog | Praha
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
EncFS šifruje i názvy souborů a adresářů, jediné co pak může něco prozrazovat je adresářová struktura a délka souborů (i když ta je zaokrouhlená, nezůstává úplně stejná). To si holt člověk musí sám zvážit, jak velkou úroveň skrytosti (a tedy i věrohodné popiratelnosti) potřebuje.
Svoboda je tím nejdůležitějším, co máme. Nenechte se o ní připravit, podporujte Pirátskou stranu!
7.5.2012 09:13 Jinan Dvoulaločný
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Odpovědět | Sbalit | Link | Blokovat | Admin
Je ti jasné, že když ty soubory budeš neustále šifrovat, dešifrovat a mazat, tak ti na disku budou zůstávat ta původní nešifrovaná data? Nehledě na různé tempfajly, thumbnaily, indexační služby, swap, apod.
7.5.2012 09:31 Stevko | skóre: 3 | Praha
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Odpovědět | Sbalit | Link | Blokovat | Admin
Keď používaš ls tak, ako používaš, tak to asi bude robiť problémy pri medzerách v názvoch súborov. Keď už sa používa bash, skúsil by som niečo také:
shopt -s dotglob #hviezdička bude fungovať aj pre bodkované súbory
rm -f ./!(*.gpg) # Zmažeme (rm môžeme nahradiť iným príkazom) súbory v aktuálnom adresári nekončiace na gpg a nebudú nám vadiť názvy súborov začínajúce mínusom.
Aj to pravdepodobne bude mať chyby (čo ak tam súbory nekončiace .gpg nebudú?)

Čím viac poznám bash, tým menej si myslím, že sa v tom dajú písať skripty, ktoré prežijú rôzne krajné prípady.
Príspevok nemá byť ukončený spojením „môj názor“.
xkucf03 avatar 7.5.2012 10:06 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu
Odpovědět | Sbalit | Link | Blokovat | Admin
BTW: asi by neškodilo uvést zdroj, i když jde o takhle triviální skript.

GNU Privacy Guard Tutorial
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
7.5.2012 10:40 Begleiter | skóre: 47 | blog: muj_blog | Doma
Rozbalit Rozbalit vše Re: Šifrovaný adresář v Linuxu

Jojo. Díky.

xkucf03 avatar 7.5.2012 10:59 xkucf03 | skóre: 49 | blog: xkucf03
Rozbalit Rozbalit vše Anketa
Odpovědět | Sbalit | Link | Blokovat | Admin
Ještě tip na anketu:

Mělo by GnuPG mít volbu „smazat soubor po zašifrování“?
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
Bystroushaak avatar 7.5.2012 11:48 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
Rozbalit Rozbalit vše Re: Anketa
Imho ne, není třeba vytvářet bloby co umí všechno, když jsou běžně dostupné specializované nástroje (shred/wipe/srm).

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.