Linux-nimiavaruudet (engl. Linux namespaces, user namespaces) on Linux-ytimen ominaisuus, jolla voidaan jakaa samalla tietokoneella olevat resurssit toisilleen näkymättömiin alueisiin eli nimiavaruuksiin.[1] Globaalit järjestelmän resurssit voidaan abstraktoida siten, että prosesseille näkyy omat erilliset instanssit globaaleista resursseista.[2] Samaan nimiavaruuteen kuuluvat prosessit näkevät resurssit samoin kun taas eri nimiavaruuteen kuuluvat eivät.[2]
Menetelmä vastaa periaatteeltaan Unixin chroot
-komennon laajentamista muihin käyttöjärjestelmän hallinnoimiin resursseihin niiden eriyttämiseen.[1] Ominaisuutta käytetään säiliöinnissä jotta eri nimiavaruuksiin sijoitetut sovellukset eivät vaikuta toistensa toimintaan.[1]
Esimerkiksi mitä vain hakemistoa voidaan käyttää juurihakemistona varsinaisen juuren sijaan muuttamatta itse ohjelman toimintaa.[1] Samalla periaatteella prosessit voidaan jakaa osiin, jolloin yhteen osioon kuuluva ei näe eikä voi muokata muiden osioiden prosesseja: kahdessa eri prosessiavaruudessa voi olla samanaikaisesti eri prosessi samalla tunnistenumerolla.[1] Myös muun muassa verkkoliitännät ja muun tyyppiset resurssit voidaan osioida.[1][2][3] Eräät ohjelmat eivät salli useampaa instanssia ohjelmasta, esimerkiksi tiettyä verkkoporttia voi normaalisti kuunnella vain yksi ohjelma kerrallaan.[4] Jakamalla verkkoyhteydet eri nimiavaruuksiin voi eri nimiavaruuksissa olla kaikki portit käytettävissä ja siten ajaa useampaa instanssia ohjelmasta.[4]
Ominaisuuden ensimmäinen toteutus koski mount-nimiavaruutta, joka otettiin mukaan ytimen versiossa 2.4.19 vuonna 2002.[5] Nimiavaruudella eriyttäminen ei tarvitse hypervisor-virtualisointia.[5] Virtualisoinnissa laitteistoa emuloidaan ja sen päällä ajetaan toista käyttöjärjestelmäydintä.[1] Nimiavaruuksien avulla säiliöinnissä ei käytetä laitteistoemulaatiota eikä toista ydintä.[1]
Ominaisuutta on myöhemmin laajennettu käyttäjien nimiavaruuksiin ytimen versiossa 3.8.[6][7]
Omiin nimiavaruuksien osioitavia tyyppejä ovat:[8][9][2]
Tyyppi | Selite |
---|---|
mount | levyjen, osioiden ja taltioiden liitokset |
UTS | verkkonimet (koneen nimi, domain-nimi) |
IPC | prosessien välinen kommunikaatio |
Network | verkkolaitteet, pinot, portit |
PID | prosessitunnukset |
User | käyttäjä- ja ryhmätunnukset |
Cgroups | Cgroups |
time | kellonajat[10][11] |
Myös kellonaikojen hallintaan on kehitetty tukea säiliöiden siirtämiseen eri fyysisten tietokoneiden välillä.[12]
Menetelmään on saatu vaikutteita Plan 9 -käyttöjärjestelmän vastaavasta ratkaisusta.[5] Solaris-käyttöjärjestelmässä on vastaava toiminnallisuus nimeltä Zones.[13]