Simovits

Kiosk-datorer – Del 1 – Skrivskydd

I detta blogginlägg tänkte jag presentera flera alternativ för att skapa Linux-kiosk-system. Kiosk-system exponerar en begränsad användarmiljö på ett system, det vill säga funktionaliteten en användare har tillgång till skall kunna räknas upp och verifieras vara tillåten för systemets användningsområde. Ett exempel skulle kunna vara en biljett-kiosk tänkas endast ge användarna tillgång till en webbläsare som är begränsad till bokningssidan och inte tillåta åtkomst till att hantera operativsystemet, skapa filer eller fri surf.

Skrivskydd

En egenskap som är önskvärd i de flesta kiosk-system är att systemet inte kan modifieras. Detta kan åstadkommas genom att inga fil-förändringar sparas i kombination med att systemet i övrigt låses ned så att systemet endast tillåter en överskådlig mängd tillfälliga förändringar mellan omstarter vilka bedöms som tillåtna.

De lösningar jag tänkt presentera i denna blogg bygger by filsystem i lager som är filsystem som kan monteras i lager över samma monteringspunkt. Detta möjliggör att ett skrivskyddat system om att man monterar ett tmpfs [1] vilket är ett temporärt filsystem som skriver data till arbetsminnet ovanför det resistenta filsystemet som monteras i skrivskyddat läge.

OverlayFS

En implementation av filsystem i lager är OverlayFS [2] vilket implementerar en filsystemstyp overlay som kan anropas i mount för att montera ett filsystem ovanför ett underliggande filsystem.

I exemplet nedan monteras mappen Documents-rw över mappen Documents och alla förändringar i Documents skrivs då till Documents-rw och mappen Documents skrivskyddas tills mappen avmonteras.

mount -t overlay overlay -olowerdir=./Documents,upperdir=./Documents-rw,workdir=./Documents-work ./Documents

Detta är inte så svårt att använda för enskilda mappar men det blir mera komplicerat att konfigurera ett överlappat filsystem för hela systemet tillsammans med diskkryptering mm. Därför finns det en paketerad lösning för detta med till exempel overlayroot för Ubuntu [3].

Overlayroot

Overlayroot är busenkelt att konfigurera, aktivering av det överlappade filsystemet görs genom att lägga in overlayroot=tmpfs i /etc/overlayroot.conf och starta om systemet. För att administrera systemet kan overlayroot inaktiveras vid uppstart genom att lägga till kernel-parametern overlayroot=disabled.

Med detta har vi ett skrivskyddat system till en kiosk som manuellt kan uppdateras och omkonfigureras genom att tillfälligt starta upp systemet med overlayroot avaktiverat. För att förhindra vanliga användare från att göra förändra boot-parametrarna får man dock låsa ned Grub2 med ett administratörslösenord [4].

Modifierad Live-avbild

En nackdel med att manuellt modifiera kiosk-installationer såsom resultatet blir med overlayroot är att installationerna ofrånkomligt kommer att divergera och inte kan återskapas från ett recept. Det går givetvis att klona hårddiskarna men det finns ingen garanti att det fungerar för annan hårdvara.

Live-avbilder till till Linux-distributioner kör ofta från skrivskyddade filsystem såsom SquashFS [5] och det finns verktyg för att komponera egna Linux-avbilder som sedan enkelt kan brännas till USB-minnen, eller till och med till hårddisken på kiosk-datorer lika enkelt som såhär om diskimagen är kiosk.iso hårddisken är /dev/sda:

dd if=./kiosk.iso of=/dev/sda

Ett GUI-verktyg för att komponera modifierade Ubuntu live-avbilder är Cubic [6], ett annat mer programmatiskt sätt är att använda Debootstrap [7], skapa ett chroot-filsystem, konfigurera detta och bränna en egen diskavbild. Med den senare lösningen kan alla steg skriptas för att kunna återskapas från ett recept. En bra steg-för-steg exempel på hur man kan skapa en modifierad Ubuntu live-avbild finns på https://github.com/mvallim/live-custom-ubuntu-from-scratch.

Ett sätt att debugga sin modifierade Linux-avbild är att skapa ett separat grub-meny-entry för att starta från iso-filen i /etc/grub.d/40_custom och bygga om grub med update-grub. Till exempel följande:

menuentry "Kiosk" {
    set root=(hd0,2)
    set isofile="/kiosk.iso"
        loopback loop $isofile
        linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile --
        initrd (loop)/casper/initrd
}

Till nästa blogg

Denna bloggpost täcker endast en del av vad ett kiosk-system bör konfigurera, nämligen skrivskyddet. Med detta kommer kiosken alltid starta upp till en godkänd konfiguration men för att få en säker kiosk behöver dels uppstarten skyddas och dels behöver tillåtna temporära förändringar mellan omstarter ringas in och annan interaktion begränsas. Detta lämnas till nästa blogg.

Referenser