[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RFC: säkert köra osäkra applikationer



Hej alla!

[Sammanfattning: jag är rädd för vissa applikationer (läs: mozilla
firefox) och vill köra dessa i en mer skyddad miljö. Här beskrivs ett
sätt att göra det.]

När jag som användare startar en applikation i ett UNIX-system, Debian
i mitt fall, startas den med mitt användar-id. Med andra ord kan
applikationen härja fritt i min hemkatalog om den vill och göra allt
möjligt otyg, till exempel

  rm -rf /home/ska/*

. Normalt är jag inte särskilt rädd för de program jag startar, men i
vissa fall kan jag känna mig lite orolig. Det jag tänker på i första
hand är Mozilla Firefox. Nu har jag inget emot Firefox, det är ett
mycket trevligt program på alla sätt, men jag blir lite orolig över de
många säkerhetsluckor som rapporteras kring det. Jag vill till exempel
inte att någon crackare skulle kunna läsa och skicka vidare alla mina
mejl med en firefox-exploit. Osv, osv.


Idealiskt skulle jag vilja att applikationen inte skulle få öppna
filer utanför vissa tillåtna kataloger utan mitt samtycke [1], och jag
beskriver här ett sätt som man delvis kan lösa det på i UNIX. Kom
gärna med kommentarer om varför det inte fungerar, eller
i-vilket-paket-det-redan-är-implementerat (jag har inte sökt särskilt
noga efter något liknande).


Grundtanken är att för varje användare i systemet (jag är "ska") skapa
en användare som *enbart* kör opålitliga applikationer
("untrusted"-användare, "ska-untrusted" i mitt
fall). Untrusted-användaren har en egen primärgrupp, "ska-untrusted",
som också är den enda grupp användaren är med i. Untrusted-användarens
hemkatalog ligger under den vanliga användarens, dvs i mitt fall

  /home/ska/untrusted

. Denna katalog är är skapad med skrivrättigheter för gruppen (chmod
g+rwxs /home/ska/untrusted) så att den vanliga användaren skall kunna
ändra, ta bort och skapa filer i untrusted-användarens hemkatalog. Jag
antar att man kan stänga av untrusted-användaren för inloggning i PAM,
men jag har inte kollat upp det. Annars är det bara att sätta
lösenordet till lämplig lång slumpsträng.


För att kunna köra applikationer används sudo utan lösenord och umask
för läs/skrivrättigheter för gruppen, dvs i /etc/sudoers har jag

  Defaults>ska-untrusted umask=0017
  [...]
  ska     ALL=(ska-untrusted) NOPASSWD: ALL


för att kunna köra X-program tillåter jag ska-untrusted att koppla upp
mot X-servern lokalt med xhost:

  xhost +local:ska-untrusted

och sedan har jag ett skript drop-privs [2] som kör sudo som
untrusted-användaren.

  #!/bin/sh

  sudo -H -u $USER-untrusted $*

sedan är det (nästan) bara att tuta och köra.


Ett problem som direkt uppstod var att firefox inte ville starta på
den lokala displayen

  (firefox-bin:26419): Gtk-WARNING **: cannot open display:  

men detta gick att lösa med att starta det med

  drop-privs mozilla-firefox --display :0.0



Ursäkta för det långa mejlet - hoppas någon är intresserad. Några
frågor till er andra:

1. Finns det redan något (bättre) sätt att göra detta?
2. Någon som vet varför man måste starta firefox med --display? rxvt
   mfl fungerar bra utan
3. Finns det några andra fallgropar här?

// Simon

[1] http://lists.gnu.org/archive/html/l4-hurd/2005-10/msg00203.html
[2] Jag tror det finns något liknande till Windows, jag tog namnet därifrån



Reply to: