LFCA: Hvordan forbedre Linux-systemsikkerheten – Del 20


Som vi alle vet, er root-brukeren konge og har ubegrensede privilegier over Linux-systemet. Imidlertid er ikke-rootbrukere begrenset til grunnleggende oppgaver. I tillegg gis sudo-brukere bare en viss grad av root-privilegier som anses egnet av root-brukeren til å utføre spesifikke forhøyede oppgaver.

Problemer oppstår når vanlige brukere har ukontrollert tilgang til ressurser eller eskaleres til å root utilsiktet. Dette er en alvorlig sikkerhetsrisiko som kan forårsake brudd, uønskede modifikasjoner og i verste fall krasj i systemet. En annen potensiell risiko er når filer har mindre sikre filtillatelser. For eksempel kan oppstartsfiler med skrivetillatelser for globale brukere lett bli endret eller ødelagt, noe som resulterer i et ødelagt system.

Mens vi kan implementere fysisk, nettverks- og datasikkerhet, kan en ondsinnet bruker omgå sikkerhetstiltakene og dra nytte av slike sikkerhetshull. Det er av denne grunn at filsystemsikkerhet bør tas på alvor. Det gir et ekstra lag med forsvar i møte med angrep eller innsidetrusler fra ondsinnede ansatte som ikke trenger å gjøre det tunge arbeidet med å omgå sikkerhetstiltak for å få tilgang til filer.

I systemsikkerhet vil vi konsentrere oss om følgende hovedpunkter:

  • Tilgangsrettigheter – Bruker- og gruppetillatelser.
  • Håndhev passordpolicyer med PAM-modulen.

Tilgangsrettigheter – bruker- og gruppeseparasjon

Du må sikkert ha hørt at alt i Linux regnes som en fil. Og hvis det ikke er det, er det en prosess. Hver fil på et Linux-system eies av en bruker og en gruppebruker. Den har også filtillatelser for 3 brukerkategorier: bruker (u), gruppe (g) og andre (o). Tillatelsene er representert i lese, skrive og kjøre ( rwx ) for hver brukerkategori.

rwx        rwx	     rwx
User       Group     Others

Som sett før, i Grunnleggende Linux-seksjonen, kan du se filtillatelsene ved å bruke det lange formatet til ls-kommandoen som vist.

ls -l

Bare for å oppsummere, er tillatelsene vanligvis representert med ni tegn. De tre første tegnene representerer tilgangsrettighetene til den faktiske brukeren som eier filen. Det andre settet med tegn representerer tillatelsene til gruppeeieren av filen. Til slutt, det siste settet for andre eller globale brukere. Disse karakterene er alltid i rekkefølgen les, skrive, utfør (rwx).

Etter tillatelsene har vi bruker- og gruppeeierskap, etterfulgt av fil- eller katalogstørrelse, endringsdato og til slutt navnet på filen.

Endre fil-/katalogtillatelser og eierskap

Brukertillatelser for filer og kataloger kan endres etter behov. Tommelfingerregelen er å bruke det minste privilegerte sikkerhetsprinsippet. Enkelt sagt, sørg for at brukerne får minimum tilgangsrettigheter eller tillatelser som kreves for å få arbeidet gjort.

Prinsippet om minste privilegier begrenser brukere til kun visse roller, og ved å gjøre det, minimerer risikoen for at angripere får tilgang til og modifiserer kritiske data ved å utnytte en brukerkonto med lav spak. Det reduserer også angrepsoverflaten og begrenser spredning av skadelig programvare i tilfelle angriperen tar kontroll over systemet ditt.

Derfor, hvis en bruker bare trenger å se innholdet i en fil eller katalog, bør de ikke gis kjøre- eller skrivetillatelser. På det helt grunnleggende nivået, gi kun de minste tillatelsene og eierskapene som kreves av brukeren for å utføre oppgaver. Vi har taklet hvordan du endrer brukertillatelser og eierskap på filer/kataloger ved å bruke chmod- og chown-kommandoer i emnet grunnleggende Linux-kommandoer.

Sticky Bit Permission Mode

For at systemadministratoren skal ha lettere for å administrere tillatelser, kan spesielle tillatelser eller tilgangsrettigheter gis til hele kataloger. En av de spesielle tillatelsene som kan brukes for å begrense sletting og endring av en fil eller katalog, er sticky biten.

Litt klissete

I et scenario der en delt katalog kan nås av alle brukerne i systemet eller nettverket, er det en potensiell risiko for at noen brukere kan slette eller endre filene inne i katalogen. Dette er uønsket hvis du ønsker å opprettholde integriteten til kataloginnholdet. Og det er her den klissete biten kommer inn.

En sticky bit er en spesiell filtillatelse satt på en fil eller hele katalogen. Den gir bare eieren av filen/katalogen tillatelse til å slette eller gjøre endringer i filen eller katalogens innhold. Ingen andre brukere kan slette eller endre filen/katalogen. Den har den symbolske verdien t og en numerisk verdi på 1000.

For å slå på en sticky bit på en katalog, bruk chmod-kommandoen som følger:

chmod +t directory_name

I eksemplet nedenfor har vi brukt en sticky bit på katalogen kalt test. Når det gjelder en katalog, vil alt innhold arve sticky bit-tillatelsene. Du kan bekrefte sticky bit-tillatelsene ved å bruke ls -ld-kommandoen. Sørg for å legge merke til t-symbolet på slutten av filtillatelsene.

ls -ld test

Hvis en annen bruker prøver å slette katalogen eller endre filen inne i katalogen, blir de møtt med en Tillatelse nektet-feil.

Og det er kjernen i tillatelsen til pinnebitfilen.

Overvåking av SUID- og SGID-tillatelser

SUID (Angi bruker-ID) er en annen spesiell filtillatelse som lar en annen vanlig bruker kjøre en fil med filtillatelsene til fileieren. Det er vanligvis angitt med en symbolsk verdi s ved brukerens del av filtillatelser i stedet for en x som representerer utførelsestillatelser. SUID har en numerisk verdi på 4000.

SGID (Angi gruppe-ID) lar en vanlig bruker arve gruppetillatelsene til filgruppeeieren. I stedet for x for utførelsestillatelser, vil du se en s i gruppedelen av filtillatelsene. SGID har en numerisk verdi på 2000.

Uansett hvor praktiske de viser seg å være, er tillatelsene SUID og SGID forbundet med sikkerhetsrisikoer og bør unngås for enhver pris. Dette er fordi de gir spesielle privilegier til vanlige brukere. Hvis en inntrenger som utgir seg for å være en vanlig bruker kommer over en kjørbar fil som eies av rotbrukeren med en SUID-bit satt på, kan de bruke smutthullet og utnytte systemet.

For å finne alle filene med SUID bit satt i Linux, kjør finn-kommandoen som root-bruker.

find / -perm -4000 type -f

For kataloger som kjøres:

find / -perm -4000 type -d

For å finne alle filene med SGID-bitsett kjøres:

find / -perm -2000 type -f

For kataloger utfør:

find / -perm -2000 type -d

For å fjerne SUID-biten på en fil, kjør chmod-kommandoen som vist:

chmod u-s /path/to/file

For å fjerne SGID-biten på en fil, kjør kommandoen:

chmod g-s filename /path/to/file

Håndhev passordpolicyer med PAM-modulen

Det er ikke uvanlig at brukere setter svake passord. Et godt antall angir korte, enkle og lett gjettelige passord for å unngå å glemme dem under pålogging. Selv om det er praktisk, kan svake passord lett brytes ved å bruke brute-force-angrepsskript.

PAM-modulen (Plugbar autentiseringsmodul) er en modul som lar systemadministratorer håndheve passordpolicyer på Linux-systemer. For å oppnå dette trenger du pam_pwquality-modulen som leveres av libpam_pwquality-biblioteket. Modulen pam_pwquality sjekker styrken til et passord mot et sett med regler og en systemordbok og finner svake passordvalg.

For å installere pam_pwquality-modulen på Ubuntu 18.04 og nyere versjoner, kjør:

sudo apt install libpam_pwquality

For RHEL/CentOS 8, kjør kommandoen:

sudo dnf install libpwquality

Konfigurasjonsfilen finnes på følgende plassering:

  • På Debian-Systems – /etc/pam.d/common-password
  • På RedHat-systemer – /etc/pam.d/system-auth

Konfigurere passordpolicyen

Før vi begynner å endre PAM-konfigurasjonsfilen, la oss først vurdere å samle inn innsikt om aldringskontrollene for passord.

Passord aldring detaljer

Disse finner du i filen /etc/login.defs.

Filen inneholder følgende nøkkelpassordkontroller:

  • PASS_MAX_DAYS: Maksimalt antall dager et passord kan brukes.
  • PASS_MIN_DAYS: Minimum antall. antall dager tillatt mellom passordendringer.
  • PASS_WARN_AGE: Antall dager advarsel gitt før et passord utløper.

Standardverdiene er angitt nedenfor.

PASS_MAX_DAYS-attributtet begrenser antall dager en bruker kan bruke passordet sitt. Når denne verdien er oppnådd eller passordet utløper, er brukeren tvunget til å endre passordet for å logge på systemet. Som standard er denne verdien satt til 99999, som betyr 273 år. Dette gir ikke mye mening når det gjelder sikkerhet, da brukeren kan fortsette å bruke passordet sitt hele livet.

Du kan sette dette til en meningsfull verdi, for eksempel 30 dager som vist.

PASS_MAX_DAYS  30

Etter at 30 dager har gått, vil brukeren bli tvunget til å endre passordet sitt til et annet.

PASS_MIN_DAYS-attributtet spesifiserer minimumsvarigheten som brukere kan bruke passordet før de endrer det. Hva betyr dette? Hvis for eksempel denne verdien er satt til 15 dager, vil ikke brukeren kunne endre passordet sitt igjen før det har gått 15 dager.

PASS_MAX_DAYS  15

PASS_WARN_AGE-attributtet spesifiserer antall dager en bruker vil få en advarsel om det forestående utløpet av passordet før det utløper. Du kan for eksempel sette dette til 7 dager som vist.

PASS_MAX_DAYS  7

MERK: Disse passordkontrollene fungerer ikke med allerede eksisterende kontoer. De brukes kun på nye kontoer som opprettes etter å ha definert reglene.

Angi passordkompleksitet med PAM-modul

Før du redigerer /etc/pam.d/common-password-filen, må du lage en sikkerhetskopi. I dette eksemplet har vi laget common-password.bak sikkerhetskopifilen.

sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

Åpne deretter filen.

sudo vim /etc/pam.d/common-password 

Finn linjen vist nedenfor.

password        requisite          pam_pwquality.so retry=3

Alternativet Prøv på nytt angir maksimalt antall ganger du må angi riktig passord før du får en feil. Som standard er dette satt til 3. Dette er bare ett alternativ og vi kommer til å inkludere flere alternativer.

Legg til følgende attributter til linjen:

minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username 

La oss konkretisere disse egenskapene.

  • minlen=10: Angir den minste akseptable størrelsen for passordet. I dette tilfellet 10 tegn.
  • difok=3: Dette er det maksimale antallet tegn som er til stede i det forrige passordet.
  • lcredit=-1: Dette er minimum antall små bokstaver som skal være til stede i passordet.
  • ucredit=-1: Dette er det maksimale antallet små bokstaver som skal være til stede i passordet.
  • dcredit=-1: Minimum antall numeriske tegn som skal defineres i passordet.
  • ocredit=-1: Minimum antall spesialtegn, f.eks. @, #, & som skal defineres i passordet.
  • reject_username: Dette alternativet utløser avvisning av passordet hvis passordet er brukernavnet enten i rett eller omvendt format.

Hvis du prøver å opprette en ny bruker som ikke oppfyller passordpolicyene, kommer du til å støte på slike feil som vist.

Sammendrag

Dette avslutter emnet om systemsikkerhet og grunnleggende sikkerhetsprinsipper generelt. I hele kapittelet har vi kastet lys over grunnleggende sikkerhetstiltak som du kan implementere for å beskytte Linux-systemet ditt mot ondsinnede brukere som hackere eller misfornøyde ansatte.