Veel mensen beschouwen harde schijven als veilig omdat ze die fysiek bezitten. Het is moeilijk om de gegevens op een harde schijf te lezen die je niet hebt, en veel mensen denken dat het beveiligen van hun computer met een wachtwoordzin de gegevens op de schijf onleesbaar maakt.
Dit is niet altijd het geval, deels omdat in sommige gevallen een wachtwoordzin alleen dient om een gebruikerssessie te ontgrendelen. Met andere woorden, je kunt een computer aanzetten, maar omdat je de wachtwoordzin niet hebt, kun je niet op het bureaublad komen, en kun je dus geen bestanden openen om ze te bekijken.
Het probleem is, zoals menig computertechnicus begrijpt, dat harde schijven uit computers kunnen worden gehaald, en sommige schijven zijn al extern ontworpen (USB sticks, bijvoorbeeld), zodat ze op elke computer kunnen worden aangesloten voor volledige toegang tot de gegevens die erop staan. Je hoeft een schijf ook niet fysiek te scheiden van de computer om deze truc te laten werken. Computers kunnen worden opgestart vanaf een draagbare opstartschijf, die een schijf loskoppelt van het besturingssysteem en er een externe schijf van maakt die kan worden gelezen.
Het antwoord is om de gegevens op een schijf in een digitale kluis te plaatsen die niet kan worden geopend zonder informatie waartoe alleen jij toegang hebt.
Linux Unified Key Setup (LUKS) is een schijfversleutelingssysteem. Het biedt een generieke sleutelopslag (en bijbehorende metadata en herstelhulpmiddelen) in een speciaal gebied op een schijf met de mogelijkheid om meerdere wachtwoordzinnen (of sleutelbestanden) te gebruiken om een opgeslagen sleutel te ontgrendelen. Het is ontworpen om flexibel te zijn en kan zelfs metadata extern opslaan, zodat het kan worden geïntegreerd met andere tools. Het resultaat is volledige schijfversleuteling, zodat je al jouw gegevens veilig kunt opslaan, zelfs als jouw schijf fysiek of softwarematig van de computer is gescheiden.
Het is niet gebruikelijk om een interne harde schijf los te koppelen van de computer, maar externe schijven zijn ontworpen om mee te reizen. Naarmate de technologie kleiner en kleiner wordt, is het gemakkelijker om een draagbare schijf aan een sleutelhanger te hangen en elke dag met je mee te dragen. Het voor de hand liggende gevaar is echter dat je ze ook gemakkelijk kunt kwijtraken. Ik heb achtergelaten schijven gevonden in de USB-poorten van hotel lobby computers, business center printers, klaslokalen en zelfs een wasserette. De meeste hiervan bevatten geen persoonlijke informatie, maar het is een gemakkelijke fout om te maken.
Je kunt voorkomen dat belangrijke gegevens in verkeerde handen terecht komen door jouw externe schijven te versleutelen.
LUKS en de bijhorende cryptsetup opdracht bieden een manier om dit onder Linux te doen. Zoals Linux doet tijdens de installatie, kun je de hele schijf versleutelen zodat er een wachtwoordzin nodig is om hem te mounten.
Eerst heb je een lege externe schijf nodig (of een schijf met inhoud die je bereid bent te wissen). Dit proces overschrijft alle gegevens op een schijf, dus als je gegevens hebt die je op de schijf wilt bewaren, maak er dan eerst een back-up van.
Ik heb een kleine USB stick gebruikt.
Wees op je hoede tegen het per ongeluk wissen van gegevens, de schijf waarnaar in deze tip wordt verwezen, bevindt zich op de locatie /dev/sdb
.
Sluit jouw schijf aan en zoek de locatie:
dany@pindabook:~> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 238,5G 0 disk
├─sda1 8:1 0 1000M 0 part
├─sda2 8:2 0 260M 0 part /boot/efi
├─sda3 8:3 0 8G 0 part [SWAP]
├─sda4 8:4 0 80G 0 part /
└─sda7 8:7 0 149,2G 0 part /srv/www/htdocs
/usr/home/Documents
sdb 8:16 1 3,7G 0 disk
└─sdb1 8:17 1 3,7G 0 part
Ik weet dat mijn demo drive zich bevindt op /dev/sdb
omdat ik de grootte ervan herken (3,7GB), en het is ook de laatste drive die ik heb aangesloten (met sda als eerste [interne schijf], sdb als tweede [USB stick], enzovoort).
De aanduiding /dev/sdb1 betekent dat de schijf 1 partitie heeft.
Als je het niet zeker weet, verwijder dan jouw schijf, kijk naar de uitvoer van lsblk
, en sluit dan terug jouw schijf aan en kijk opnieuw naar lsblk
.
Zorg ervoor dat je de juiste schijf identificeert, want versleutelen overschrijft alles wat erop staat. Mijn schijf is niet leeg, maar bevat kopieën van documenten waar ik elders kopieën van heb, dus het verlies van deze gegevens is niet belangrijk voor mij.
Om verder te gaan, vernietigen we de inhoud van de schijf door de schijf te overschrijven met nullen:
dany@pindabook:~> sudo dd if=/dev/zero of=/dev/sdb bs=512
[sudo] wachtwoord voor root:
dd: fout bij schrijven van '/dev/sdb': Geen ruimte meer over op apparaat
7831553+0 records gelezen
7831552+0 records geschreven
4009754624 bytes (4,0 GB, 3,7 GiB) gekopieerd, 925,961 s, 4,3 MB/s
Deze stap is niet strikt noodzakelijk, maar ik begin graag met een schone lei. Deze stap duurt lang (926 seconden of 15 minuten voor mijn 4 GB USB Stick), maar heeft ook voordelen bij het maken van een versleutelde back-up.
De cryptsetup opdracht gebruiken we voor het beheren van LUKS volumes. De luksFormat subopdracht creëert een soort LUKS kluis die beveiligd is met een wachtwoord en een beveiligd bestandssysteem kan bevatten.
Wanneer je een LUKS-partitie maakt, wordt je gewaarschuwd over het overschrijven van gegevens en wordt je gevraagd om een wachtwoordzin voor jouw schijf te maken:
dany@pindabook:~>sudo cryptsetup luksFormat /dev/sdb
[sudo] wachtwoord voor root: WARNING! ======== Dit zal data op /dev/sdb onherroepelijk overschrijven. Are you sure? (Type 'yes' in capital letters):YES
Voer wachtwoord in voor /dev/sdb: Voer wachtwoord nogmaals in:
Nu heb je een volledig versleutelde kluis op je schijf.
Kijkers, inclusief uw eigen ogen, worden buiten deze LUKS partitie gehouden.
Dus om hem te gebruiken, moet je hem openen met je wachtwoordzin.
Open de LUKS kluis met cryptsetup open
samen met de apparaatlocatie (/dev/sdb, in mijn voorbeeld) en een willekeurige naam voor je geopende kluis:
dany@pindabook:~> sudo cryptsetup open /dev/sdb stick
Voer wachtwoord in voor /dev/sdb:
In dit voorbeeld gebruik ik stick, maar je kunt je kluis elke naam geven die je maar wilt, en je kunt hem elke keer dat je hem opent een andere naam geven.
LUKS volumes worden geopend op een speciale apparaatlocatie genaamd /dev/mapper. Je kunt de bestanden daar oplijsten om te controleren of jouw kluis is toegevoegd:
dany@pindabook:~> ls /dev/mapper
control stick
Nu je je LUKS volume ontcijferd en open hebt, moet je er een bestandssysteem op aanmaken om er gegevens in op te slaan. In mijn voorbeeld gebruik ik XFS, maar u kan ext4 of JFS gebruiken of gelijk welk bestandssysteem dat je wil:
dany@pindabook:~> sudo mkfs.xfs -f -L stick /dev/mapper/stick
meta-data=/dev/mapper/stick isize=512 agcount=4, agsize=244608 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=0 bigtime=0 inobtcount=0
data = bsize=4096 blocks=978432, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Je kunt een LUKS volume op elk moment sluiten met de close
subopdracht van cryptsetup
:
dany@pindabook:~> sudo cryptsetup close stick
Dit verwijdert het volume uit /dev/mapper.
Gebruikers van grafische bureaubladomgevingen zoals KDE en Gnome krijgen bij het aansluiten van een LUKS versleuteld volume ondersteuning.
Daarbij moet je zowel de LUKS wachtwoordzin ingeven, als het root wachtwoord om op de achtergrond de cryptsetup opdracht te kunnen uitvoeren.
Bij het openen van de bestandsbeheerder blijkt echter als vlug dat je als gewone gebruiker geen schrijfrechten hebt.
Dit los je op door éénmaal de volgende opdracht uit te voeren:
dany@pindabook:~> sudo chown dany:users /run/media/dany/stick/
[sudo] wachtwoord voor root:
Bekijken we de inhoud van de map /dev/mapper, dan merken we dat de grafische omgeving zelf een unieke naam voor de kluis heeft bedacht.
dany@pindabook:~> ls /dev/mapper
control luks-813a996c-88b8-40af-afac-8a323ea1ea43
En dat het bestandssysteem in de kluis automatisch werd gekoppeld. Vandaar dat je de kluis niet kunt sluiten:
dany@pindabook:~> sudo cryptsetup close luks-813a996c-88b8-40af-afac-8a323ea1ea43
Apparaat luks-813a996c-88b8-40af-afac-8a323ea1ea43 is nog in gebruik.
Koppel eerst het bestandsysteem in de kluis af met:
dany@pindabook:~> sudo umount /run/media/dany/stick
Waarna je de kuis kunt sluiten:
dany@pindabook:~> sudo cryptsetup close luks-813a996c-88b8-40af-afac-8a323ea1ea43
Dit kan natuurlijk ook via de grafische omgeving.
Eerst heb ik wat informatie nodig over het niet geopende LUKS volume:
dany@pindabook:~> sudo fdisk -l
Schijf /dev/sda: 238,47 GiB, 256060514304 bytes, 500118192 sectoren
Disk model: SAMSUNG MZ7TD256
Eenheid: sectoren van 1 * 512 = 512 bytes
Sectorgrootte (logisch/fysiek): 512 bytes / 512 bytes
In-/uitvoergrootte (minimaal/optimaal): 512 bytes / 512 bytes
Schijflabeltype: gpt
Schijf-ID: 4377B292-5385-4B4B-8FDA-FA94290B7512
Apparaat Begin Einde Sectoren Grootte Type
/dev/sda1 2048 2050047 2048000 1000M Windows recovery-omgeving
/dev/sda2 2050048 2582527 532480 260M EFI-systeem
/dev/sda3 2582528 19357695 16775168 8G Linux wisselgeheugen
/dev/sda4 19357696 187131903 167774208 80G Linux bestandssysteem
/dev/sda7 187131904 500117503 312985600 149,2G Microsoft basisgegevens
Schijf /dev/sdb: 3,73 GiB, 4009754624 bytes, 7831552 sectoren
Disk model: USB DISK 2.0
Eenheid: sectoren van 1 * 512 = 512 bytes
Sectorgrootte (logisch/fysiek): 512 bytes / 512 bytes
In-/uitvoergrootte (minimaal/optimaal): 512 bytes / 512 bytes
Daaruit blijkt dat de fysieke sectorgrootte van de USB stick (LUKS volume, /dev/sdb) 512 bytes is.
Een versleutelde back-up maak je dan door een schijfkopie te maken met de dd
opdracht.
De optie conv=sparse
zorgt ervoor dat sectoren die geen informatie bevatten, niet in de back-up worden opgenomen.
Sectoren die uitsluiten nullen bevatten, worden aanzien als lege, geen informatie bevattende sectoren.
Het voordien wissen van de schijf wordt hier dan een duidelijk voordeel.
dany@pindabook:~> sudo dd if=/dev/sdb of=stick.img conv=sparse bs=512
7831552+0 records gelezen
7831552+0 records geschreven
4009754624 bytes (4,0 GB, 3,7 GiB) gekopieerd, 183,527 s, 21,8 MB/s
Aan de uitvoer van de opdracht zie je duidelijk dat de volledige USB stick in 3 minuten (183 seconden) werd gekopieerd.
Maar als je de volgende ls
opdracht uitvoert, krijg je de volgende informatie te zien:
dany@pindabook:~> ls -hlst *.img
13M -rw-r--r-- 1 root root 3,8G 2 sep 19:09 stick.img
Hierbij is 3,8G de grootte van de USB-stick, maar 13M de grootte van het sparse back-up bestand. M.a.w. het lijkt alsof het back-up bestand 3,8G groot is, maar door enkel de sectoren met inhoud weg te schrijven neemt het back-up bestand minder schijfruimte in.
Aan een back-up heb je niets als je bij een ramp de gegevens niet kunt terughalen. De werkwijze is identiek, buiten het feit dat we deze keer werken met een bestand met een LUKS volume.
Met de losetup
opdracht kan je het besturingssysteem een bestand als een apparaat (schijf) laten benaderen:
dany@pindabook:~> sudo losetup /dev/loop0 stick.img
[sudo] wachtwoord voor root:
Je kunt het virtuele apparaat dan met cryptsetup openen:
dany@pindabook:~> sudo cryptsetup open /dev/loop0 stick
Voer wachtwoord in voor /home/dany/stick.img:
En aan het bestandssysteem koppelen:
dany@pindabook:~> sudo mount /dev/mapper/stick /mnt
De inhoud ervan beheren en weergeven met bijvoorbeeld:
dany@pindabook:~> tree /mnt/
/mnt/
└── Nieuwe map
└── Tekstbestand.txt
1 directory, 1 file
Loskoppelen doe je met:
dany@pindabook:~> sudo umount /mnt
Daarna sluit je de kluis met:
dany@pindabook:~> sudo cryptsetup close stick
En uiteindelijk koppel je het virtuele apparaat terug los van het back-up bestand.
dany@pindabook:~> sudo losetup -d /dev/loop0
Om de USB stick terug zonder LUKS versleuteling te gebruiken, formatteer je deze met het script dat je kan vinden op de webpagina USB Stick formatteren.
dany@pindabook:~> sudo bash usbformat.sh /dev/sdb "Dany Pinoy"
[sudo] wachtwoord voor root:
Fout: /dev/sdb: onbekend schijflabel
Aanmaken partitietabel op /dev/sdb
Opmerking: Het kan nodig zijn /etc/fstab bij te werken.
Aanmaken partitie op /dev/sdb
Opmerking: Het kan nodig zijn /etc/fstab bij te werken.
Partitie formatteren met FAT32 en naam geven
mkfs.fat 4.1 (2017-01-24)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
Overzicht:
Model: USB DISK 2.0 (scsi)
Schijf /dev/sdb: 4010MB
Sectorgrootte (logisch/fysiek): 512B/512B
Partitietabel: msdos
Schijfvlaggen:
Nummer Begin Einde Grootte Type Bestandssysteem Vlaggen
1 1049kB 4010MB 4009MB primary fat32 lba, type=0c
Het back-up bestand verwijder je met:
dany@pindabook:~> sudo rm stick.img
[sudo] wachtwoord voor root: