Linux-nimiavaruudet
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]
Esimerkki
seuraava komento root-oikeuksin käynnistää komentotulkin, joka ei näe muita prosesseja:
unshare --fork --pid --mount-proc /bin/bash
Lähteet
- ↑ a b c d e f g h Mahmud Ridwan: Separation Anxiety: A Tutorial for Isolating Your System with Linux Namespaces toptal.com. Viitattu 25.11.2017.
- ↑ a b c d NAMESPACES(7) man7.org. Viitattu 14.2.2022. (englanniksi)
- ↑ Seth Kenlon: Demystifying namespaces and containers in Linux opensource.com. 29.10.2019. Viitattu 14.2.2022. (englanniksi)
- ↑ a b Steve Ovens: The 7 most used Linux namespaces redhat.com. 11.1.2021. Viitattu 14.2.2022. (englanniksi)
- ↑ a b c Rami Rosen: Resource management: Linux kernel Namespaces and cgroups (PDF) haifux.org. toukokuu 2013. Viitattu 25.11.2017.
- ↑ Kerrisk, Michael: Namespaces in operation, part 5: User namespaces 27.2.2013. LWN.net. Viitattu 25.11.2017.
- ↑ Kerrisk, Michael: Namespaces in operation, part 1: namespaces overview 4.1.2013. LWN.net. Viitattu 25.11.2017.
- ↑ Baker, Pam: Understanding and Securing Linux Namespaces 18.10.2016. Linux.com. Viitattu 25.11.2017.
- ↑ Ubuntu Manpage: Namespaces - overview manpages.ubuntu.com. Arkistoitu 1.12.2017. Viitattu 25.11.2017.
- ↑ It's Finally Time: The Time Namespace Support Has Been Added To The Linux 5.6 Kernel phoronix.com. 29.1.2020. Viitattu 2.8.2020. (englanniksi)
- ↑ The Time Namespace Appears To Finally Be On-Deck For The Mainline Linux Kernel phoronix.com. 14.1.2020. Viitattu 2.8.2020. (englanniksi)
- ↑ Jonathan Corbet: Time namespaces lwn.net. 21.9.2018. Viitattu 25.2.2020. (englanniksi)
- ↑ Oracle Solaris Zones docs.oracle.com. Viitattu 7.6.2024. (englanniksi)