unshare(2) System Calls Manual unshare(2) NAVN unshare - adskille dele af procesudforelseskonteksten BIBLIOTEK Standard C library (libc, -lc) SYNOPSIS #define _GNU_SOURCE #include int unshare(int flag); BESKRIVELSE unshare() tillader at en proces (eller trad) adskiller dele af dens afviklingskontekst, der aktuelt deles med andre processer (eller trade). Dele af afviklingskonteksten, sasom monteringsnavnerummet, er delt implicit nar en ny proces oprettes via fork(2) eller vfork(2), mens andre dele, sasom virtuel hukommelse, kan deles ved eksplicit anmodning, nar en proces eller trad oprettes via clone(2). Hovedbrugen af unshare() er at tillade en proces at kontrollere sin delte afviklingskontekst uden at oprette en ny proces. Argumentet flag er en bit-maske, der angiver hvilke dele af afviklingskonteksten, der ikke skal deles. Dette argument er angivet af ORing together zero eller flere af de folgende konstanter: CLONE_FILES Vend effekten om for clone(2) CLONE_FILES-flaget. Fjern deling for fildeskriptortabellen, sa at den kaldende proces ikke laengere deler sine fildeskriptorer med enhver anden proces. CLONE_FS Vend effekten om for clone(2) CLONE_FS-flaget. Fjern deling for filsystemattributter, sa at den kaldende proces ikke laengere deler sin rodmappe (chroot(2)), nuvaerende mappe (chdir(2)), eller umask-attributter (umask(2)) med enhver anden proces. CLONE_NEWCGROUP (siden Linux 4.6) Dette flag har den samme effekt som clone(2) CLONE_NEWCGROUP-flaget. Fjern deling for cgroup-navnerummet. Brug af CLONE_NEWCGROUP kraever funktionaliteten CAP_SYS_ADMIN. CLONE_NEWIPC (siden Linux 2.6.19) Dette flag har den samme effekt som clone(2) CLONE_NEWIPC-flaget. Fjern deling af IPC-navnerummet, sa at den kaldende proces har en privat kopi af IPC-navnerummet, der ikke er delt med nogen anden proces. Angivelse af dette flag forudsaetter automatisk ogsa CLONE_SYSVSEM. Brug af CLONE_NEWIPC kraever funktionaliteten CAP_SYS_ADMIN. CLONE_NEWNET (siden Linux 2.6.24) Dette flag har den samme effekt som clone(2) CLONE_NEWNET-flaget. Fjern deling for netvaerksnavnerummet, sa den kaldende proces flyttes til et nyt netvaerksnavnerum, der ikke er delg med en eventuel tidligere proces. Brug af CLONE_NEWNET kraever funktionaliteten CAP_SYS_ADMIN. CLONE_NEWNS Dette flag har den samme effekt som clone(2) CLONE_NEWNS-flaget. Fjern deling for monteringsnavnerummet, sa den kaldende proces har en privat kopi af sit navnerum, der ikke deles med nogen anden proces. Angivelse af dette flag fortudsaetter automatisk ogsa CLONE_FS. Brug af CLONE_NEWNS kraever funktionaliteten CAP_SYS_ADMIN. For yderligere information se mount_namespaces(7). CLONE_NEWPID (siden Linux 3.8) Dette flag har den samme effekt som clone(2) CLONE_NEWPID-flaget. Fjern deling for PID-navnerummet, sa at den kaldende proces har et nyt PID-navnerum for sine underprocesser, der ikke deles med en eventuel tidligere proces. Den kaldende proces bliver ikke flyttet ind i det nye navnerum. Den forste underproces oprettet af den kaldende proces vil have proces-id nr 1 og vil antage rollen af init(1) i det nye navnerum. CLONE_NEWPID forudsaetter automatisk ogsa CLONE_THREAD. Brug af CLONE_NEWPID kraever funktionaliteten CAP_SYS_ADMIN. For yderligere information, se pid_namespaces(7). CLONE_NEWTIME (siden Linux 5.6) Fjern deling for tidsnavnerummet, sa at den kaldende proces har et nyt tidsnavnerum for sine underprocesser, der ikke deles med en eventuel tidligere proces. Den kaldende proces flyttes ikke ind i det nye navnerum. Brug af CLONE_NEWTIME kraever funktionaliteten CAP_SYS_ADMIN. For yderligere information, se time_namespaces(7). CLONE_NEWUSER (siden Linux 3.8) Dette flag har den samme effekt som clone(2) CLONE_NEWUSER-flaget. Fjern deling for brugernavnerummet, sa at den kaldende proces flyttes ind i et nyt brugernavnerum, der ikke deles med en eventuel tidligere proces. Som med underprocessen oprettet af clone(2) med CLONE_NEWUSER-flaget far kalderen et fuldt saet af funktionaliteter i det nye navnerum. CLONE_NEWUSER kraever at den kaldende proces ikke er tradet; angivelse af CLONE_NEWUSER forudsaetter automatisk CLONE_THREAD. Da Linux 3.9, CLONE_NEWUSER ogsa automatisk forudsaetter CLONE_FS. CLONE_NEWUSER kraever at bruger-id'et og gruppe-id'et for den kaldende proces oversaettes til bruger-id'erne og gruppe-id'erne i brugerens navnerum for den kaldende proces pa tidspunktet for kaldet. For yderligere information om brugernavnerum, se user_namespaces(7). CLONE_NEWUTS (siden Linux 2.6.19) Dette flag har den samme effekt som clone(2) CLONE_NEWUTS-flaget. Fjern deling af UTS IPC-navnerummet, sa at den kaldende proces har en privat kopi af UTS-navnerummet, der ikke deles med nogen anden proces. Brug af CLONE_NEWUTS kraever funktionaliteten CAP_SYS_ADMIN. CLONE_SYSVSEM (siden Linux 2.6.26) Dette flag vender effekten af clone(2) CLONE_SYSVSEM-flaget om. Fjern deling for System V sempahore-justeringsvaerdier (semadj), sa at den kaldende proces har en ny tom semadj-liste, der ikke deles med nogen anden proces. Hvis dette er den sidste proces, der har en refernece til processens nuvaerende semadj-liste, sa anvendes justeringerne i den liste til de tilsvarende semaforer, som beskrevet i semop(2). Derudover kan CLONE_THREAD, CLONE_SIGHAND og CLONE_VM angives i flag hvis kalderen er en enkelt trad (dvs. deler ikke sit adresserum med en anden proces eller trad). I dette tilfaelde har disse flag ingen effekt. (Bemaerk ogsa at angivelse af CLONE_THREAD automatisk forudsaetter CLONE_VM, og angivelse af CLONE_VM automatisk forudsaetter CLONE_SIGHAND). Hvis processen har flere trade sa medforer brug af disse flag en fejl. Hvis flag er angivet som nul, sa er unshare() en no-op; ingen aendringer laves til den kaldende proces afviklingskontekst. RETURVAERDI Ved succes returneres nul. Ved fejl returneres -1 og errno er angivet for at indikere fejlen. FEJL EINVAL En ugyldig bit var angivet i flag. EINVAL CLONE_THREAD, CLONE_SIGHAND eller CLONE_VM var angivet i flag, og kalderen er flertradet. EINVAL CLONE_NEWIPC var angivet i flag, men kernen var ikke konfigureret med tilvalgene CONFIG_SYSVIPC og CONFIG_IPC_NS. EINVAL CLONE_NEWNET var angivet i flag, men kernen var ikke konfigureret med tilvalget CONFIG_NET_NS. EINVAL CLONE_NEWPID var angivet i flag, men kernen var ikke konfigureret med tilvalget CONFIG_PID_NS. EINVAL CLONE_NEWUSER var angivet i flag, men kernen var ikke konfigureret med tilvalget CONFIG_USER_NS. EINVAL CLONE_NEWUTS var angivet i flag, men kernen var ikke konfigureret med tilvalget CONFIG_UTS_NS. EINVAL CLONE_NEWPID var angivet i flag, men processen har tidligere kaldt unshare() med flaget CLONE_NEWPID. ENOMEM Kan ikke allokere tilstraekkelig hukommelse til at kopiere dele af kalderens kontekst, der ikke laengere skal deles. ENOSPC (siden Linux 3.7) CLONE_NEWPID var angivet i flag, men begraensningen pa indlejringsdybden for PID-navnerum ville vaere overskredet; se pid_namespaces(7). ENOSPC (siden Linux 4.9; tidligere EUSERS) CLONE_NEWUSER var angivet i flag, og kaldet ville medfore at begraensningen pa antallet af indlejrede brugernavnerum ville blive overskredt. Se user_namespaces(7). Fra Linux 3.11 til Linux 4.8, var fejlen diagnosticeret i dette tilfaelde EUSERS. ENOSPC (siden Linux 4.9) En af vaerdierne i flag angav oprettelsen af et nyt brugernavnerum, men dette ville have medfort at begraensningen defineret af den tilsvarende fil i /proc/sys/user ville blive overskredet. For yderligere information, se namespaces(7). EPERM Den kaldende proces havde ikke de kraevede privilegier for denne operation. EPERM CLONE_NEWUSER var angivet i flag, men enten har det effektive bruger-id eller det effektive gruppe-id for kalderen ikke en oversaettelse i overnavnerummet (se user_namespaces(7)). EPERM (siden Linux 3.9) CLONE_NEWUSER var angivet i flag og kalderen er i et chroot-miljo (dvs. kalderens rodmappe matcher ikke rodmappen for monteringsnavnerummet hvor det befinder sig). EUSERS (fra Linux 3.11 til Linux 4.8) CLONE_NEWUSER var angivet i flag, og begraensningen pa antallet af indlejrede brugernavnerum er for hojt. Se diskussionen for ENOSPC-fejlen ovenfor. STANDARDER Linux. HISTORIK Linux 2.6.16. NOTER Ikke alle af processens attributter, der kan deles nar en ny proces oprettes via clone(2), kan fa fjernet deling via unshare(). Specielt fra og med kernen 3.8 implementerer unshare() ikke flag, der vender effekten af CLONE_SIGHAND, CLONE_THREAD eller CLONE_VM om. Sadan funktionalitet kan blive tilfojet i fremtiden, hvis kraevet. Oprettelse af alle slags navnerume, undtagen brugernavnerum, kraever funktionaliteten CAP_SYS_ADMIN. Da oprettelsen af et brugernavnerum automatisk giver et fuld saet af funktionalitet, kraever oprettelse af bade et brugernavnerum og andre typer af navnerum i det samme unshare()-kald ikke CAP_SYS_ADMIN-funktionalitet i det oprindelige navnerum. EKSEMPLER Programmet nedenfor tilbyder en simpel implementering af kommandoen unshare(1), der fjerner deling for et eller flere navnerum og afvikler kommandoen angivet i sine kommandolinjeargumenter. Her er et eksempel pa brug af dette program, der afvikles i en skal i et nyt monteringsnavnerum, og verificerer at den oprindelige skal og den nye skal er i separate monteringsnavnerum: $ readlink /proc/$$/ns/mnt; mnt:[4026531840] $ sudo ./unshare -m /bin/bash; # readlink /proc/$$/ns/mnt; mnt:[4026532325] De forskellige resultater for de to readlink(1)-kommandoer viser, at de to skaller er i forskellige monteringsnavnerum. Programkilde /* unshare.c En simpel implementering af kommandoen unshare(1): unshare navnerum og afvikl en kommando. */ #define _GNU_SOURCE #include #include #include #include #include static void usage(char *pname) { fprintf(stderr, "Brug: %s [tilvalg] program [arg...]\n", pnavn); fprintf(stderr, "Tilvalg kan vaere:\n"); fprintf(stderr, " -C unshare cgroup-navnerum\n"); fprintf(stderr, " -i unshare IPC-navnerum\n"); fprintf(stderr, " -m unshare mount-navnerum\n"); fprintf(stderr, " -n unshare network-navnerum\n"); fprintf(stderr, " -p unshare PID-navnerum\n"); fprintf(stderr, " -t unshare time-navnerum\n"); fprintf(stderr, " -u unshare UTS-navnerum\n"); fprintf(stderr, " -U unshare user-navnerum\n"); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { int flags, opt; flags = 0; while ((opt = getopt(argc, argv, "CimnptuU")) != -1) { switch (opt) { case 'C': flags |= CLONE_NEWCGROUP; break; case 'i': flags |= CLONE_NEWIPC; break; case 'm': flags |= CLONE_NEWNS; break; case 'n': flags |= CLONE_NEWNET; break; case 'p': flags |= CLONE_NEWPID; break; case 't': flags |= CLONE_NEWTIME; break; case 'u': flags |= CLONE_NEWUTS; break; case 'U': flags |= CLONE_NEWUSER; break; default: usage(argv[0]); } } if (optind >= argc) usage(argv[0]); if (unshare(flags) == -1) err(EXIT_FAILURE, "unshare"); execvp(argv[optind], &argv[optind]); err(EXIT_FAILURE, "execvp"); } SE OGSA unshare(1), clone(2), fork(2), kcmp(2), setns(2), vfork(2), namespaces(7) Documentation/userspace-api/unshare.rst i Linuxkernens kildetrae OVERSAETTELSE Oversaettere af denne manual til dansk Joe Hansen Denne oversaettelse er gratis dokumentation; laes GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. Hvis du stoder pa fejl i oversaettelsen af denne vejledning, skal du sende en besked til . Linux man-pages 6.17 8. februar 2026 unshare(2)