Unix sikkerhed programmering: Minimer privilegier



Sikkerhed procedurer skal minimere privilegier, for at reducere fejl på muligheden for sikkerhedshuller. I denne artikel beskrives, hvordan du minimerer de privilegerede moduler, de privilegier og rettigheder, der tildeles den effektive tid til at minimere privilegier.

Artikel ikke kun diskuteres nogle af de traditionelle UNIX privilegerede klasse af mekanismer, også drøftet det relativt nye mekanismer, som f.eks FreeBSD's fængsel (), Linux Security Module (Linux Security Modules, LSM) rammer, og Security-Enhanced Linux (SELinux).

3 marts 2003, Internet Security Systems om Sendmail er en alvorlig fejl i en advarsel. Alle e-mail via message transfer agent (mail transfer agent, MTA) til overførsel, Sendmail er det mest populære MTA, så denne advarsel påvirket mange organisationer over hele verden. Problemet er ifølge de sædvanlige konfiguration, omhyggeligt sæt "fra", "til" eller "cc"-feltet i email-beskeder giver afsenderen fuldstændig (root) kontrol af et hvilket som helst maskine, der kører Sendmail. Mere alvorligt, vil den almindelige firewall beskytter ikke mod sådanne angreb inde i maskinen.

Den direkte årsag til dette smuthul, fordi Sendmail har en sikkerhed brist opdagelse, kan buffer overflow forekomme. Men en vigtig rolle i faktor, Sendmail er ofte installeret som en enhedsstat "setuid root"-programmet, kør det på systemet har fuld kontrol lov. Dette Sendmail fejl i nogen af dem, der kan give en hacker mulighed direkte kontrol over hele systemet.

Dette design er nødvendigt? Nej, Wietse Venema's Postfix er en fælles kan matche det MTA. Ligesom Sendmail, vil Postfix gøre en masse for sikkerhed afprøvning imidlertid, med henblik på at minimere privilegier, Postfix udformet som et sæt af moduler. Resultaterne er Postfix generelt betragtes som mere sikker end Sendmail-programmet. I denne artikel beskrives, hvordan du minimerer privilegier, kan du anvende samme tænkning til dit program.

Minimer grundlag af privilegiet

Praktisk anvendelse af de procedurer, der har mangler. Ønsker vi virkelig det, men i virkeligheden er det. Komplekse behov, planlægge pres og ændringer i miljøet er usandsynligt, at være praktisk, så fejlfri proces. Selv de, der har bestået komplekse og sofistikerede teknologi til formelt bevise den korrekte procedure, vil der være fejl. Hvorfor? En af grundene er, at kontrollen skal ske en række antagelser, og ofte er disse forudsætninger er ikke helt korrekt. Under alle omstændigheder, af forskellige årsager havde de fleste af de procedurer, der ikke har været en streng test. Selv i dag er der ingen fejl (usandsynligt), er de fremtidig vedligeholdelse af ændringen eller ændringer i miljøet vil kunne give en fejl. Så for at behandle praktiske problemer, vi har et stykke vej til at udvikle sikkerhedsprocedurer, på trods af fejl i vores program.

På trods af disse mangler, er sikkerheden program den vigtigste måde er at minimere privilegium. Privilege ikke bare give alle kan gøre. UNIX-systemer i klassen, med "root" bruger, andre brugere eller medlemmer af en gruppe af privilegier er de mest almindelige typer af privilegier. Nogle systemer giver dig mulighed for at yde læse eller skrive privilegier til bestemte filer. Men alligevel, for at minimere privilegier:

Kun en del af programmet har brug for rettigheder, der tildeles og privilegier

Kun en del af det er absolut nødvendigt at give særlige privilegier

Privilegier for den effektive tid eller effektivt kan begrænses til et absolut minimum tid

Faktum er målet, ikke absolut. Grundlaget for din organisation (såsom dit operativsystem eller virtuelle maskine) kan gøre streng gennemførelse af disse er ikke let, eller den strenge gennemførelse af disse kan være meget kompliceret, som førte til afslutningen af at forsøge at indføre strengere defekt. Men jo tættere du fra disse mål, er muligheden for fejl føre til lavere sikkerhed. Selv hvis fejlen havde sikkerhedsproblemer, der førte til sikkerheden problem kunne være endnu lavere. Og hvis du kan sikre, at kun en lille del af programmet har særlige privilegier, kan du bruge en masse ekstra tid for at sikre, at en del, der kan modstå angreb. Denne idé er ikke noget nyt, Saltzer og Schroeders glimrende 1975 papir behandlet principperne om sikkerhed, udtrykkeligt som et princip om minimum privilegium (se Resources). Nogle ideer er tidløse, såsom minimering af privilegium.

De næste tre afsnit vil diskutere disse mål igen, herunder hvordan man kan opnå deres klasse UNIX-systemer. Så vil vi diskutere FreeBSD og Linux i nogle særlige mekanismer til rådighed, herunder NSA's Security-Enhanced Linux (SELinux) diskussion.

Minimer privilegeret moduler

Som nævnt tidligere, kun for at blive privilegerede del af programmet kun anvendes privilegerede. Det vil sige, når du designer dit program, så prøv at behandle opdelt i separate dele, kun at lave en lille og uafhængig del af behovene inden for bestemte privilegier.

Hvis forskellige dele skal køres, og brug derefter UNIX-system processer (ikke tråde). Tråde deler deres sikkerhed privilegier, kan den tråd pågældende forstyrre processen med alle de andre tråde. Privilegerede del af forberedelsen på de øvrige programmer, som det er ved at blive angrebet: en dag vil være! Sørg for, at privilegerede del af det eneste ting at gøre så lidt som muligt; begrænset funktionalitet betyder mindre sandsynligt, at der skal anvendes.

En fælles tilgang er at skabe en yderst begrænset funktion har særlige privilegier (såsom en setuid eller setgid) kommando-linje værktøj. UNIX's passwd kommandoen er et eksempel, det er en særlig privilegium kommandolinjeværktøjer til ændring af password (setuid root), men det kan gøre er at ændre din adgangskode. Så kan anmode om en bred vifte af GUI-værktøjer til at gøre den faktiske ændring passwd. Hvis det er muligt, så prøv helt at undgå at skabe setuid eller setgid program, er det vanskeligt at sikre, at du virkelig er beskytte alle input. Men nogle gange er du nødt til at oprette en setuid / setgid programmer, så når det er nødvendigt, at der så vidt muligt behandle mindste og mest begrænset.

Der er mange andre måder. For eksempel kan du have en speciel privilegium af en lille "server (server)" proces serveren tillader kun særlige anmodningen, og kun i at identificere klageren er tilladelse til at udstede anmodningen. En anden almindelig metode er at begynde at bruge de privilegier af et program, programmet derefter afledt til at opgive alle de privilegier den anden proces, den proces ved at gøre det meste af arbejdet.

Vær forsigtige med, hvordan disse moduler kommunikerer med hinanden. I mange UNIX-systemer, kommando-line værdi og miljø kan ses af andre brugere, så det er ikke i færd med at sende data mellem hemmeligheden bag en god måde. Pipeline kan være kompetent, men omhyggeligt at undgå den fastlåste situation (to ender kan opdatere en enkel anmodning / svar protokol kan være kompetente).

Minimer rettigheder, der tildeles

For at sikre at du kun behøver at give privilegier til at gøre proceduren - stop her. UNIX vigtigste måde at opnå privilegier, som de køre som en bruger eller gruppe. Typisk, at processen bruge deres løb som brugere og grupper, men "setuid" eller "setgid" vil blive have programmet bruger eller gruppe privilegier.

Desværre er der nogle ufrivillige måde at programmere "setuid root" privilegier på UNIX-systemer udviklere. Udviklerne mener, at de gør ting for sig selv at blive "nemme", fordi de ikke gå i dybden hensyn til deres procedurer er et klart behov for nogen særlige privilegier. Problemet er, da de fleste af disse programmer, der skal foretages klasse UNIX-systemer gøre næsten alt, så eventuelle fejl kan hurtigt blive en sikkerhed katastrofe.

Ikke bare fordi du skal udfylde en simpel opgave at give alle mulige privilegier. Proceduren bør kun gives de privilegier, de har brug for. Hvis du kan, setgid til at køre dem, ikke at bruge setuid - setgid privilegier mindre. Opret en specifik bruger-og gruppe (brug ikke root), og bruge dem i henhold til dine behov. For at sikre, at dem, der ejes af root eksekverbare kun root at skrive, så andre ikke kan ændre dem. Filrettigheder sæt meget strenge - hvis ikke det er absolut nødvendigt, lad ikke alle kan læse eller skrive filer, og anvende disse specifikke brugere og grupper. Kan forklare alle disse spil kan være et eksempel på "top ti" vurdering af standard praksis. Mange procedurer er "setgid spil", kun at lave spillet programmet kan modificeres "top ti" score, og snesevis af dokumenter gemt i master-koncernen er spil (og kun denne gruppe kan skrive). Selv om angriberen angreb og trådte et spil program, alt, hvad han kunne gøre ville være at ændre den vurdering af dokumenter. Under alle omstændigheder stadig spiludviklere nødt til at skrive deres programmer for at forhindre hærværk score fil.

chroot () system opkald er et nyttigt værktøj - der er desværre nogle vanskelige at bruge. Når processen vist filsystem "root", vil dette system kalde ændre processen for at se indholdet. Hvis du planlægger at bruge den - og det kan være nyttigt - at være parat til at tage lidt tid at gøre god brug af det. Skal være omhyggeligt forberedt "ny rod", som er kompliceret, fordi den nøjagtige anvendelse afhænger af platform og anvendelse egenskaber. Du skal være root, der skal chroot () kalder, og du bør hurtigst muligt ændre status for ikke-root (root brugere fra chroot miljø, så hvis det skal træde i kraft, skal du løfte det privilegium). Og chroot vil ikke ændre netadgang. Dette kan være et nyttigt system kræver, alle tider nødt til at overveje det, men bestræbelserne på at gøre godt forberedt.

Begrænsede ressourcer er en ofte glemt værktøj, som omfatter både processen med storage-ressourcer, herunder ressourcer. Disse restriktioner denial of service angreb er særlig nyttige:

Storage for, kan du indstille for hver bruger eller gruppe for hver monteret filsystem eller filnummer lagerplads (limit). I GNU / Linux-systemet, se kvote (1), quotactl (2) og quotaon (8) til dybdegående forståelse af denne funktion, men hvor selv om de ikke er i stand til at bruge de fleste af kredsen af UNIX-systemer omfatter kvoteordningen. I GNU / Linux og mange andre systemer, kan du indstille "hårde" grænser (aldrig overstige) og "bløde" grænser (som kan være midlertidigt overskud).

Processen er, kan du indstille mange grænser, såsom antallet af åbne filer, antallet af processer og så videre. Denne funktion er faktisk en del af standarden (såsom en enkelt UNIX Specification (Single UNIX Specification)), alle dem i klassen UNIX-systemer næsten allestedsnærværende, at forstå, se getrlimit (2), setrlimit (2) og getrusage ( 2), sysconf (3) og ulimit (1). Processen kan aldrig overstige den "nuværende linje", men de kan begrænse hele vejen at stige til det nuværende "cap". Desværre er der en anomali sigt problemer kan gøre dig forvirre. "Nuværende line" er også kendt som "bløde" grænser, begrænse, også kendt som "hårde" grænser. På denne måde vil du være i en usædvanlig situation, kan processen aldrig overstige grænserne for processen med blød (nuværende) grænser - og du kan overstige de bløde kvote er. Jeg foreslår at begrænse processen med at benytte udtrykket "den nuværende line" og "cap" (aldrig bruge ordet "bløde" og "hårde"), så ville der ikke være forvirret.

Minimere den tid privilegium

Men kun når det er nødvendigt at give privilegier - ikke giver et øjeblik.

Når det er muligt, skal du bruge ligegyldigt hvad dine umiddelbare behov, privilegier, og derefter give dem permanent. Når de har været lukket permanent, så hackeren kan ikke på anden måde gøre brug af disse privilegier. For eksempel, at behovet for individuelle root privilegier root, kan proceduren start (for eksempel gennem en setuid root) og derefter skifte til de mindre privilegerede brugeren til at køre. Dette er antallet af Internet-servere (herunder Apache webserver) de anvendte metoder. Klasse UNIX-systemer ikke tillader noget program til at åbne 0 到 1024 TCP / IP-port, du skal have root privilegier. Men de fleste servere kun behøver at åbne porte boot tid, efter at det privilegium ikke længere var brug for. En måde er at køre som root, så hurtigt som muligt at åbne privilegeret nødvendige porte, og derefter permanent fjerne root-privilegier (herunder processen tilhører en privilegeret gruppe). Vil forsøge at fjerne alle andre arvelige privilegier, for eksempel lukke så hurtigt som muligt har brug for særlig privilegier til at åbne filen.

Hvis du ikke kan permanent opgive privilegier, så kan du i hvert fald midlertidig fjernelse af privilegier så ofte som muligt. Det er bedre end permanent at fjerne de privilegier, for hvis en hacker kan styre dit program, kan angriberen genaktivere det privilegium og bruge det. Alligevel er det værd at gøre.

Mange angreb, når de har det privilegium at snyde procedure til at gøre nogle ting uden for programmet og programmets privilegier har mulighed for at lykkes (for eksempel ved at skabe en symbolsk link anomali og hårde links). Hvis programmet normalt ikke giver sine privilegier, så angriberen gerne vil drage fordel af dette program vil blive mere vanskeligt.

Relativt nye mekanisme

Hidtil har vi diskuteret principper faktisk gælder for næsten alle operativsystemer, og da det 19. århundrede, 70'erne, næsten alle i klassen af UNIX-systemer er de samme som konventionelle mekanismer. Det betyder ikke, at de er ubrugelige, enkle og testen af tid er deres egen fordel. Imidlertid har nogle relativt ny klasse af UNIX-systemer øget myndighed i mekanismer til at støtte mindst fortjener at vide. Selv om det er nemt at finde tid-testet mekanisme, men på den relativt nye ordning for oplysninger endnu ikke kendt. Så her vil jeg diskutere nogle værdifulde valgte mekanisme: FreeBSD fængsel (), Linux Security Module (LSM) rammer og Security-Enhanced Linux (SELinux).

FreeBSD fængsel ()

chroot () systemkald har en masse problemer, som nævnt ovenfor. For eksempel er det vanskeligt at korrekt brug, kan root brugeren stadig lære af, men det lægger ikke eksportkontrol netadgang. FreeBSD udviklerne besluttet at tilføje et nyt system kald til at løse disse problemer, så ring til nyt system kaldet fængsel (). Denne indkaldelse ligner chroot (), men prøv at bruge lettere og mere effektivt at bruge. I et fængsel, er alle de hits (selv root's) begrænsede fængsel, og fængsel i processen kan kun kommunikere med andre processer, og systemet blokeret root brugeren forsøger at fængsel vejen fra den typiske. fængsel vil blive tildelt en bestemt IP-adresse, kan ikke bruge enhver anden adresse som sin egen adresse.

fængsel () kalder er unik for FreeBSD, hvilket begrænser dets anvendelighed. Men alle OSS / FS har en masse crossover mellem virkningen af kernen (krydsbestøvning). For eksempel har ved hjælp af Linux sikkerhed ramme blevet udviklet til Linux version af et fængsel. Desuden har FreeBSD 5 tilføjet en fleksibel MAC frame (fra TrustedBSD projektet), herunder de grundlæggende funktioner i et modul svarende til SELinux. Alle, der i fremtiden se mere af denne situation skal du ikke blive overrasket.

Linux Security Module (LSM)

I 2001-Linux Kernel-topmødet om, har Linus Torvalds et problem. En række af forskellige sikkerhedselementer projekter, herunder Sikkerhedsrådets-Enhanced Linux (SELinux) projekt, beder ham om at tilføje deres sikkerhed metoder til Linux-kernen. Problemet er, at disse forskellige metoder er ofte uforenelige. Torvalds er ingen enkel måde at fastslå, hvilket der er bedst, så han spurgte disse projekter sammen for at skabe en fælles Linux sikkerhed ramme. Så kan administratoren give dem en særlig installation metode de ønsker sikkerhed. Efter flere drøftelser med Torvalds, Crispin Cowan oprettet en gruppe for at oprette den fælles sikkerheds-ramme. Denne ramme er opkaldt Linux Security Module (LSM) rammer, er det nu en del af standarden Linux kernen (f.eks 2,6 version af kernen).

Begrebsmæssigt LSM ramme er særligt simpelt. Linux-kernen er stadig gør sit rutinemæssig sikkerhedsinspektion, f.eks hvis du skriver en fil, du stadig nødt til at have skrive adgang til.

Men når det er nødvendigt, hvis Linux-kernen skal give adgang til at bestemme om det skal kontrolleres - af en "bog" til at kræve et sikkerhedsmodul at foretage - at afgøre, om mulighed for at intervenere. På denne måde kan administratorer skal du blot vælge at han ønsker at bruge sikkerhedsmodul, og det samme som andre Linux kernel modul indsætte. Siden da, vil sikkerhedsmodulet afgøre, hvad der er tilladt.

LSM ramme designet til at være så fleksibel, at den kan nå mange forskellige typer af sikkerhedspolitikker. Faktisk er en række forskellige projekter sammen sikre, at tilstrækkelig kompetente LSM rammerne af det virkelige arbejde. For f.eks. Når de interne objektet er skabt eller slettes, når LSM i en række opkald - ikke fordi disse operationer kan suspenderes, men at sikkerhedsmodulet kan holde styr på vigtige data Ved hjælp af en række forskellige analytiske værktøjer til at sikre, at LSM rammer ikke går glip af vigtige deformiteter i deres mål filial. Resultaterne viser, at projektet, end mange mennesker tror hårdere, og dens succes er hårdt vundet.

LSM er nødvendigt for at forstå de grundlæggende design beslutninger. Dybest set var skummetmaelk ramme beregnet for næsten alle brancher er begrænsede undtagelser, ikke pålidelige (autoritativ). Branch at lave en troværdig unormal absolut endelige beslutning: Hvis det er undtagelsen, den gren, at begæringen skulle være tilladt, vil det være ubetinget tilladt. Tværtimod kan kun øge troværdigheden af de abnorme gren af andre restriktioner, og det kan ikke give nye rettigheder. Teoretisk set, hvis alle afdelinger er troværdig unormal LSM, LSM ramme vil være mere fleksibel. Et kaldet stand () undtagelse filial er tillid - men kun fordi det var for at støtte POSIX regulære kapacitet. Men kan det brev gøre alle unormale grene, er det nødvendigt at Linux-kernen, mange grundlæggende ændringer, siger ændringen er ikke tilladt at blive accepteret.

Mange mennesker frygter, at hvis de fleste af de abnorme gren kan tro, selv den mindste fejl bliver en katastrofe, og lad undtagelse filialen er begrænsede midler, at brugerne vil ikke blive overrasket (Under alle omstændigheder stadig oprindelige UNIX tilladelser fungerer) . LSM rammer, så udviklere, der ønsker at begrænse den metode, og de fleste af sine udviklere tillid de kan arbejde inden for rammerne.

LSM ramme for forståelsen andre restriktioner er også vigtig. LSM ramme er designet til at understøtte adgangskontrol, revision og andre sikkerhedsspørgsmål er ikke. LSM modul selv ikke registrerer alle anmodninger eller deres resultater, fordi de ikke kan se alle. Hvorfor? En af grundene er, at kernen ikke kan kalde LSM modul afslog anmodningen Hvis du ønsker at revidere dette afslag vil være et problem. Også på grund af driftsmæssige årsager, er nogle af de foreslåede filial for nettet misdannelser og LSM datafelt ikke anvendes af hovedlinjen kerne. Det kan kontrollere en række netadgang, men ikke nok til at støtte "mærket" netværk data stream (i dette tilfælde forskellige datapakker har forskellige sikkerheds labels håndteres af operativsystemet). Disse restriktioner er upassende, i strid med de grundlæggende principper for generelle idéer LSM rammer er blevet udvidet en dag håber at slippe af med disse restriktioner.

Selv med disse begrænsninger, LSM rammer for begrænsning af privilegier for at føje det er stadig meget nyttig. Torvalds grundlæggende mål for LSM rammerne gennemføres: "Jeg kan ikke lide kampen mellem forskellige sikkerhedsgrupper. Jeg håber, at det indirekte, lad mig ud af denne kamp, så markedet kan kæmpe for at beslutte, hvilken strategi og anvendes for at nå det ultimative . "

Så hvis du vil begrænse Linux tildelt privilegium dit program, kan du oprette helt dine egne sikkerhedsmodulet. Hvis du bruger en reel udefrakommende problemer, kan have behov for at gøre det - heldigvis dette er muligt. Men det er meget vigtigt; alligevel, du stadig nødt til at skrive kerne kode. Hvis det er muligt, du bedst ikke at anvende den eksisterende Linux sikkerhedsmodul, men prøv at skrive din egen sikkerhed modul. Nogle rådighed LSM-modul, men Security-Enhanced Linux (SELinux) er den mest modne en Linux sikkerhedsmodul, så lad os undersøge dette modul.

Security-Enhanced Linux (SELinux) historie

En lille historie vil bidrage til at hjælpe dig med at forstå Security-Enhanced Linux (SELinux) - og det i sig selv er en sjov historie. U. S. National Security Agency (National Security Agency, NSA) længe har været bekymret over sikkerheden i de fleste operativsystemer, begrænset kapacitet. Det er trods alt en af dem at sikre, at U. S. Department of Defense at bruge computeren i lyset af endeløse angreb for at opretholde sikkerheden. NSA fandt, at de fleste af operativsystemets sikkerhed mekanismer, herunder Windows og de fleste UNIX-og Linux-systemer, der kun opnået en "selektiv adgangskontrol (skønsmæssige adgangskontrol)" (DAC) mekanisme. DAC-systemet er at køre programmet under brugerens identitet og dokumenter for at fastslå ejeren af objektet program kan gøre. NSA mener, at dette er et alvorligt problem, fordi DAC selv sårbare eller ondsindet program er en fiasko for beskyttelse. I stedet har NSA længe været håbet, at operativsystemet kan også understøtte "ufravigelige adgangskontrol (obligatorisk adgangskontrol)" (MAC) mekanisme.

MAC mekanisme gør det muligt for systemadministratoren kan definere systemets sikkerhedspolitik, kan denne strategi være baseret på andre faktorer, såsom brugerens rolle, program troværdighed og forventes at blive anvendt, til at programmere data skal anvendes i type osv. for at begrænse programmet kan Hvad gør man ting. Et lille eksempel med MAC, efter at brugeren kan ikke umiddelbart "hemmelige (Secret)" data i "ikke-fortrolige (Uklassificeret)" data. Men kan MAC faktisk gøre meget mere end det.

NSA har været med operativsystemet leverandører i mange år, men mange af de største markedsandel udbyder af integration for MAC er ikke interesseret i at komme. Selv de udbydere, der integrerer MAC normalt også bruges som "separate produkter", snarere end konventionelle produkter. Dels fordi de gamle MAC er ikke fleksible nok.

Så NSA af magt forsøge at gøre MAC og mere fleksibel og lettere at indgå i operativsystemet. De bruger det Mach styresystem udviklet prototyper af deres ideer, og senere udvidet det igangsatte arbejde med "Fluke" af operativsystemet.

Men det er svært at overbevise folk om, at disse ideer kan anvendes på "rigtige" operativsystem, fordi alle disse er baseret på små "legetøjs-class" forskningsprojekt. Meget få udenfor prototype kan forsøge at se disse ideer i en reel anvendelse af, hvordan man arbejder. NSA kan ikke overbevise en leverandør af titel for at tilføje disse idéer, og NSA ikke havde ret til at ændre den proprietære operativsystem. Det er ikke et nyt problem; år siden, forsøgte DARPA at tvinge sin proprietære operativsystem, forskere brugte styresystem Windows, men stødt på mange problemer (se referencer nedenfor).

Så NSA kom over en tanke i bakspejlet synes indlysende: at bruge et stykke legetøj er ikke open-source operativsystem, og gennemføre deres sikkerhed ideer at vise, at (1) kan arbejde, (2) det er specifikt for det arbejde (gennem for alle kildekode). De valgte dominerende, open source kerne (Linux), og hvor realiseringen af deres idé, at "forbedret sikkerhed Linux" (SELinux). Ikke overraskende, så brug den virkelige system (Linux) for NSA forskerne kan behandle dem i legetøjet ikke kan håndtere. For eksempel, i de fleste Linux-baserede systemer, næsten alle dynamisk forbundet, så de havde at lave noget research om how til at udføre in-dybtgående analyse procedure (access dem om "entrypoint" og "execute" tilladelser til dokumentet for mere oplysninger). Dette er en langt mere vellykket måde; mennesker, der bruger SELinux prototype tidligere end dem, der bruger en masse mere.

SELinux at arbejde

Så for at SELinux arbejde for? SELinux metode faktisk er meget almindeligt. En vigtig kerne i hvert objekt, som hver fil system objekt, og hver proces har en sammenhæng til deres "sikkerhedsmæssige baggrund (sikkerhed kontekst)". Sikkerhed sammenhæng kan være baseret på den militære sikkerhed niveau (hvis de ikke er fortrolige, fortroligt og meget fortrolige), baseret på brugerroller, anvendelsen-baseret (ja, en web-server kan have sin egen sikkerhed sammenhæng), eller på mange andre elementer. Når den kører et andet program, kan processen ændre sikkerhedsindstillingerne sammenhæng. Selv, afhængig af proceduren kalde det, et bestemt program kan køre i forskellige sikkerhedsmæssige omstændigheder, selv hvis en bruger starter med alle procedurer.

Så Systemadministratoren kan angive, hvilke rettigheder, der tildeles for at skabe en sikkerhedssituation, som "sikkerhedspolitik (sikkerhedspolitik)". Når systemet opkaldet sker, når SELinux at kontrollere, om alle de påkrævede privilegier er tildelt - og hvis ikke, det afslog anmodningen.

For eksempel vil oprette en fil, sikkerheden forbindelse med den igangværende proces mod rodbiblioteket sikkerhed sammenhæng på "Søg (søgning)" og "add_name" privilegium, og det skal til (at skabe) filer i sikkerhed rammerne af "Opret ( skabe) "privilegium. Ligeledes skal sikkerheden rammerne af denne fil med filsystemet har det privilegium "vedrører (associeret)" (Så, for eksempel, "strengt fortrolige" dokumenter kan ikke skrive en "ingen tillid" i disk). Også for stikkontakter, netværksenheder, vært og port i netværket adgangskontrol. Hvis sikkerhedspolitik for dem, der alle udstedte tilladelser, så anmodningen vil blive tilladt i SELinux. Ellers vil de blive forbudt. Hvis du gør det trin for trin alle disse kontroller vil blive langsommere, men der er mange optimering program (baseret på mange års forskning) skal gøre det meget hurtigt.

Undersøgelsen var uafhængig af klassen system på den sædvanlige UNIX permissions bits; i SELinux system, skal du skrive både standard UNIX tilladelser, at der SELinux tilladelse gøre noget. Men kan SELinux checks gøre en masse af de traditionelle UNIX tilladelser til klassen er vanskeligt at opnå.

Brug SELinux kan du nemt oprette et særligt program kan kun køre, og kun i forbindelse med en særlig web-server til at skrive filer. Endnu mere interessant er, at hvis en hacker scoret en web-server og bliver roden, vil en hacker ikke gives kontrol med hele systemet - hvis der er en god sikkerhedspolitik, da.

Det har været vanskeligt: For SELinux effektivt, skal du have en god grund bag SELinux sikkerhedspolitik gennemførelse. De fleste brugere vil have en praktisk nem at ændre deres oprindelige strategi. For nogle år siden begyndte jeg at opleve SELinux, at tid, den oprindelige strategi er endnu ikke moden, der er mange problemer. For eksempel, før i disse dage har jeg fundet den tidlige prøven politik ikke tillader systemet opdatere hardware ur (den sidste jeg sendte en patch til at løse dette problem). God første sikkerhedspolitik design, der ligner den produktkategori, NSA håber at gøre af erhvervslivet, og se at gøre det. Red Hat, en række Debian-udviklere, er Gentoo og andre, der bruger den grundlæggende SELinux rammer, og de oprindelige sikkerhedspolitik er blevet skabt, således at brugerne umiddelbart kan begynde at bruge det. Faktisk Red Hat planlægger at alle brugere i deres drift i både Fedora Core SELinux, og giver enkle værktøjer til at sætte ikke-professionelle bruger kan vælge nogle af de fælles muligheder for at ændre deres sikkerhedspolitik. Der er en bootable Gentoo SELinux LiveCD. Minimere disse grupper vil gøre det nemmere at behandle privilegium, uden en masse kode.

Her er vi tilbage til den oprindelige position. SELinux kun ske, når programgennemførelsen kun at tillade en sikker transmission, som kontrollerer processen med kompetence (ikke en del af processen). Derfor, for fuldt ud at udnytte potentialet i SELinux, skal du nedbrydes din ansøgning proces og procedurer for uafhængig, kun nogle små privilegerede komponenter - ligesom hvordan denne situation udviklede i mangel af SELinux sikkerhedsprocedurer. Værktøjer såsom SELinux kan du bedre kontrol den tildelte tilladelser, og dermed skabe et stærkere forsvar, men du stadig nødt til at opdele dit program i mindre komponenter, med henblik på at foretage denne kontrol kan spille maksimal effektivitet.

Konklusion

Minimer sikkerhedsspørgsmål privilegium er det vigtigste forsvar. Som fejl er uundgåelige, vil du ønsker i høj grad at reducere muligheden for fejl føre til sikkerhedsmæssige problemer. Dog skal mindst ét sikkerhedsprogram være relateret til sikkerhed for visse dele af koden, så du kan ikke kun minimerer bekostning af alle andre privilegier. Selv når du er nødt til at minimere nogle af aktørerne i sikkerhed efter den del eller dem, der skal være korrekte. Til højre, skal du undgå de mest almindelige fejl.