Šifrování domovského adresáře

autor - Bře.19, 2009 - Linux

EncFS poskytuje virtuální šifrovaný souborový systém, k jehož spuštění není třeba zvláštních privilegií. Používá modul jádra a knihoven FUSE. Po připojení se šifrovaný souborový systém chová vůči uživateli transparentně, tj. jako běžný souborový systém. Šifrovaná data se neukládají přímo na bloková zařízení, ale jako běžné soubory (byť „nečitelně“ pojmenované).Není třeba vytvářet zvláštní oddíl na disku, měnit záznamy v /etc/fstab atd. Šifrované soubory (název i obsah) se ukládají na běžný diskový oddíl, kam má uživatel práva zápisu. Jednotlivé šifrované soubory lze kopírovat, k jejich rozšifrování je třeba speciální soubor s klíčem (.encfs5), který je chráněn uživatelským heslem.

Mezi nevýhody patří nemožnost skrytí počtu šifrovaných souborů a jejich přístupových práv, odhadnutí délky jména a velikosti souboru, vyšší režie při šifrování/dešifrování.

Výchozí požadavky

Následující postup je platný pro Ubuntu 8.10 (a odvozeniny). Nejprve nainstalujte potřebné balíčky a načtěte modul fuse.

$ sudo apt-get install encfs libpam-encfs
$ sudo modprobe fuse

Pokud po restartu nechcete načítat modul fuse ručně, je nutné jej přidat do souboru /etc/modules:

$ sudo echo "fuse" >> /etc/modules

Upravte následující konfigurační soubory tak, aby obsahovaly alespoň informace uvedené níže. Pokud soubor neexistuje, vytvořte jej. Tučně jsem označil změny oproti výchozí instalaci.

Pouze přidejte tučně uvedený text, ostatní neměnit (může být odlišné v každé instalaci):

$ cat /etc/pam.d/common-auth
auth sufficient pam_encfs.so
auth required pam_unix.so nullok_secure use_first_pass
$ cat /etc/pam.d/common-session
session required pam_unix.so
session optional pam_foreground.so
session required pam_encfs.so
$ cat /etc/fuse.conf
user_allow_other

Soubor by měl vypadat přesně takto:

$ cat /etc/security/pam_encfs.conf
drop_permissions
fuse_default allow_root,nonempty
#USERNAME SOURCE TARGET PATH ENCFS Options FUSE Options
login_uzivatele /home/.enc/login_uzivatele /home/login_uzivatele -v allow_root

Ještě než se přihlásíte jako „login_uzivatele“, zašifrujte dle níže uvedeného postupu jeho domovský adresář.

Obvyklé použití EncFS

Vytvoření šifrovaného souborového systému v uživatelském prostoru je jednoduché:
$ encfs ${HOME}/sifrovane_soubory ${HOME}/misto_pripojení
EncFS se interaktivně optá na různé volby, pokud nechcete studovat, co znamenají, můžete použít výchozí. Po dokončení můžete vytvářet soubory ve složce ${HOME}/misto_pripojeni. Pokud se podíváte do složky ${HOME}/sifrovane_soubory, zjistíte, že tam vzniká stejný počet souborů s nesmyslným názvem a obsahem (šifrované). Současně adresář obsahuje soubor .encfs6.xml -> při jeho poškození či ztrátě nebudete schopni dešifrovat své soubory!

Šifrovaný souborový systém odpojíte:

$ fusermount -u ${HOME}/misto_pripojeni

Převedení domovského adresáře stávajícího uživatele do šifrovaného souborového systému

Odhlašte se z účtu, jehož domovský adresář bude šifrován. Následující kroky buď provést v terminálu jako root (nebo pod jiným uživatelem pomocí sudo před každým příkazem, uživatel musí být ve skupině admin). Osobně preferuji použití účtu root (ve výchozí instalaci se není možné přihlásit jako root – musíte spustit správu uživatelů (např. v Gnome – Systém/Správa/Uživatelé a skupiny, přepnout se do Administračního režimu a přidat uživateli root nové heslo.) Pod účtem root nespouštějte grafické prostředí, stačí využít standardní konsole (CTRL+ALT+F1 až F6. F7 se vrátíte zpět do grafického prostředí.)

Vytvořte adresář pro šifrovaná data a dočasný adresář pro jejich připojení:

# mkdir -p /home/.enc/login_uzivatele /home/tmp

Vytvořte šifrovaný systém EncFS (použijte stejné heslo jako má login_uživatele):

# encfs /home/.enc/login_uzivatele /home/tmp -- -o allow_root

Zkopírujte stávající nezašifrovaný domovský adresář do dočasného adresáře. Šifrované soubory se uloží do /home/.enc/login_uzivatele:

# cd login_uzivatele
# find . | cpio -pamd /home/tmp

Odpojte šifrovaný souborový systém:

# fusermount -u /home/tmp

Přejmenujte stávající nešifrovaný domovský adresář (pro účely zálohy, později možno smazat), vytvořte nový domovský adresář, nastavte vlastnictví souborů a smažte dočasný adresář:

# mv /home/login_uzivatele /home/login_uzivatele.bak
# mkdir /home/login_uzivatele
# chown login_uzivatele:login_uzivatele /home/login_uzivatele
# chown -R login_uzivatele:login_uzivatele /home/.enc/login_uzivatele
# rmdir /home/tmp

Pokud používáte GDM k přihlašování do grafického prostředí, je nutno navíc upravit soubor /etc/gdm/Xsession, tak aby obsahoval definici proměnné ICEAUTHORITY. Důvodem je, že GDM se snaží vytvořit tento soubor v domovském adresáři dříve, než dojde k připojení šifrovaného domovského adresáře.

...
PROGNAME=Xsession
ICEAUTHORITY="/tmp/ICEauthority-`whoami`"
export ICEAUTHORITY

...

Nyní se zkuste přihlásit v konzoli (CTRL+ALT+F2, zpět do grafického prostředí se vrátíte ALT+F7) jako login_uzivatele. Pokud nastane problém, fuse obvykle oznámí důvod chyby. Pokud je vše v pořádku (žádné chybové hlášení, vidíte soubory v adresáři příkazem „ls“), můžete se přihlásit pomocí GDM či KDM do grafického prostředí. Pokud nastanou problémy, pomůže google…

Změna hesla

Je třeba myslet na to, že změníme-li uživatelské heslo, nepodaří se nám po loginu připojit šifrovaný domovský adresář. Po změně uživatelského hesla je ještě nutné změnit heslo pro EncFS (spustit jako běžný uživatel, ne root):
$ encfsctl passwd /home/.enc/login_uzivatele
To je mimochodem i důvod, proč je rozumné mít aktivní účet root, i když jej běžně nebudeme používat.

Vzdálený přístup bez autentizace heslem

Přihlašování a ověřování pomocí páru klíčů openSSH způsobí dva problémy: nelze ověřit přihlášení pomocí veřejného klíče neb je standardně uložen v momentálně zašifrovaném adresáři, a domovský adresář zůstane zašifrován, neb nebylo zadáno heslo.

První problém lze vyřešit umístěním souboru authorized_keys mimo domovský adresář a úpravou ssh_conf (%u bude nahrazeno uživatelským jménem):

$ cat /etc/ssh/sshd_conf
...
AuthorizedKeysFile /etc/ssh/authorized_keys/%u/authorized_keys
...

Druhý problém lze vyřešit opětovným přihlášením stejným uživatelským jménem na vzdáleném počítači (vyžaduje heslo, to je automaticky použito k připojení domovského adresáře v nešifrované podobě):

$ su login_uživatele

Alternativy

Obdobně jako EncFS funguje eCryptfs – tj. šifrování probíhá samostatně pro jednotlivé soubory, které jsou ukládány v nešifrovaném souborovém systému téměř libovolného typu.

Rozdíly tu však přece jen jsou: eCryptfs je součástí linuxového jádra, nepoužívá FUSE a měl by být tedy o něco rychlejší, bohužel však též mírně složitější k používání a vyžaduje administrátorský přístup pro vytvoření šifrovaného souborového systému(!). Na rozdíl od encFS využívajícího modul FUSE, nelze přímo omezit přístup jiných uživatelů k souborům. Respektive lze – klasickým způsobem pomocí přístupových práv dle souborového systému (tj. root uvidí dešifrované soubory vždy, což u FUSE lze zakázat).

Nicméně: eCryptfs je podporován přímo Ubuntu (9.04 a novější) pro šifrování domovského adresáře či jeho části, takže je to nepochybně jednodušší cesta. EncFS používám nadále pro šifrování souborů na externích discích.

:

Komentář: 1

Zanechte komentář

Archivy