Cifrare la propria partizione di home

By spawnblog

A volte si sente la necessita’ di crittare i propri dati personali, ma spesso le domande che ci poniamo sono ?

  1. Quanto e’ complesso adottare una cosa del genere?
  2. E’ realmente sicuro?
  3. Se uso un algoritmo molto complesso le prestazioni degradano?

Le risposte sono molto semplici:

  1. Con i mezzi che si hanno ora a disposizione, quelli che cerchero’ di spiegarvi, direi proprio di no
  2. AES ha uno spazio delle chiavi, nel nostro esempio, di 2^256 quindi un bruteforce su un numero di chiavi cosi’ ampio e’ altamente improbabile, inoltre non sono noti risultati di crittanalisi che lo indeboliscano.
  3. Se l’algoritmo e’ ben implementato le prestazioni non degradano di molto, anzi si puo’ dire che il degrado e’ veramente trascurabile.

=== SETUP DEL SISTEMA ===

Innanzitutto un kernel >=2.6.10, tutto quello che dobbiamo fare e’ configurarlo in
modo che sia in grado di usare l’algoritmo AES in questo modo.

# Code maturity level options --->
Prompt for development and/or incomplete code/drivers
# General setup --->
Support for hot-pluggable devices
# Device Drivers > Multi-device support (RAID and LVM).
Device mapper support
Crypt target support
# Cryptographic options --->
AES cipher algorithms


Dopo aver compilato e riavviato il vostro sistema potrete verificare se il modulo e’ attivo
in questo modo

%> ls -L /dev/mapper/control


se non avete il device mapper basta installare il pacchetto dmsetup.

Su Debian basta installare dmsetup con il comando e non e’ necessario ricompilare
il kernel

%> aptitude install dmsetup


Ora dobbiamo controllare se il supporto ad AES e’ attivo

%> cat /proc/crypto


l’output dovrebbe essere il seguente:

name : aes
module : aes
type : cipher

se non si ha un output di questo tipo bisogna caricare il modulo a mano con

%> modprobe aes

ora ci serve un tool che ci permetta di gestire in modo semplice dmsetup:
il package si chiama cryptsetup, sempre facendo riferimento a Debian

%> aptitude install cryptsetup

Ora iniziamo con il vero e proprio procedimento di encryption

=== CIFRARE LA PARTIZIONE DI HOME ===

Nel caso in cui si dispone di una partizione apposita per la home, per esempio
/dev/hda3, si procede in questo modo:

# Controllo se ci sono errori nella partizione
%> badblocks -c 10240 -s -w -t random -v /dev/hda3#Riempio la partizione di dati Random
%> dd if=/dev/urandom of=/dev/hda3

#Creo una partizione LUKS — Linux Unified Key Setup
%> cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 luksFormat /dev/hda3

#Ora setto il device mapper
%> cryptsetup luksOpen /dev/hda3 home

#per controllare se il tutto funziona
%> cryptsetup status home
/dev/mapper/home is active:
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
device: /dev/.static/dev/hda3
offset: 2056 sectors
size: 20962706 sectors
mode: read/write

# Ora creiamo il filesystem

%> mkfs.reiserfs /dev/mapper/home

#Monto il filesystem

%> mount /dev/mapper/home /mnt/

#Ci copio dentro i file della home e lo smonto

%> cp -axv /home/* /mnt/ && umount /mnt

Ora non ci rimane che settare ad hoc il nostro fstab

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/home /home ext3 defaults 1 2

e il nostro crypttab

# <target device> <source device> <key file> <options>
home /dev/hda3 none luks

e il gioco e’ fatto.

Alcune distro non supportano le partizioni LUCKS di default quindi non le
montano all’avvio, per ovviare a questo problema:

1. Creiamo un file /etc/init.d/cryptinit contenente il seguente script

#! /bin/sh
# if this script is executed when home is opened, tries to close it;
# otherwise, tries to open it, for three times, then continue without
# opening it
if [ -b /dev/mapper/home ]; then
/sbin/cryptsetup luksClose home
else
i=3

while [ $i -gt 0 ]; do
let “i -= 1″
/sbin/cryptsetup luksOpen /dev/hda3 home && i=0
done
fi

2. Lo rendiamo eseguibile

%> chmod +x /etc/init.d/cryptinit

3. Lo linkiamo in /etc/rcS.d

%> cd /etc/rcS.d

%> ln -sf ../init.d/cryptinit S28cryptinit

4. Editiamo fstab in questo modo

# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/home /home reiserfs defaults 1 2

=== DELEGARE A PAM L’AUTENTICAZONE ===

Un altro modo di crittare la nostra home e delegare a PAM l’autenticazione e’ il
seguente:

Installare i pacchetti libpam-mount cryptsetup openssl

%> aptitude install libpam-mount cryptsetup openssl

aggiungere la seguente riga al file /etc/pam.d/common-auth

auth optional pam_mount.so use_first_pass

in modo da avere i permessi di montarla anche via ssh e in tutti gli altri modi
che PAM ci permette

Aggiungere al file /etc/pam.d/common-session

session optional pam_mount.so

alternativamente si puo’ aggiungere anche la riga “@include common-pammount” in
entrambi i file di cui sopra

aggiungere la seguente riga al file etc/security/pam_mount.conf:

volume my_username crypt – /dev/hda4 /home/my_username cipher=aes aes-256-ecb /home/my_username.key

ora dobbiamo creare la chiave

echo “my dmcrypt password” | openssl aes-256-ecb > /home/my_username.key

oppure usare la stessa password che usiamo anche per il login aggiungendo al
file /etc/security/pam_mount.conf la seguente linea

volume my_username crypt – /dev/hda3 /home/my_username cipher=aes – -

io personalmente consiglio quest’ultimo metodo.

Nel caso non si disponga di una partizione a parte per la home, questa potrebbe
anche essere montata in un immagine loopback anziche’ in un’apposita partizione

Creiamo un file di loopback grande abbastanza da contenere tutti i nostri file
in questo modo:

%> dd if=/dev/urandom of=/home/secret bs= # count= #

sostituite ovviamente le # con il numero di byte

ora settiamo il file come un loop device

%> losetup /dev/loop0 /home/secret

ora creiamo il device logico in questo modo:

%> cryptsetup -y create mycryprt /dev/loop0

e formattiamolo

%> mkfs.reiserfs /dev/mapper/mycrypt

montiamolo

%> mount /dev/mapper/mycrypt /mnt/secret

Ora possiamo copiarci dentro i file che conteneva la nostra home, Pam pensera’
ad autenticarvi ad ogni login decrittando la vostra home.

=== METODO VELOCE ===

#Installare il software%> aptitude install cryptsetup libpam_mount

#Creare la partizione di loop
%> dd if=/dev/urandom of=/home/.joe.img bs=1M count=15000

#Settare la partizione di loop
%> losetup /dev/loop0 /home/.joe.img

#Creare il volume logico cifrato
%> cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 –verify-passphrase luksFormat /dev/loop0

#Formattare il volume logico
%> cryptsetup luksOpen /dev/loop0 cryptedhome
%> mkfs.reiserfs /dev/mapper/cryptedhome
%> cryptsetup luksClose cryptedhome

#montare il volume cifrato
%> mkdir /tmp/foo
%> mount /dev/mapper/cryptedhome /tmp/foo

– copiate i dati —

#settate PAM

/etc/security/pam_mount.conf:

#
# dm_crypt + LUKS. Monta /home/.user.img
#
# volume * crypt – /home/.&.img /home/& loop – -
volume joe crypt – /home/.joe.img /home/joe loop,cipher=aes – -

###############################################
# Service based pam-mount solution (prefered) #
###############################################

/etc/pam.d/login (at the end):
/etc/pam.d/gdm (at the end):
/etc/pam.d/ssh (at the end):

@include common-pammount
#############################
# Common pam-mount solution # #############################
/etc/pam.d/common-auth (at the end):
auth optional pam_mount.so use_first_pass
/etc/pam.d/common-session (at the end):
session optional pam_mount.so

Si ringraziano

Stefano Spinucci
Uwe Hermann
http://www.kill-9.org

Tutti quelli che correggeranno o daranno un apporto a questa guida mandatemi
le email con le vostre errata-corrige.

Tag: , , , , , , ,

Una Risposta a “Cifrare la propria partizione di home”

  1. more Dice:

    hello

    nice

Lascia un commento

Occorre aver fatto il login per inviare un commento