Linux navneområder - Linux namespaces

navneområder
Originale forfattere Al Viro
Utvikler (er) Eric W. Biederman, Pavel Emelyanov, Al Viro, Cyrill Gorcunov et al.
Første utgivelse 2002 ; 19 år siden ( 2002 )
Skrevet inn C
Operativsystem Linux
Type Systemprogramvare
Tillatelse GPL og LGPL

Navneområder er en funksjon i Linux -kjernen som partisjonerer kjerneressurser slik at ett sett med prosesser ser ett sett med ressurser, mens et annet sett med prosesser ser et annet sett med ressurser. Funksjonen fungerer ved å ha samme navneområde for et sett med ressurser og prosesser, men disse navnerommene refererer til forskjellige ressurser. Ressurser kan eksistere i flere mellomrom. Eksempler på slike ressurser er prosess -ID -er, vertsnavn, bruker -ID -er, filnavn og noen navn knyttet til nettverkstilgang og kommunikasjon mellom prosesser .

Navneområder er et grunnleggende aspekt ved containere på Linux.

Begrepet "navneområde" brukes ofte for en type navneområde (f.eks. Prosess -ID), så vel som for et bestemt navnerom.

Et Linux -system starter med et enkelt navneområde av hver type, brukt av alle prosesser. Prosesser kan opprette flere navnerom og bli med i forskjellige navnerom.

Historie

Linux navnerom ble inspirert av den bredere navneromsfunksjonaliteten som ble brukt mye gjennom Plan 9 fra Bell Labs .

Linux -navnerommene stammer fra 2002 i kjernen 2.4.19 med arbeid på typen navneområde. Ytterligere navnerom ble lagt til fra 2006 og fortsetter inn i fremtiden.

Tilstrekkelig beholderstøttefunksjonalitet ble ferdig i kjerneversjon 3.8 med introduksjonen av brukernavnområder.

Navneområder

Siden kjerneversjon 5.6 er det 8 typer navneområder. Navneplassfunksjonaliteten er den samme for alle typer: hver prosess er knyttet til et navneområde og kan bare se eller bruke ressursene som er knyttet til det navnerommet, og etterkommende navnerom der det er aktuelt. På denne måten kan hver prosess (eller prosessgruppe derav) ha et unikt syn på ressursene. Hvilken ressurs som er isolert, avhenger av typen navneområde som er opprettet for en gitt prosessgruppe.

Monter (mnt)

Monter navnerom kontrollerer monteringspunkter. Ved opprettelsen kopieres festene fra det gjeldende navneområdet til det nye navneområdet, men monteringspunkter som er opprettet etterpå, forplanter seg ikke mellom navnerom (ved å bruke delte undertrær er det mulig å formidle festepunkter mellom navneområder).

Klonflagget som ble brukt til å opprette et nytt navneområde av denne typen, er CLONE_NEWNS - forkortelse for "NEW NameSpace". Dette begrepet er ikke beskrivende (ettersom det ikke forteller hvilken type navnerom som skal opprettes) fordi navnerom på montering var den første typen navnerom og designere ikke forutså at det skulle være andre.

Prosess -ID (pid)

Den PID navnerom fremskaffer fremgangsmåter med et uavhengig sett av prosess ID-er (PID) fra andre navnerom. PID -navnerom er nestet, noe som betyr at når en ny prosess opprettes, vil den ha en PID for hvert navneområde fra det nåværende navneområdet til det opprinnelige PID -navneområdet. Derfor er det første PID -navneområdet i stand til å se alle prosesser, om enn med andre PIDer enn andre navnerom vil se prosesser med.

Den første prosessen som opprettes i et PID -navneområde, tildeles prosess -ID -nummer 1 og mottar det meste av den samme spesialbehandlingen som den normale init -prosessen, særlig at foreldreløse prosesser i navneområdet er knyttet til den. Dette betyr også at avslutningen av denne PID 1 -prosessen umiddelbart vil avslutte alle prosesser i PID -navnerommet og eventuelle etterkommere.

Nettverk (netto)

Nettverksnavnområder virtualiserer nettverksstakken . Ved opprettelse inneholder et nettverksnavnrom bare et loopback -grensesnitt.

Hvert nettverksgrensesnitt (fysisk eller virtuelt) er tilstede i nøyaktig 1 navneområde og kan flyttes mellom navnerom.

Hvert navneområde vil ha et privat sett med IP-adresser , sitt eget rutingtabell , kontaktliste , tilkoblingssporingstabell, brannmur og andre nettverksrelaterte ressurser.

Ødeleggelse av et nettverksnavnområde ødelegger eventuelle virtuelle grensesnitt i det og flytter eventuelle fysiske grensesnitt i det tilbake til det opprinnelige nettverksnavnområdet.

Mellomprosesskommunikasjon (ipc)

IPC-navnerom isolerer prosesser fra kommunikasjon mellom prosesser i SysV- stil. Dette forhindrer prosesser i forskjellige IPC -navnerom fra å bruke for eksempel SHM -funksjonsfamilien for å etablere et område med delt minne mellom de to prosessene. I stedet vil hver prosess kunne bruke de samme identifikatorene for et delt minneområde og produsere to slike forskjellige regioner.

UTS

UTS (UNIX Time-Sharing ) navnerom tillater at et enkelt system ser ut til å ha forskjellige verts- og domenenavn for forskjellige prosesser. "Når en prosess oppretter et nytt UTS -navneområde ... blir vertsnavnet og domenet til det nye UTS -navneområdet kopiert fra de tilsvarende verdiene i den som ringer UTS -navneområde."

Bruker -ID (bruker)

Brukernavnområder er en funksjon for å gi både isolasjon av rettigheter og segregering av brukeridentifikasjon på tvers av flere sett med prosesser som er tilgjengelige siden kjerne 3.8. Med administrativ bistand er det mulig å bygge en beholder med tilsynelatende administrative rettigheter uten å faktisk gi forhøyede privilegier til brukerprosesser. I likhet med PID -navnerommet er brukernavnområder nestet, og hvert nytt brukernavnområde anses å være et underordnet brukernavnområde som opprettet det.

Et brukernavnområde inneholder en kartleggingstabell som konverterer bruker -ID -er fra beholderens synspunkt til systemets synspunkt. Dette tillater for eksempel at rotbrukeren har bruker -ID 0 i beholderen, men blir faktisk behandlet som bruker -ID 1.400.000 av systemet for eierskapskontroller. En lignende tabell brukes for gruppe -ID -tilordninger og eierskapskontroller.

For å gjøre det lettere å isolere administrative handlinger, anses hver navnetype å være eid av et brukernavnområde basert på det aktive brukernavnområdet når det opprettes. En bruker med administrative rettigheter i det riktige brukernavnområdet får lov til å utføre administrative handlinger innenfor den andre navnetypen. For eksempel, hvis en prosess har administrativ tillatelse til å endre IP -adressen til et nettverksgrensesnitt, kan den gjøre det så lenge sitt eget brukernavnområde er det samme som (eller stamfar til) brukernavnområdet som eier nettverksnavnområdet. Derfor har det første brukernavnområdet administrativ kontroll over alle navneplattyper i systemet.

Kontrollgruppe (cgroup) Navneområde

Den cgroup navnerom typen skjuler identiteten til kontrollgruppen av hvilken prosess er et medlem. En prosess i et slikt navneområde, som kontrollerer hvilken kontrollgruppe enhver prosess er en del av, vil se en bane som faktisk er i forhold til kontrollgruppen som ble satt på opprettelsestidspunktet, og som skjuler den sanne kontrollgruppens posisjon og identitet. Denne navneområdet har eksistert siden mars 2016 i Linux 4.6.

Tidsnavn

Tidsnavnområdet gjør at prosesser kan se forskjellige systemtider på en måte som ligner på UTS -navneområdet. Den ble foreslått i 2018 og landet på Linux 5.6, som ble utgitt i mars 2020.

Foreslåtte navnerom

syslog navneplass

Gjennomføringsdetaljer

Kjernen tildeler hver prosess en symbolsk lenke per navneområde /proc/<pid>/ns/. Inode -tallet som denne symlenken viser til er det samme for hver prosess i dette navnerommet. Dette identifiserer hvert navneområde unikt med inode -tallet som en av dets symlenker peker på.

Når du leser symlink via readlink, returneres en streng som inneholder navneplassens navn og inodnummeret til navneområdet.

Syscalls

Tre syscalls kan direkte manipulere navnerom:

  • klon, flagg for å angi hvilket nytt navneområde den nye prosessen skal migreres til.
  • unshare, lar en prosess (eller tråd) koble deler av kjøringskonteksten som nå deles med andre prosesser (eller tråder)
  • setns, angir navneområdet som er angitt av en filbeskrivelse.

Ødeleggelse

Hvis det ikke lenger er referert til et navneområde, blir det slettet, håndteringen av den inneholdte ressursen avhenger av navneområdet. Navneplasser kan refereres til på tre måter:

  1. ved en prosess som tilhører navneområdet
  2. av en åpen filskriptor til navneplassens fil ( /proc/<pid>/ns/<ns-kind>)
  3. en bindemontasje av navneplassens fil ( /proc/<pid>/ns/<ns-kind>)

Adopsjon

Ulike containerprogramvare bruker Linux navnerom i kombinasjon med cgroups for å isolere prosessene sine, inkludert Docker og LXC .

Andre applikasjoner, for eksempel Google Chrome, bruker navneområder for å isolere sine egne prosesser som er utsatt for angrep på internett.

Det er også en unshare-innpakning i util-linux . Et eksempel på bruken er:

SHELL=/bin/sh unshare --map-root-user --fork --pid chroot "${chrootdir}" "$@"

Referanser

Eksterne linker