UNSHARE(1) Polecenia uzytkownika UNSHARE(1) NAZWA unshare - uruchamia program w nowych przestrzeniach nazw SKLADNIA unshare [opcje] [program [argumenty]] OPIS Polecenie unshare tworzy nowe przestrzenie nazw (podane opcjami wiersza polecen opisanymi ponizej) i wykonuje podany program. Jesli nie poda sie programu, uruchamia powloke "${SHELL}" (domyslnie: /bin/sh). Domyslnie, przestrzenie nazw istnieja tylko tak dlugo, jak wystepujace w nich procesy. Mozna jednak utworzyc nowa przestrzen nazw jako trwala, nawet gdy nie wystepuja w niej procesy, poprzez zamontowanie przez podpiecie plikow /proc/pid/ns/typ do sciezki systemu plikow. W przestrzen nazw, ktora utrwalono w ten sposob, mozna pozniej wejsc za pomoca nsenter(1) nawet po zakonczeniu programu (z wyjatkiem przestrzeni nazw PID, gdzie wymagany jest trwale dzialajacy proces init). Gdy trwala przestrzen nazw nie jest juz dluzej potrzebna, mozna zdjac przymiot trwalosci, usuwajac montowanie przez podpiecie, programem umount(8). Wiecej szczegolow w rozdziale PRZYKLADY. Polecenie unshare od wersji 2.36 util-linux korzysta z plikow /proc/[pid]/ns/pid_for_children oraz /proc/[pid]/ns/time_for_children do przestrzeni nazw PID i czasu. Zmiana ta wymaga Linuksa 4.17 lub nowszego. Za pomoca unshare mozna utworzyc nastepujace typy przestrzeni nazw: przestrzen nazw montowan Montowanie i odmontowywanie systemow plikow nie bedzie mialo wplywu na reszte systemu, z wyjatkiem systemow plikow bezposrednio oznaczonych jako wspoldzielone (za pomoca mount --make-shared; zob. /proc/self/mountinfo lub findmnt -o+PROPAGATION i znaczniki shared). Wiecej szczegolow w podreczniku systemowym mount_namespaces(7). Od wersji 2.27 util-linux, unshare automatycznie ustawia propagacje na private w nowych przestrzeniach nazw montowan aby zapewnic, ze nowa przestrzen nazw faktycznie nie jest dzielona. Mozna wylaczyc te funkcje opcja --propagation unchanged. Prosze zauwazyc, ze private jest domyslnym wyborem jadra. przestrzen nazw UTS Ustawianie nazwy stacji (hostname) lub domeny (domainname) nie bedzie mialo wplywu na reszte systemu. Wiecej szczegolow w podreczniku systemowym uts_namespaces(7). przestrzen nazw IPC Proces bedzie mial niezalezna przestrzen nazw do celu: kolejek komunikatow POSIX oraz kolejek komunikatow Systemu V, zestawow semaforow oraz segmentow pamieci dzielonej. Wiecej szczegolow w podreczniku ipc_namespaces(7). przestrzen nazw sieci Proces bedzie mial niezalezne stosy IPv4 i IPv6, tablice trasowania IP, reguly zapory sieciowej, drzewa katalogow /proc/net i /sys/class/net, gniazd itp. Wiecej szczegolow w podreczniku network_namespaces(7). przestrzen nazw PID Potomkowie beda mieli oddzielny zbior przypisan od PID-u do procesu, od swych rodzicow. Wiecej szczegolow w podreczniku systemowym pid_namespaces(7). przestrzen nazw grup kontrolnych cgroup Proces bedzie mial zwirtualizowany widok /proc/self/cgroup, a nowe montowania cgroup beda zakorzenione w korzeniu przestrzeni nazw cgroup. Wiecej szczegolow w podreczniku systemowym cgroup_namespaces(7). przestrzen nazw uzytkownika Proces bedzie mial odrebny zbior identyfikatorow uzytkownika, grup oraz przywilejow. Wiecej szczegolow w podreczniku systemowym user_namespaces(7). przestrzen nazw czasu Proces bedzie mial oddzielny widok CLOCK_MONOTONIC i/lub CLOCK_BOOTTIME, ktore mozna zmienic za pomoca pliku /proc/self/timens_offsets. Wiecej szczegolow w podreczniku systemowym time_namespaces(7). OPCJE -i, --ipc[=plik] Tworzy nowa przestrzen nazw IPC. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem. -m, --mount[=plik] Tworzy nowa przestrzen nazw montowan. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem. Prosze zauwazyc, ze plik musi byc umieszczony w montowaniu, ktorego typem propagacji nie jest shared (albo wystapi blad). Prosze zastosowac polecenie findmnt -o+PROPAGATION, gdy nie jest sie pewnym aktualnego ustawienia. Zob. tez przyklady ponizej. -n, --net[=plik] Tworzy nowa przestrzen nazw sieci. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem. -p, --pid[=plik] Tworzy nowa przestrzen nazw PID. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem (utworzenie trwalej przestrzeni nazw PID zawiedzie, jesli nie poda sie rownoczesnie opcji --fork). Zob. tez opcje --fork i --mount-proc. -u, --uts[=plik] Tworzy nowa przestrzen nazw UTS. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem. -U, --user[=plik] Tworzy nowa przestrzen nazw uzytkownika. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem. -C, --cgroup[=plik] Tworzy nowa przestrzen nazw grup kontrolnych cgroup. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem. -T, --time[=plik] Tworzy nowa przestrzen nazw czasu. Jesli poda sie plik, to przestrzen nazw stanie sie trwala, poprzez utworzenie montowania przez podpiecie pod plikiem. Opcjami --monotonic i --boottime mozna podac odpowiednie przesuniecie w przestrzeni nazw czasu. -f, --fork Rozgalezia podany program jako proces potomny programu unshare, zamiast uruchamiac go bezposrednio. Przydatne przy tworzeniu nowej przestrzeni nazw PID. Prosze zauwazyc, ze gdy unshare oczekuje na proces potomny, ignoruje sygnaly SIGINT i SIGTERM oraz nie przekazuje zadnych sygnalow potomkowi. Konieczne jest wysylanie sygnalow do procesu potomnego. --forward-signals Przekazuje sygnaly SIGTERM i SIGINT otrzymane przez proces macierzysty unshare do jego procesow potomnych. Gdy nie poda sie tej opcji, unshare ignoruje te sygnaly przy oczekiwaniu na zakonczenie procesu potomnego (domyslne zachowanie od util-linux 2.36). Pozwala to na utrzymanie istnienia rodzica podczas obslugi sygnalow przez proces potomny. Opcja przydatna, gdy proces macierzysty unshare otrzyma sygnaly SIGTERM lub SIGINT (np. przy przeladowaniu systemu albo od menedzera procesow), a chce sie uzyskac poinformowanie procesu potomnego o zadaniu poprawnego wyjscia, dzieki czemu moze on przeprowadzic konieczne operacje czyszczace. Jesli dany proces potomny ma procedury obslugi sygnalow (takie jak obsluga pulapek powloki), wlaczenie tej opcji pozwala na ich wykonanie. Opcja ta wymusza --fork. --keep-caps Gdy poda sie opcje --user zapewnia, ze przywileje nadane w przestrzeni nazw uzytkownika sa zachowywane w procesie potomnym. --kill-child[=nazwa-sygnalu] Gdy unshare konczy sie, wysle nazwe-sygnalu do rozgalezionego procesu potomnego. Przy lacznym stosowaniu z --pid mozna uzyskac latwe i niezawodne zabijanie calego drzewa procesow unshare. Jesli nie poda sie nazwy-sygnalu, domyslnie bedzie to SIGKILL. Opcja wymusza --fork. --mount-proc[=punkt-montowania] Tuz przed uruchomieniem programu, montuje system plikow proc w punkcie-montowania (domyslnie w /proc). Przydatne przy tworzeniu nowej przestrzeni nazw PID. Wymusza takze utworzenie nowej przestrzeni nazw montowan, poniewaz montowanie /proc spowodowaloby problemy dla istniejacych programow w systemie. Nowy system plikow proc jest jawnie montowany jako prywatny (z MS_PRIVATE|MS_REC). --mount-binfmt[=punkt-montowania] Tuz przed uruchomieniem programu, montuje system plikow binfmt_misc w punkcie-montowania (domyslnie w /proc/sys/fs/binfmt_misc). Wymusza takze utworzenie nowej przestrzeni nazw montowan, poniewaz montowanie binfmt_misc spowodowaloby problemy dla istniejacych programow w systemie. Nowy system plikow binfmt_misc jest jawnie montowany jako prywatny (z MS_PRIVATE|MS_REC). --map-user uid|nazwa Uruchamia program jedynie po przypisaniu biezacego efektywnego identyfikatora uzytkownika do uid. Jesli poda sie te opcje wielokrotnie, pierwszenstwo ma ostatnie wystapienie. Opcja wymusza --user. --map-users wewnetrzny-uid:zewnetrzny-uid:liczba|auto|subids|all Uruchamia program jedynie po przypisaniu blokow identyfikatorow uzytkownika o rozmiarze liczba zaczynajacych sie od zewnetrznego-uid do blokow identyfikatorow uzytkownika zaczynajacych sie od wewnetrznego-uid. Przypisanie jest tworzone za pomoca newuidmap(1) jesli unshare uruchomiono jako nieuprzywilejowany. Jesli zakres identyfikatorow uzytkownikow nachodzi na przypisania podane w --map-user, to "dziura" zostanie usunieta z przypisania. Moze to poskutkowac tym, ze najwyzszy identyfikator uzytkownika nie zostanie przypisany. Mozna przypisac kilka blokow identyfikatorow uzytkownika, podajac opcje --map-users wielokrotnie. Specjalna wartosc auto przypisze pierwszy blok identyfikatorow uzytkownika bedacy wlasnoscia efektywnego uzytkownika z /etc/subuid do bloku zaczynajacego sie od identyfikatora uzytkownika 0. Specjalna wartosc subids utworzy rownowazne przypisania tego samego bloku. Specjalna wartosc all utworzy przypisanie przejsciowe (pass-through) dla kazdego dostepnego identyfikatora uzytkownika w macierzystej przestrzeni nazw. Opcja wymusza rowniez opcje --user. Przed wersja 2.39 util-linux, opcja ta oczekiwala argumentu uzywajacego przecinka jako separatora, w postaci zewnetrzny-uid,wewnetrzny-uid,liczba, jednak format ten jest obecnie przestarzaly, aby zachowac spojnosc z kolejnoscia stosowana w /proc/[pid]/uid_map i opcji montowania X-mount.idmap. --map-group gid|nazwa Uruchamia program jedynie po przypisaniu biezacego efektywnego identyfikatora grupy do gid. Jesli poda sie te opcje wielokrotnie, pierwszenstwo ma ostatnie wystapienie. Opcja wymusza --setgroups=deny i --user. --map-groups wewnetrzny-gid:zewnetrzny-gid:liczba|auto|subids|all Uruchamia program jedynie po przypisaniu blokow identyfikatorow grup o rozmiarze liczba zaczynajacych sie od zewnetrznego-gid do blokow identyfikatorow grup zaczynajacych sie od wewnetrznego-gid. Przypisanie jest tworzone za pomoca newgidmap(1) jesli unshare uruchomiono jako nieuprzywilejowany. Jesli zakres identyfikatorow grup nachodzi na przypisania podane w --map-group, to "dziura" zostanie usunieta z przypisania. Moze to poskutkowac tym, ze najwyzszy identyfikator grupy nie zostanie przypisany. Mozna przypisac kilka blokow identyfikatorow grup, podajac opcje --map-groups wielokrotnie. Specjalna wartosc auto przypisze pierwszy blok identyfikatorow grup bedacy wlasnoscia efektywnej grupy z /etc/subgid do bloku zaczynajacego sie od identyfikatora grupy 0. Specjalna wartosc subids utworzy rownowazne przypisania tego samego bloku. Specjalna wartosc all utworzy przypisanie przejsciowe (pass-through) dla kazdego dostepnego identyfikatora grupy w macierzystej przestrzeni nazw. Opcja wymusza rowniez opcje --user. Przed wersja 2.39 util-linux, opcja ta oczekiwala argumentu uzywajacego przecinka jako separatora, w postaci zewnetrzny-gid,wewnetrzny-gid,liczba, jednak format ten jest obecnie przestarzaly, aby zachowac spojnosc z kolejnoscia stosowana w /proc/[pid]/gid_map i opcji montowania X-mount.idmap. --map-auto Przypisuje pierwszy blok identyfikatorow uzytkownika bedacy wlasnoscia efektywnego uzytkownika z /etc/subuid do bloku zaczynajacego sie od identyfikatora uzytkownika 0. W ten sam sposob, przypisze rowniez pierwszy blok identyfikatorow grup bedacych wlasnoscia efektywnej grupy z /etc/subgid do bloku zaczynajacego sie od identyfikatora grupy 0. Opcja ta sluzy obsluzeniu czestego przypadku, gdy pierwszy blok podleglych identyfikatorow uzytkownika i grupy moze zajac cala przestrzen identyfikatorow uzytkownika i grupy. Opcja odpowiada jednoczesnemu podaniu --map-users=auto oraz --map-groups=auto. --map-subids Utworzy rownowazne przypisania pierwszego bloku identyfikatorow uzytkownika bedacych wlasnoscia efektywnego uzytkownika z /etc/subuid. W ten sam sposob, utworzy rowniez rownowazne przypisania pierwszego bloku identyfikatorow grupy bedacych wlasnoscia efektywnej grupy z /etc/subgid. Opcja odpowiada jednoczesnemu podaniu --map-users=subids i --map-groups=subids. -r, --map-root-user Uruchamia program dopiero po przypisaniu aktualnych efektywnych identyfikatorow uzytkownika i grupy do UID-u i GID-u superuzytkownika w nowo utworzonej przestrzeni nazw uzytkownika. W ten sposob mozna wygodnie pozyskac uprawnienia potrzebne do zarzadzania roznymi aspektami nowo utworzonych przestrzeni nazw (np. konfiguracji interfejsow w przestrzeni nazw sieci lub montowania systemow plikow w przestrzeni nazw montowan) nawet, gdy dziala sie jako uzytkownik nieuprzywilejowany. Jako ze jest to funkcja powstala tylko dla wygody, nie obsluguje bardziej zlozonych przypadkow, takich jak przypisania zakresow UID-ow i GID-ow. Opcja wymusza --setgroups=deny i --user. Odpowiada podaniu --map-user=0 --map-group=0. -c, --map-current-user Uruchamia program dopiero po przypisaniu aktualnych efektywnych identyfikatorow uzytkownika i grupy do tych samym UID-ow i GID-ow w nowo utworzonej przestrzeni nazw uzytkownika. Opcja wymusza --setgroups=deny i --user. Odpowiada podaniu --map-user=$(id -ru) --map-group=$(id -rg). --owner uid:gid Ustawia uzytkownika i grupe wlasciciela przy tworzeniu nowej przestrzeni nazw uzytkownika. Okreslaja one, ktory uzytkownik z macierzystej przestrzeni nazw ma przywilej CAP_SYS_ADMIN w nowo tworzonej potomnej przestrzeni nazw i moze wykonac do niej setns(2). Opcja pozwala uzytkownikowi uprzywilejowanemu na utworzenie przestrzeni nazw w imieniu uzytkownika nieuprzywilejowanego, korzystajac ze swoich przywilejow do przypisania identyfikatorow i/lub zamontowania przez podpiecie tej przestrzeni nazw w systemie plikow. Wymusza --user. --propagation private|shared|slave|unchanged Rekurencyjnie ustawia flage propagacji montowania w nowej przestrzeni nazw montowan. Domyslnie propagacja jest ustawiana na private. Mozna wylaczyc te funkcje argumentem unchanged. Opcja jest po cichu ignorowana, gdy nie zada sie przestrzeni nazw montowan (--mount). --setgroups allow|deny Dozwala (allow) lub zabrania (deny) stosowania wywolania systemowego setgroups(2) w przestrzeni nazw uzytkownika. Aby moc wywolac setgroups(2), proces wywolujacy musi miec co najmniej przywilej CAP_SETGID. Jednak od Linuksa 3.19 stosuja sie dodatkowe ograniczenia: jadro nadaje uprawnienie do wywolania setgroups(2) jedynie po ustawieniu przypisania GID (/proc/pid*/gid_map*). Przypisanie GID jest do zapisu przez roota gdy wlaczono setgroups(2) (tj. allow, wartosc domyslna), natomiast przypisanie GID staje sie do zapisu przez procesy nieuprzywilejowane, gdy setgroups(2) jest na stale wylaczone (poprzez deny). -R, --root katalog uruchamia polecenie z katalogiem glownym ustawionym na katalog. -w, --wd katalog zmienia katalog roboczy na katalog. -S, --setuid id-uzytkownika Ustawia identyfikator uzytkownika, ktory bedzie stosowany po przejsciu w przestrzen nazw. -G, --setgid id-grupy Ustawia identyfikator grupy, ktory bedzie stosowany po przejsciu w przestrzen nazw oraz porzuca grupy dodatkowe. -l, --load-interp lancuch Laduje definicje binfmt_misc do przestrzeni nazw (wymusza --mount-binfmt). Argument lancuch ma postac :nazwa:typ:przesuniecie:magia:maska:interpretujacy:flagi. Wiecej szczegolow o rejestrowaniu nowego typu pliku wykonywalnego znajduje sie w . Do zarzadzania flaga F w flags z parametrem --root, binfmt_misc jest montowane dwukrotnie, pierwszy raz przez wykonaniem chroot do zaladowania interpretujacego z systemu plikow wywolujacego, a nastepnie pozniej, aby byl dostepny z przestrzeni uzytkownika chroot. --monotonic przesuniecie Ustawia przesuniecie zegara CLOCK_MONOTONIC, ktore bedzie stosowane po przejsciu w przestrzen nazw. Opcja wymaga oddzielenia przestrzeni nazw czasu za pomoca opcji --time. --boottime przesuniecie Ustawia przesuniecie zegara CLOCK_BOOTTIME, ktore bedzie stosowane po przejsciu w przestrzen nazw. Opcja wymaga oddzielenia przestrzeni nazw czasu za pomoca opcji --time. -h, --help Wyswietla ten tekst i wychodzi. -V, --version Wyswietla wersje i wychodzi. UWAGI Montowanie systemow plikow proc i sysfs jako root, w przestrzeni nazw uzytkownika, musi byc ograniczone, aby mniej uprzywilejowany uzytkownik nie byl w stanie uzyskac dostepu do wrazliwych plikow, ktore bardziej uprzywilejowany uzytkownik uczynil niedostepnymi. W skrocie, zasady wobec proc i sysfs sa maksymalnie zblizone do montowania przez podpiecie. PRZYKLADY Ponizsze polecenie tworzy przestrzen nazw PID, korzystajac z --fork aby zapewnic, ze wykonywane polecenie odbywa sie w procesie potomnym, ktory (jako pierwszy proces w przestrzeni nazw) ma PID 1. Opcja --mount-proc powoduje, ze rownoczesnie tworzy nowa przestrzen nazw montowan i montuje nowy system plikow proc(5), zawierajacy informacje odnoszace sie do nowej przestrzeni nazw PID. Gdy polecenie readlink(1) zakonczy sie, nowe przestrzenie nazw sa automatycznie usuwane. # unshare --fork --pid --mount-proc readlink /proc/self 1 Jako uzytkownik nieuprzywilejowany, tworzy nowa przestrzen nazw uzytkownika, gdzie poswiadczenia uzytkownika sa przypisywane do identyfikatorow roota wewnatrz przestrzeni nazw: $ id -u; id -g 1000 1000 $ unshare --user --map-root-user \ sh -c 'whoami; cat /proc/self/uid_map /proc/self/gid_map' root 0 1000 1 0 1000 1 Jako uzytkownik nieuprzywilejowany, tworzy przestrzen nazw uzytkownika, gdzie przypisane jest pierwszych 65536 identyfikatorow, a poswiadczenia uzytkownika sa przypisywane do identyfikatorow roota wewnatrz przestrzeni nazw. Przypisanie odbywa sie na podstawie podleglych identyfikatorow przypisanych w subuid(5) i subgid(5). Nastepnie demonstrujemy przypisanie tworzac plik z identyfikatorem uzytkownika 1 i identyfikatorem grupy 1. Ze wzgledu na zwiezlosc, pokazywane sa tylko przypisania identyfikatora uzytkownika: $ id -u 1000 $ cat /etc/subuid 1000:100000:65536 $ unshare --user --map-auto --map-root-user # id -u 0 # cat /proc/self/uid_map 0 1000 1 1 100000 65535 # touch plik; chown 1:1 plik # ls -ln --time-style=+ plik -rw-r--r-- 1 1 1 0 plik # exit $ ls -ln --time-style=+ plik -rw-r--r-- 1 100000 100000 0 plik Pierwsze z ponizszych polecen tworzy nowa, trwala przestrzen nazw UTS i modyfikuje nazwe stacji (hostname) widoczna w tej przestrzeni nazw. Nastepnie wchodzimy w przestrzen nazw za pomoca nsenter(1), aby wyswietlic zmodyfikowana nazwe stacji; krok ten pokazuje, ze przestrzen nazw UTS wciaz istnieje nawet pomimo tego, ze po zakonczeniu polecenia unshare, nie posiada juz zadnych procesow. Nastepnie przestrzen nazw jest niszczona poprzez usuniecie montowania przez podpiecie. # touch /root/uts-ns # unshare --uts=/root/uts-ns hostname FOO # nsenter --uts=/root/uts-ns hostname FOO # umount /root/uts-ns Ponizsze polecenia tworza trwala przestrzen nazw montowan, do ktorej odnosi sie montowania przez podpiecie /root/namespaces/mnt. Aby zapewnic, ze utworzenie tego montowania przez podpiecie powiedzie sie, katalog nadrzedny (/root/namespaces) tworzony jest jako montowania przez podpiecie, ktorego typem nie jest shared. # mount --bind /root/namespaces /root/namespaces # mount --make-private /root/namespaces # touch /root/namespaces/mnt # unshare --mount=/root/namespaces/mnt Ponizsze polecenia demonstruja korzystanie z opcji --kill-child przy tworzeniu przestrzeni nazw PID, aby zapewnic, ze gdy unshare jest zabijany, zabijane sa tez wszystkie procesy wewnatrz przestrzeni nazw PID. # set +m # Nie wypisuje komunikatow ze stanem zadan # unshare --pid --fork --mount-proc --kill-child -- \ bash --norc -c '(sleep 555 &) && (ps a &) && sleep 999' & [1] 53456 # PID TTY STAT TIME COMMAND 1 pts/3 S+ 0:00 sleep 999 3 pts/3 S+ 0:00 sleep 555 5 pts/3 R+ 0:00 ps a # ps h -o 'comm' $! # Pokazujemy, ze zadaniem w tle jest unshare(1) unshare # kill $! # Zabijamy unshare(1) # pidof sleep Polecenie pidof(1) nic nie wypisalo, poniewaz procesy sleep zostaly zabite. Mowiac dokladniej, gdy proces sleep posiadajacy PID 1 w przestrzeni nazw (tj. bedacy procesem init przestrzeni nazw) zostal zabity, spowodowalo to zabicie wszystkich pozostalych procesow w tej przestrzeni nazw. Inaczej bedzie, gdy wydamy podobna serie polecen nie korzystajac z opcji --kill-child; wowczas po zakonczeniu unshare procesy w przestrzeni nazw PID nie sa zabijane # unshare --pid --fork --mount-proc -- \ bash --norc -c '(sleep 555 &) && (ps a &) && sleep 999' & [1] 53479 # PID TTY STAT TIME COMMAND 1 pts/3 S+ 0:00 sleep 999 3 pts/3 S+ 0:00 sleep 555 5 pts/3 R+ 0:00 ps a # kill $! # pidof sleep 53482 53480 Ponizszy przyklad pokazuje utworzenie przestrzeni nazw czasu, w ktorej zegar liczacy czas od rozruchu jest ustawiany na kilka lat wstecz: # uptime -p # Pokazujemy czas dzial. w pierw. prz. nazw czasu up 21 hours, 30 minutes # unshare --time --fork --boottime 300000000 uptime -p up 9 years, 28 weeks, 1 day, 2 hours, 50 minutes Ponizszy przyklad wykonuje chroot do katalogu /chroot/powerpc/jessie i instaluje program interpretujacy /bin/qemu-ppc-static do wykonywania plikow binarnych powerpc. $ unshare --map-root-user --fork --pid --load-interp=":qemu-ppc:M::\\x7fELF\x01\\x02\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x14:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff:/bin/qemu-ppc-static:OCF" --root=/chroot/powerpc/jessie /bin/bash -l Parametr load-interp mozna rozszyfrowac nastepujaco qemu-ppc jest nazwa nowego pliku tworzonego w katalogu /proc/sys/fs/binfmt_misc, do zarejestrowania programu interpretujacego M definiuje program interpretujacy dla danego typu liczby magicznej \\x7fELF\x01\\x02\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x1 jest liczba magiczna do rozpoznawania pliku do zinterpretowania (w tym przypadku, jest to naglowek ELF PPC32) \\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff jest maska do stosowania liczby magicznej /bin/qemu-ppc-static program interpretujacy stosowany z danym plikiem OCF plik jest otwierany przez jadro z poswiadczeniami i tokenami bezpieczenstwa samego pliku i ladowany tuz po jego zarejestrowaniu. AUTORZY Mikhail Gusarov , Karel Zak ZOBACZ TAKZE newuidmap(1), newgidmap(1), nsenter(1), lsns(8), clone(2), unshare(2), namespaces(7), mount(8) ZGLASZANIE BLEDOW Problemy nalezy zglaszac w systemie sledzenia bledow . DOSTEPNOSC Polecenie unshare jest czescia pakietu util-linux, ktory mozna pobrac ze strony Archiwum jadra Linux . util-linux 2.42.3 2026-09-02 UNSHARE(1)