Kryptert filsystem luks

Fra Wikipedia, den frie encyklopedi.

Denne artikkelen er foreslått som en utvalgt artikkel når den er kvalitetssjekket. Se diskusjonssiden for begrunnelse.


Hvis en ønsker å kryptere data på et GNU/Linux-system (for eksempel et kryptert hjemmeområde), er det fullt mulig å kryptere et helt filsystem. En kan for eksempel ta en vanlig partisjon eller et LVM-volum og sette opp som et kryptert volum. En får da, etter å ha oppgitt en passordfrase, en ny blokkenhet som kan formateres og monteres.

Kryptering er spesielt nyttig til bærbare datamaskiner. Hele eller deler av harddisken kan krypteres i tilfelle en datamaskin blir stjålet eller mistet. Det blir dermed vanskeligere for ondsinnende personer å lese konfidensielle filer som nettverkskart, liste over alle IP-er, fullstendig dump av brannmurregler, kredittkortnumre og PIN-koder. Det mest aktuelle er nok å kryptere hjemmeområdet sitt.

Denne artikkelen tar for seg hvordan en kan sette opp krypterte disker og hvordan hjemmeområder automatisk kan bli montert når en logger seg inn.

Innholdsfortegnelse

dm_crypt

Fra kjerne 2.6.4 ble dm_crypt introdusert. Det er meningen at dm_crypt med tiden skal erstatte cryptoloop. For å sette opp vårt krypterte filsystem ved hjelp av dm_crypt starter vi med å aktivere noen moduler. Hvis disse modulene ikke er tilgjengelige kan det hende du er nødt til å kompilere ny kjerne med støtte for dette. Vi bruker i tillegg pakken device-mapper. Denne inneholder programmet dmsetup. Dersom du har dmsetup programmet er device-mapper systemet installert. Alle distribusjoner som er laget for 2.6 kjerne kommer med device-mapper og dmsetup- programmet.

Om ikke systemet har dette installert kan device-mapper hentes via ftp fra sources.redhat.com (ftp://sources.redhat.com/pub/dm). Etter du eventuelt har kompilert kjerne og programvare må du installere modulene:

# modprobe dm_crypt
# modprobe aes

For å sjekke at enhetskatalogen finnes:

# ls -L /dev/mapper/control
/dev/mapper/control

For å se at vi har støtte for aes-kryptering:

# cat /proc/crypto
 name : aes 
 module : aes 
 type : cipher 
 blocksize : 16 
 min keysize : 16 
 max keysize : 32

Så kan vi se om krypterte enheter støttes:

 # dmsetup targets
 crypt v1.0.0 
 striped v1.0.1 
 linear v1.0.1 
 error v1.0.1

Så forteller vi systemet at vi vil sette opp en kryptert partisjon. I eksemplet her går vi utifra at det er /dev/hda9 som skal være kryptert.

I denne artikkelen vil vi bruke LUKS-format på den krypterte harddisken. LUKS står for Linux Unified Key Setup og den store fordelen med LUKS er at det støtter flere sammtidige passord på partisjonen. På den måten kan forskjellige personer ha hvert sitt passord - og enkelt-passord kan inndras. Det gjør det også mulig å bytte passord på kontoen sin og så på disken samtidig.

Dersom enheten er montert må den først avmonteres.

# umount /dev/hda9

For den sikkerhetsparanoide brukeren bør partisjonen eller loopback-filen først overskrives med tilfeldig data fra /dev/urandom for å skjule hvilke deler av den krypterte partisjonen som er skrevet til eller ikke, samt for å overskrive gamle data. Dette er en tidkrevende prosess, som fyller partisjonen med tilfeldige data med en hastighet på omtrentlig 5-10 MB/s, avhengig av maskin. Vær påpasselig med å velge riktig enhetsfil under denne kommandoen, all data på enhetsfilen går tapt!

# dd if=/dev/urandom of=ENHETSFIL bs=1M
(bytt ut ENHETSFIL med aktuell filsti, for eksempel /dev/hda9)

Med cryptsetup lager vi enhetsfilen /dev/mapper/disk-aes som er den dekrypterte versjonen av /dev/hda9

Alt som ligger på enheten du vil kryptere vil gå tapt.
# cryptsetup -c aes luksFormat /dev/hda9
Passordfrasen bør være et godt passord.
WARNING!
========
This will overwrite data on /dev/hda9 irrevocably.
 
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: passordfrase her

Nå kan det være greit å kontrollere om /dev/hda9 er kryptert:

# cryptsetup luksDump /dev/hda9
LUKS header information for /dev/hda9
 
Version:        1
Cipher name:    aes
Cipher mode:    cbc-plain
Hash spec:      sha1
Payload offset: 1032
MK bits:        128
MK digest:      xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
MK salt:        xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
                xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
MK iterations:  10
UUID:           xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
 
Key Slot 0: ENABLED
       Iterations:             69405
       Salt:                   xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
                               xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
       Key material offset:    8
       AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Som du ser kan partisjonen huse flere nøkler som har hver sin passordfrase. Dette er veldig nyttig når du skal bytte passord. Alt du trenger å gjøre er å legge til det nye passordet ditt:

# cryptsetup luksAddKey /dev/hda9
Enter any LUKS passphrase: Gammel passphrase her
key slot 0 unlocked.
Enter new passphrase for key slot: Ny passphrase her

Når du kjører luksDump igjen ser du at Key Slot 1 har blitt ENABLED i tillegg til slot 0 som nøkkelen med den gamle passordfrasen i. Senere kan du slette den gamle nøkkelen med den gamle passordfrasen med kommando som dette: luksDelKey /dev/hda9 0 (slot 0, ikke sant)

Nå må vi låse opp den krypterte disken slik at vi kan lese fra den:

# cryptsetup luksOpen /dev/hda9 disk-aes
Enter LUKS passphrase: passphrase her
key slot 0 unlocked.

Nå ligger den dekrypterte versjonen av disken i disk-mapperen:

# dmsetup ls
disk-aes        (254, 5)

Vi lager så et ext3-filsystem:

# mkfs.ext2 /dev/mapper/disk-aes
...

Så setter vi opp katalogen vi skal montere enheten i og monterer enheten:

# mkdir /mnt/disk-aes
# mount /dev/mapper/disk-aes /mnt/disk-aes

For å avmontere og fjerne assosiasjonene til filen:

# umount /mnt/disk-aes
# cryptsetup luksClose disk-aes

Når vi så senere skal bruke den krypterte enheten på ny, benytter vi to av kommandoene: cryptsetup luksOpen og mount.


Det er veldig viktig å bruke luksClose til slutt, ellers forblir disken åpen og den dekrypterte versjonen av den tilgjengelig for alle.

Automatisk montering av hjemmekatalog ved innlogging

Med pam_mount kan hjemmekatalog monteres automatisk ved innlogging. Pam_mount versjon 0.95 og tidligere støtter ikke montering av LUKS-partisjoner. Dersom din versjon er eldre må du sørge for å oppdatere denne, fortinnsvis med pakkehåndterer.

Installere pam_mount

Installere pam_mount med pakkehåndterer

I Fedora heter pakken pam_mount, mens i Debian/Ubuntu heter den libpam-mount. Dersom din pakkehåndterer ikke tilbyr en nyere versjon eller du ikke har en pakkehåndterer, kan oppskriften nedenfor brukes.

Installere pam_mount manuelt

Hent siste versjon på pam_mount (http://pam-mount.sourceforge.net/) og flytt filen til /usr/local/src

# cd /usr/local/src
# tar -zxvf pam_mount-0.9.21.tar.gz
# cd pam_mount-0.9.21
# ./configure; make; make install

Om ikke filen /etc/security/pam_mount.conf finnes kan man pakke ut en tidligere versjon som pam_mount-0.9.20.tar.gz

# cp /usr/local/src/pam_mount-0.9.20/config/pam_mount.conf /etc/security/pam_mount.conf

Oppsett av pam_mount

Nå kan vi automatisk montere hjemmeområdet til brukeren foo fra den krypterte enheten. Dette skjer første gang foo logger på systemet (f.eks. med ssh, men modifikasjonen under gjelder alle innloggingsmetoder). pam_mount (http://pam-mount.sourceforge.net/) er en PAM-modul som blant annet benytter brukerens passord til å montere en kryptert enhet.

Det forutsettes at brukeren har samme innloggingspassord som en av passordfrasene på den aes-krypterte enheten. For å legge til flere passord, bruk cryptsetup addkey, som beskrevet tidligere i guiden.

Nå må vi konfigurere pam til å montere den krypterte enheten ved innlogging. Hvordan dette gjøres, avhenger av din distribusjon.

Fedora

I Fedora og andre systemer som er i slekt med Red Hat heter filen system-auth. Filen er ikke nødvendigvis lik den under, men du skal sette inn de røde feltene.

auth        required      /lib/security/$ISA/pam_env.so
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok 
auth        optional      /usr/lib/security/pam_mount.so use_first_pass
auth        required      /lib/security/$ISA/pam_deny.so
account     required      /lib/security/$ISA/pam_unix.so
account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
account     required      /lib/security/$ISA/pam_permit.so
password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password    required      /lib/security/$ISA/pam_deny.so
session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so

Debian

# echo  "auth optional /usr/lib/security/pam_mount.so use_first_pass" >>  /etc/pam.d/common-auth
# echo  "session     optional      /usr/lib/security/pam_mount.so" >>  /etc/pam.d/common-auth

Dersom du bruker Debian sarge, en eldre Debian eller andre typer som omfattes av Debian bug: #267285, må man lage to symbolske lenker:

# ln -s /usr/local/bin/mount.crypt /sbin/mount.crypt
# ln -s /usr/local/bin/umount.crypt /sbin/umount.crypt

Ubuntu

# echo  "auth optional /lib/security/pam_mount.so use_first_pass" >>  /etc/pam.d/common-auth
# echo  "session     optional      /lib/security/pam_mount.so" >>  /etc/pam.d/common-session

Andre distribusjoner

Dersom du har en annen distribusjoner må du legge til følgende linjer, der det passer:

auth optional /usr/lib/security/pam_mount.so use_first_pass
session optional /usr/lib/security/pam_mount.so

Det er viktig at det det tredje feltet peker på modulen. Hvor denne modulen finnes, kan variere.

Legge til brukere som skal montere det krypterte volumet ved innlogging

I konfigurasjonfilen /etc/security/pam_mount.conf setter vi linjen for brukeren. I dette eksempelet tar vi for oss brukeren, foo. Dette betinger at brukeren foo, har en innloggingspassord som er likt et av passordene til den krypterte enheten.

volume foo crypt - /dev/hda9 /home/foo cipher=aes - -

Mulighetene med pam_mount er mange for mer informasjon se pam_mount.conf.

Sikre hjemmekatalogen

I tillegg kan det være greit å forsikre seg om at katalogen /home/foo er satt opp med strenge rettigheter. Husk at dette må gjøres mens /home/foo er montert.

# chown foo.foo /home/foo; chmod 700 /home/foo

Nå er det bare for foo å logge inn på systemet og den krypterte enheten blir montert. Når foo logger seg ut blir den krypterte enheten demontert.

Demontering fra X-sesjoner

Gamin (http://www.gnome.org/~veillard/gamin)/FAM (http://oss.sgi.com/projects/fam/) er en metode man kan bruke for å overvåke filendringer. I de fleste distribusjoner er dette integrert i desktopen, og er f.eks. det som gjør at nye filer/endringer o.l. automagisk dukker opp i filhåndterereren (thunar/nautilus/konqueror). Dessverre hindrer samme mekanisme pam_mount i å demontere /home/foo når du logger ut. Dette er normalt et sikkerhetsproblem, siden dine dekrypterte filer blir liggende tilgjengelig. Dette kan løses på flere måter:

  • Husk alltid å bruke umount og luksClose etter utlogging.
  • Modifiser /usr/bin/umount.crypt med en passende sleep (litt lengre enn gam_server timeout), evt ei sløyfe som tester om filsystemet er opptatt inntil en viss timout. Så henger umount (og utlogging fra X) bare så lenge den må.
  • Slå av Gamin:

Enkel og grei måte:

# (cd /usr/lib/gamin; mv gam_server gam_server.blatti)

Fjerne Gamin på ubuntu/debian:

# dpkg --remove --ignore-depends=libgamin0 gamin

Fjerne Gamin på fedora/redhat:

# rpm --erase --nodeps gamin

Se også


Eksterne ressurser



Personal tools