Hur man ökar säkerheten i linux Det här specialarbetet handlar om hur man kan öka säkerheten i linux. Jag har utgått från min egna dator, som är en K6 2 350 MHz,128M RAM,10,1G hårddisk, 40x CDROM, 3,5" diskett station,17" monitor,10/100 Mbit/s nätverkskort,ljudkort. Som kör Slackware 7.0(kernel 2.2.13). Nyaste versionen av den här dokumentationen kommer att finnas på www.algonet.se/~pult/linux/doc/ Indelningen är uppdelat som följer: Externa faktorer. Dator chassit. BIOS. LILO. Boot sekvens. System. Partitoner och rättigheter. Tillåta användarna montera. Suid filer. Begränsa användarnas system resurser. Quota. Minnes,process begränsningar. Tillåt inte alla att su:a till root. Under körning. Var endast root när det behövs. Kolla i /var/log. Allmänt. Installera inte okända program utan vidare. Kör X i bakgrunden. Inga oaktiva användare. Stänga av onödiga eller oanvända deamons. Falsk säkerhet. Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 1
Externa faktorer. Dator chassit. Det som är svårast att skydda sig ifrån är fysiska angrepp mot datorn. Det bästa vore om man kunde låsa in datorn. Men det är inte alltid möjligt. Om man ska ha ett skydd mot fysiska angrep så måste man fråga sig om skyddet ska vara mot stöld eller mot intrång i första hand. Att skydda sig från stöld gör man nog enklast genom att låsa in datorn i en låda som är väl förankrad i något som sitter fast. Detta skyddar ganska bra i mot intrång också. Själv skulle jag nöja med mig ett hänglås på dator chassit. Det gör det svårt att komma åt moderkortet och på det sättet nollställa BIOS:ett, åtminstone inte utan min vetskap. BIOS. Om man har skyddat sig från att någon kan komma åt moderkortet så är det ganska effektivt att sätta lösenord på BIOS, efter som det då inte är möjligt att ändra några inställningar. Om man vill att datorn ska kunna starta efter ett strömavbrott så ska man ställa in så att det bara krävs lösenord när man ska in i BIOS, detta gör att vem som helst kan boot:a datorn. Vill man däremot att det ska krävas lösenord för att kunna boot:a ska man också sätta ett user lösenord så att användarna inte kan ändra i BIOS,och att ställa in så att datorn frågar efter lösenord när den startas. Men om man har så att vem som helst kan boot:a datorn så ska man ställa in så att datorn endast boot:ar på en Hårddisk, alltså inte på diskett eller CDROM, detta för att förhindra att någon ska starta något annat operativsystem än det som ska boot:as från hårddisken. LILO. Om man har lilo installerat är det ganska bra att ställa in att om man ger någon parametrar till ett boot alternativ så måste man ange ett lösenord. Windows är inte så bra i säkerhets synpunkt därför så är det bra om man måste ange ett lösenord man ska tillåtas starta Windows. Ett exempel på hur /etc/lilo.conf kan se ut: Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 2
# lilo.conf boot = /dev/hda delay = 50 vga = 5 # Linux image = /vmlinuz root = /dev/hda3 label = slackware7.0 read only restricted password = foo other = /dev/hdb1 label = dos password = "not safe to run dos" Genom att lägga till: restricted password = foo så måste man ange lösenord om man ger någon parameter till boot alternativet slackware7.0. Om man däremot boot:ar dos måste man ange lösenord föratt få boot:a. password = "not safe to run dos" Men om man har lösenord i lilo så måste man ändra rättigheterna på /etc/lilo.conf så att endast root kan läsa filen, för annars är det bara och kolla vad det är för lösenord. Tillexempel så ger följande rättigheter det otillåtet för användarna att kolla i filen: rw 1 root root 653 Jan 31 18:47 /etc/lilo.conf System. Partitoner och rättigheter. Att dela upp installationen på flera hårddisks partitoner kan var bra mot att någon användare eller program fyller upp hårddisken, och på så sätt gör Linux ostabilt. Några alternativ är /, /home, /usr /var /tmp och eventuellt /var/spool på varsin partiton. Själv har jag / /usr /var /tmp /home på olika partitoner, uppordnat som följer: hda5 Logical Linux ext2 [Slackware 7/] 526.42 hda6 Logical Linux ext2 [Slackware 7/usr] 2097.45 hda7 Logical Linux ext2 [Slackware 7/var] 106.93 hda8 Logical Linux ext2 [Slackware 7/tmp] 526.42 hda9 Logical Linux ext2 [Slackware 7/home] 2525.17 Detta är dock bara inte för att öka säkerheten utan också av praktiska skäl, /home för att jag ska kunna ha kvar Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 3
mitt hembibliotek kvar om jag gör en ominstallation. Man slippa få vänta på att hela hårdisken ska fsck:as, och iställe ta det i små portioner. Respektive fördel med att ha /,/home,/usr,/var,/tmp och /var/spool på olika partitoner är: /home. Praktiska skäl tillexempel att användarna inte kan fylla upp hela hårdisken,det är även möjligt att dela /home med NFS. Och framförallt går det att förhindra användarna från köra program som root genom suid filer(se suid filer). /usr. Gör att man dela /usr mellan flera datorer genom NFS och på det sättet tjäna plats,efter som /usr tar relativt mycket plats. Det är i /usr som dom flesta program installeras därigenom går det förhindra /usr från att ta plats från /home, /var med mera. /var. Detta kan vara bra efter som det då inte är möjligt för någon användare att fylla / partitonen genom att skicka massor av mail(/var/spool/mail/) eller att fylla någon log(/var/log/) Det är inte heller möjligt genom att köa stora utskrifter (/var/spool/lpd/). /tmp. Genom att göra en egen partiton av /tmp så kan inte temporära filer fylla /, det ganska bra efter som många program sparar temporära filer som ibland inte rensas bort, tillexempel mc packarupp tar.gz filer där som blir kvar om mc kraschar. /var/spool. Om man vill vara riktigt paranoid, och göra /var/spool till en egen partiton, Detta för att förhindra att något log,skrivarkö,köade mail ska hindra andra aktiviteter i /var, tillexempel apache. Glöm inte ändra hur mycket som ska vara reserverat för root på tillexempel /home partitonen, Detta gör genom att köra "mke2fs m 0 device " när du formaterar partitonen, eller "tune2fs m 0 device " när du har installerat linux. Tillexempel så behöver root knappast 126Mb på min /home partiton. 5% är standard inställningen. Tillåta användarna montera. Att behöva logga in som root bara för att montera Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 4
cdrom:en är både jobbigt onödigt, men framförallt en säkerhets risk eftersom man lätt kan glömma root inloggad, men även för att man då lätt ger efter och delar ut root lösenordet, efter som det är bekvämare än att behöva logga in varje gång någon ska monter något. Så här kan tillexempel en /etc/fstab se ut. #device mount point type options dump fsck /dev/hda1 / ext2 defaults 1 1 /dev/hdd /cdrom iso9660 noauto,user,ro,nosuid 0 0 /dev/fd0 /mnt/floppy ext2 noauto,user,nosuid 0 0 /dev/fd0h1440 /mnt/acolon msdos noauto,user,nosuid 0 0 Här ser vi att cdrom:en inte monteras automatiskt(noauto) och att alla användare får montera den(user), ro(read only) det går bara att läsa från en skiva(med vissa undantag ;),genom att använda nosuid så kan inte någon användare montera en suid fil och köra ett program på det sättet. Samma sak gäller /mnt/floppy och /mnt/acolon bortsätt att man har rättigheter till skrivning på dom, jag har delat upp ext2 och msdos disketternas deviser och mount points så det är möjligt att montera någon av dem. Det går inte att ha samma device, då förstår inte mount vilken som är vilken. Man måste dock göra vissa justeringar men rättigheterna på /dev/hdd till: brw rw rw 1 root disk 22, 64 May 8 1995 hdd Detta för att tillåta användare spela musik skivor,köra eject. På mitt system så får användarna monter disketter men inte skriva på dom eller formatera dom, efter som jag har följande rättigheter: brw rw 1 root floppy 2, 0 May 14 1996 fd0 brw rw 1 root floppy 2, 40 May 14 1996 fd0h1440 Suid filer. En suid fil gör så att programmet kör som ägaren till filen, och därmed som root ibland, vissa filer måste dock ha suid för att fungera. Hur som helst ska det inte finnas några i användarnas hem bibilotek (/home). Det är lätt att förhindra genom att ha /home på en egen partiton och skriva följande i /etc/fstab: #device mount point type options dump fsck /dev/hda2 /home ext2 defaults,nosuid 1 1 Föratt hitta suid filer kan man köra följande kommando: find / type f \( perm 04000 o perm 02000 \) Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 5
Det finns en heldel suid program, men det kan var värt kolla igenom vilka det är, och logga vilka det är föratt se om det har tillkommit någon som inte bör höra till dom. Begränsa användarnas system resurser. Att sänka en linux dator är möjlig om man tillexempel använder allt minne eller fyller en partiton, detta går dock att förhindra genom att använda quota och ulimit (det senare ingår i bash). Quota. Quota ger möjlighet att begränsa en användares eller en grupps maximala antalet filer,tillgängliga lagrings utrymme. Detta är bra att använda på tillexempel /home partitonen, detta för inte en viss användare ska kunna ta utrymme för andra användare. Läs mer i "Quota mini HOWTO":n. Minnes,process begränsningar. I bash ingår ett program som ger möjlighet att begränsa antalet öppna filer,antalet processer,max minnes användning mm. För mer information läs manualen för bash och söka efter ulimit. Tillåt inte alla att su:a till root. Som standard får alla su:a till root. Och på det sättet bli root fast dom inte sitter på en fysisk konsol,det går dock att begränsa vilka som får bli root genom att su:a. Detta genom att ändra i /etc/login.defs så att följande rad: SU_WHEEL_ONLY no blir SU_WHEEL_ONLY yes Och att alla dom som ska få su:a till root läggstill i gruppen med GID 0 i /etc/group Under körning. Var endast root när det behövs. Att vara inloggad som root är alltid en säkerhetsrisk. Efter som root har man rätt att göra allting, och ett litet felsteg kan förstöra allt. Det räcker om någon annan får root access för några sekunder så har inget kvar på din dator. Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 6
Kolla i /var/log. Det mesta loggas i /var/log, det är därför bra att i mellanåt titta i loggarna efter konstiga saker. Det finns vissa program som kollar i loggarna och snyggar till dom med olika färger som gör dom lättare att tyda, det kan också vara tänkvärt att installera ett program som begränsar loggarns storlek så slipper /var bli överfyllt av loggarna. Allmänt. Installera inte okända program utan vidare. När du installerar ny okända program bör du vara försiktig och helst testa på en oviktig dator först, testa att köra "make install" som vanlig användare så ser du vad make försöker göra. Kolla upp om programmet har suid rättigheter,efter som dom programmen bör man vara särskilt försiktiga med, eftersom en bug i dessa program kan få mycket allvarliga konsekvenser (vem som helst kan få root access). Den första barriären i ett linux system är(oftast) användarnamn och lösenord. Det är därför viktigt hålla en hög standard på lösenorden, en kedja blir inte starkare än sin svagaste länk. Så låt användarna sätta sina lösenord själva när dom är inloggad som sej själva, istället för att göra det som root, detta pågrund av att root får göra lättare lösnord. Det är möjlig att begränsa hur länge man får ha ett lösenord innan det måste byttas. Det ska inte vara något personligt lösenord som tillexempel ens flickväns namn, men det ska heller inte vara så svårt att man måste skriva ner det. I filen /etc/login.defs finns variabler för minimun längden på lösenord. Hur länge man får ha ett lösenord utan att byta, standard i Slackware 7.0 är: PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 Har man många användare som inte använder sina konton kan man "sätta en stjärna i kanten" i /etc/passwd, På följande sätt: pult:*:1001:100:järker Påhls:/home/pult:/bin/bash Där stjärnan står istället för ett "x" som är det vanliga, detta gör det omöjligt för någon att loggain som pult både personen som har kontot och krackers. Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 7
Kör X i bakgrunden. Som standard kör man X från en tty och låser upp en tty bara för detta. Detta är inte bara onödigt utan också en säkerhets risk för om en användare eller root startar X från en tty och sen låser X med tillexempel xlock, så kan någon fortfarande bara gå till den tty som X startades ifrån och trycka Ctrl+Z eller Ctrl+C och helt plötslig har man access till datorn. Detta går att förhindra genom att göra ett alias för startx: alias startx= startx >~/.xsession errors 2>&1 & Nu kommer X startas och skriva allt som X skriverut till filen.xsession erros i användarens hembibliotek. Det gör att användaren sen kan kolla på den i en xterm eller rxvt när han kör X. Och att tty:n blir ledig och användaren kan logga ut från tty:n om han eller hon så vill. Inga oaktiva användare. Om någon glömmer att logga ut kan leda till att någon ovälkommen får access. Och i värsta fall root access. Det kan därför vara bra att logga ut sådan som har varit oaktiva för länge. Detta är möjlig genom vissa program ett sådant är auotlog. Stänga av onödiga eller oanvända deamons. Demoner är program som möjliggör vissa tjänster så som webb server, e mail server med mera. Dessa kan vara en säkerhets risk. Tillexempel kan cron demonen möjliggöra för användarna att starta X varje minut. Sendmail är en mail deamon som kan vara en säkerhets risk om den inte är rätt konfrugerad, och efter som det är väldigt mycket att konfrugera är det mycket som kan bli fel. Så har du någon deamon som du inte använder kan det vara tänkvärt att stänga av den. Falsk säkerhet. Att skydda sig genom tillexempel byta namn på root till något annat är inget säkerhets höjande åtgärd,för då lurar man bara sig själv. För om någon verkligen vill in så hjälper det inte att "luras". Tack till. Tack till alla som på något sätt bidragit till det här specialarbetet(utöver dom år jag själv har kört lärt mig om linux), och ett speciellt tack alla linux fantaster på StMDF. Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 8
Källor: Järker Påhls(Jag i egen hög person) pult@algonet.se Richard Påhls Security HOWTO ftp://metalab.unc.edu/pub/linux/docs/howto Quota mini HOWTO Manualerna för: bash, passwd, login.defs, mount Järker Påhls, EcEi3. Hur man ökar säkerheten i linux 9