Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Guide til passordløs oppstart med kryptert system i Ubuntu.
- October 11th, 2009 by Tor Martin Leave a reply »
- Hvis du er som meg, litt over normalt forsiktig eller kanskje også en smule paranoid – har du kryptert alle dine disker og partisjoner.Dette er vel og greit, men det blir i lengden irriterende å måtte skrive inn det lange kryptiske passordet du valgte som nøkkel for din(e) partisjoner under oppstart av maskinen. Mitt system består av to fysiske harddisker, en som kjører systemet, og en til lagring etc. Systemdisken kjører kryptering av / (root) samt swap partisjonen, to partisjoner totalt, men koblet sammen ved hjelp av linux LVM. Den andre disken har en stor kryptert partisjon. Ettersom jeg monterer alle partisjonene under oppstart, er jeg bundet til å skrive inn krypterings-nøkkelen (passordet) minst to ganger…
- Jeg har en stund lekt med tanken om å plassere disse passordene/nøkklene på en gammel usb minnepinne jeg har liggende, slik at init-scriptene i systemet kan hente ut disse under oppstart, noe som betyr at jeg ikke trenger å skrive inn passordet(ene) hver eneste gang jeg starter, restarter, eller gud forby, kræsjer, henger, tryner, whatever…
- Joda, etter litt nøye research kom jeg frem til at dette er fullt mulig, kun noen små operasjoner er nødvendig.
- Jeg vil i denne guiden forklare hvordan du skal sette opp crypttab, initrd, cryptsetup samt din minnepinne eller ekstern usb-harddisk for å oppnå en uavbrutt oppstart selv om dine harddisker er kryptert og trenger passord for å kunne bli åpnet. Du vil trenge superbrukertilgang og ha noe forståelse av terminalen og vanlige operasjoner i linux. Denne guiden forutsetter at du har installert og satt opp systemet med kryptering, enten selv etter eller under installasjonen. Selv om det her blir forklart hvordan du gjør dette i Ubuntu (Heron) vil stegene lett kunne konverteres til andre systemer som kjører noenlunde samme oppsett. NB: “bash$” skal ikke taes med som en kommando.
- Ok – da begynner vi.
- 1. Det første vi gjør er å finne ut hvilken partisjoner du har kryptert
- bash$ sudo cat /etc/crypttab
- Denne kommandoen vil skrive ut innholdet i /etc/crypttab, og ut i fra dette vil du finne ut hva dine krypterte disker heter. En linje inneholder informasjon om en partisjon som blir montert under oppstart. Inneholdet i denne fila kan variere noe ettersom hvordan du har konfigurert din kryptering, men en standard Ubuntu konfigurasjon ser slik ut:
- sda5_crypt /dev/disk/by-uuid/ef4af71d-a86c-438d-8tr58-94502caa4582 none luks
- Det vi er ute etter her er andre argument, /dev/disk/by-uuid/ef4af71d-a86c-438d-8tr58-94502caa4582, dette gir deg uuid navnet/id’en til din partisjon. For å koble denne til en enhet gjør du følgende:
- bash$ ls -al /dev/disk/by-uuid/
- Finn linjen som korresponderer med id’en i crypttab og noter enhetsnavnet til partisjonen. Min er koblet til /dev/sda5. Vi vet nå hvilken partisjon vi skal konfigurere, nemlig /dev/sda5.
- 2. Lage en ny og bedre krypteringsnøkkel.
- Gå til ditt hjemmeområde og kjør denne kommandoen:
- bash$ head -c 2880 /dev/urandom | uuencode -m – | head -n 65 | tail -n 64 > root.key
- Hvis denne kommandoen ikke fungerer mangler du nok sharutils, fiks dette ved å kjøre denne kommandoen:
- bash$ sudo apt-get install sharutils
- Vi har nå en fil på 64 linjer med random tall, root.key, som vi nå legger til i nøkkellisten til /dev/sda5:
- bash$ sudo cryptsetup luksAddKey /dev/sda5 root.key
- Skriv inn ditt gamle passord, og du vil få beskjed om at den nye nøkkelen er blitt lagt til.
- Sjekk at nøkkelen ligger i listen ved denne kommandoen:
- bash$ sudo cryptsetup luksDump /dev/sda5
- Her skal da “key slot 0 og 1? være “ENABLED”. 0 er din opprinnelige nøkkel, mens 1 er root.key.
- 3. Minnepinnen.
- Her er du fri til å gjøre litt som du vil, men den må inneholde en partisjon med ext3 filsystem som stor nok til å kunne inneholde krypteringsnøkkelen (min. 4Kbyte).
- Monter denne et sted du finner den igjen, heretter antar jeg at du har montert denne på /media/keyChain.
- Kopier nøkkelfilen over til minnepinnen og gi den riktige rettigheter:
- bash$ sudo cp ~/root.key /media/keyChain/
- bash$ sudo chmod 0600 /media/keyChain/root.key
- Nå finner vi uuid’en til din minnepinne:
- bash$ sudo ls -al /dev/disk/by-uuid/
- Finn uuid’en som peker på minnepinnen og skriv ned denne. Er du i tvil hvilken enhet minnepinnen din er, kjør bash$ sudo mount | grep /media/keyChain, så vil første argument i linjen være din enhet, hos meg: /dev/sdd1.
- 4. Lage en sikkerhetskopi av din fungerende initrd.
- I tilfelle noe går galt, vil vi ha muligheten til å starte systemet slik det var før vi satte i gang våre operasjoner. Gå til /boot og lag en kopi av filen initrd.img-2.6.24-16-generic:
- bash$ cd /boot
- bash$ sudo cp initrd.img-2.6.24-16-generic initrd.img-2.6.24-16-generic-safe
- Legg til dette i /boot/grub/menu.lst:
- title Ubuntu 8.04, kernel 2.6.24-16-generic (safe mode)
- root (hd0,0)
- kernel /vmlinuz-2.6.24-16-generic root=/dev/mapper/hostname-root ro
- initrd /initrd.img-2.6.24-16-generic-safe
- NB: Ettersom nye kjerner blir innført i Ubuntu vil nok 2.6.24-16 forandres, og dette må tas hensyn til.
- NB2: Sjekk at root (hd0,0) er den samme som de andre innslagene dine i menu.lst.
- NB3: Sjekk at hostname-root også er det samme som de andre innslagene i menu.lst.
- Ok, da har vi sikret oss en utvei hvis alt går galt, eller i hvertfall hvis vi kludrer til initrd filen…Restart systemet og prøv dette valget i grub for å være sikker. Restart så igjen på vanlig måte.
- 5. Konfigurere crypttab.
- Først, ta en sikkerhetskopi av crypttab.
- bash$ sudo cp /etc/crypttab /etc/crypttab.bak
- Modifiser crypttab slik at den kjører et script for å hente krypteringsnøkkelen:
- bash$ sudo vim /etc/crypttab
- Bytt ut none med root.key og legg til ,keyscript=/usr/local/sbin/crypto-usb-key.sh etter luks slik at linjen blir seende slik ut:
- sda5_crypt /dev/disk/by-uuid/ef4af71d-a86c-438d-8tr58-94502caa4582 root.key luks,keyscript=/usr/local/sbin/crypto-usb-key.sh
- Lagre og lukk filen.
- 6. Lage script for montering av minnepinne og hente ut nøkkelen
- Som du ser i steg 5. vil crypttab lete etter et script på /usr/local/sbin/ ved navnet crypto-usb-key.sh. La oss nå lage dette.
- bash$ cd /usr/local/sbin
- bash$ sudo vim crypto-usb-key.sh
- Legg dette inn i filen:
- #!/bin/sh
- # provides key to encrypted root partition located on external usb keychain
- # author: Tor Martin Slåen [tormsl@gmail.com]
- KEYF="root.key"
- MD=/tmp-usb-mount
- UUID=ef4af71d-a86c-438d-8tr58-94502caa4582
- mkdir -p $MD
- modprobe usb-storage >/dev/null 2>&1
- modprobe ext3 >/dev/null 2>&1
- sleep 7
- OPENED=0
- echo "Trying to get key from usb keychain." >&2
- mount /dev/disk/by-uuid/$UUID $MD -t ext3 -o ro >/dev/null 2>&1
- if [ -f $MD/$KEYF ]; then
- cat $MD/$KEYF
- umount $MD 2>/dev/null
- OPENED=1
- break
- fi
- if [ $OPENED -eq 0 ]; then
- echo "FAILED to find suitable USB keychain ..." >&2
- echo -n "Try to enter your password: " >&2
- read -s -r A
- echo -n "$A"
- else
- echo "Successfully loaded keyfile from keychain!" >&2
- fi
- NB: Her må du bytte ut UUID verdien med den fra steg 3 (UUID til minnepinnen). Lagre of lukk filen.
- Gi riktige rettigheter til filen:
- bash$ sudo chmod 700 crypto-usb-key.sh
- Test scriptet med kommandoen:
- bash$ sudo umount /media/keyChain && sudo /usr/local/sbin/crypto-usb-key.sh
- Hvis alt er i orden vil scriptet skrive ut innholdet i root.key. Hvis ikke, sjekk at din UUID stemmer, hvis du har partisjonert minnepinnen uten å restarte etterpå, kan det hende at /dev/disk/by-uuid/ inneholder en feil UUID – restart og sjekk. Hvis det fortsatt ikke fungerer, sjekk at alle foregående steg er blitt utført.
- NB: Feilmeldingen som sier read: 31: Illegal option -s er ikke en feil i scriptet
- 7. Oppdatere initrd
- Alt vi nå har igjen å gjøre er å oppdatere initrd. Dette gjøres i Ubuntu ved å bruke update-initramfs
- bash$ sudo update-initramfs -u all
- Det vil komme en melding om at initrd blir oppdatert, vent til denne er ferdig. Vi er nå klar til å restarte :D Husk at du har en safe-mode opsjon i grub hvis noe skulle gå galt.
- Hvis du har flere krypterte partisjoner i crypttab kan du låse opp disse på en enklere måte; etter du har låst opp / (root). Lag deg en ny nøkkel, legg nøkkelfilen under /etc/ og gi den 0600 rettigheter, samt eierskap til root.
- Bruk dette scriptet istedet for det vi laget til minnepinnen:
- #!/bin/sh
- # unlocks encrypted partition during boot
- # put your keyfile under /etc and name it partition1.key
- exec cat /etc/partition1.key
- Gi dette scriptet et annet navn og pek crypttab hit.
- NB: Siden root er kryptert vil det ikke være en sikkerhetsrisiko å legge partition1.key under /etc/ så lenge den har riktige rettigheter og eierskap.
- Merknader / diskusjon
- * Ta vare på .key filen hvis du er usikker på kvaliteten av din minnepinne…
- * Vil du være helt sikker (eller paranoid), sletter du ditt opprinnelige passord ved å bruke bash$ sudo cryptsetup luksDelKey /dev/sda5 0 og legger en kopi av root.key i en bankboks i Sveits.
- * Noen hovedkort har vanskelig for å initialisere riktig noen minnepinner under oppstart, noe som vil resultere i at scriptet ikke får montert minnepinnen under kjøring. Det kan fungere i terminal når systemet er startet opp, men ikke under oppstartsprosedyren. Sjekk innstillinger i BIOS hvis du får dette problemet.
Add Comment
Please, Sign In to add comment