UNSHARE(1)

NAZWA
unshare - uruchamia program w nowych przestrzeniach nazw

SKŁADNIA

unshare [opcje] [program [argumenty]]

OPIS

Polecenie unshare tworzy nowe przestrzenie nazw (podane opcjami wiersza poleceń opisanymi poniżej) i wykonuje podany program. Jeśli nie poda się programu, uruchamia powłokę "${SHELL}" (domyślnie: /bin/sh).

Domyślnie, przestrzenie nazw istnieją tylko tak długo, jak występujące w nich procesy. Można jednak utworzyć nową przestrzeń nazw jako trwałą, nawet gdy nie występują w niej procesy, poprzez zamontowanie przez podpięcie plików /proc/pid/ns/typ do ścieżki systemu plików. W przestrzeń nazw, którą utrwalono w ten sposób, można później wejść za pomocą nsenter(1) nawet po zakończeniu programu (z wyjątkiem przestrzeni nazw PID, gdzie wymagany jest trwale działający proces init). Gdy trwała przestrzeń nazw nie jest już dłużej potrzebna, można zdjąć przymiot trwałości, usuwając montowanie przez podpięcie, programem umount(8). Więcej szczegółów w rozdziale PRZYKŁADY.

Polecenie unshare od wersji 2.36 util-linux korzysta z plików /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 pomocą unshare można utworzyć następujące typy przestrzeni nazw:

przestrzeń nazw montowań
    Montowanie i odmontowywanie systemów plików nie będzie miało wpływu na resztę systemu, z wyjątkiem systemów plików bezpośrednio oznaczonych jako współdzielone (za pomocą mount --make-shared; zob. /proc/self/mountinfo lub findmnt -o+PROPAGATION i znaczniki shared). Więcej szczegółów w podręczniku systemowym mount_namespaces(7).

    Od wersji 2.27 util-linux, unshare automatycznie ustawia propagację na private w nowych przestrzeniach nazw montowań aby zapewnić, że nowa przestrzeń nazw faktycznie nie jest dzielona. Można wyłączyć tę funkcję opcją --propagation unchanged. Proszę zauważyć, że private jest domyślnym wyborem jądra.

przestrzeń nazw UTS
    Ustawianie nazwy stacji (hostname) lub domeny (domainname) nie będzie miało wpływu na resztę systemu. Więcej szczegółów w podręczniku systemowym uts_namespaces(7).

przestrzeń nazw IPC
    Proces będzie miał niezależną przestrzeń nazw do celu: kolejek komunikatów POSIX oraz kolejek komunikatów Systemu V, zestawów semaforów oraz segmentów pamięci dzielonej. Więcej szczegółów w podręczniku ipc_namespaces(7).

przestrzeń nazw sieci
    Proces będzie miał niezależne stosy IPv4 i IPv6, tablice trasowania IP, reguły zapory sieciowej, drzewa katalogów /proc/net i /sys/class/net, gniazd itp. Więcej szczegółów w podręczniku network_namespaces(7).

przestrzeń nazw PID
    Potomkowie będą mieli oddzielny zbiór przypisań od PID-u do procesu, od swych rodziców. Więcej szczegółów w podręczniku systemowym pid_namespaces(7).

przestrzeń nazw grup kontrolnych cgroup
    Proces będzie miał zwirtualizowany widok /proc/self/cgroup, a nowe montowania cgroup będą zakorzenione w korzeniu przestrzeni nazw cgroup. Więcej szczegółów w podręczniku systemowym cgroup_namespaces(7).

przestrzeń nazw użytkownika
    Proces będzie miał odrębny zbiór identyfikatorów użytkownika, grup oraz przywilejów. Więcej szczegółów w podręczniku systemowym user_namespaces(7).

przestrzeń nazw czasu
    Proces będzie miał oddzielny widok CLOCK_MONOTONIC i/lub CLOCK_BOOTTIME, które można zmienić za pomocą pliku /proc/self/timens_offsets. Więcej szczegółów w podręczniku systemowym time_namespaces(7).

OPCJE

-i, --ipc[=plik]
    Tworzy nową przestrzeń nazw IPC. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem.

-m, --mount[=plik]
    Tworzy nową przestrzeń nazw montowań. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem. Proszę zauważyć, że plik musi być umieszczony w montowaniu, którego typem propagacji nie jest shared (albo wystąpi błąd). Proszę zastosować polecenie findmnt -o+PROPAGATION, gdy nie jest się pewnym aktualnego ustawienia. Zob. też przykłady poniżej.

-n, --net[=plik]
    Tworzy nową przestrzeń nazw sieci. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem.

-p, --pid[=plik]
    Tworzy nową przestrzeń nazw PID. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem (utworzenie trwałej przestrzeni nazw PID zawiedzie, jeśli nie poda się równocześnie opcji --fork).

    Zob. też opcje --fork i --mount-proc.

-u, --uts[=plik]
    Tworzy nową przestrzeń nazw UTS. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem.

-U, --user[=plik]
    Tworzy nową przestrzeń nazw użytkownika. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem.

-C, --cgroup[=plik]
    Tworzy nową przestrzeń nazw grup kontrolnych cgroup. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem.

-T, --time[=plik]
    Tworzy nową przestrzeń nazw czasu. Jeśli poda się plik, to przestrzeń nazw stanie się trwała, poprzez utworzenie montowania przez podpięcie pod plikiem. Opcjami --monotonic i --boottime można podać odpowiednie przesunięcie w przestrzeni nazw czasu.

-f, --fork
    Rozgałęzia podany program jako proces potomny programu unshare, zamiast uruchamiać go bezpośrednio. Przydatne przy tworzeniu nowej przestrzeni nazw PID. Proszę zauważyć, że gdy unshare oczekuje na proces potomny, ignoruje sygnały SIGINT i SIGTERM oraz nie przekazuje żadnych sygnałów potomkowi. Konieczne jest wysyłanie sygnałów do procesu potomnego.

--forward-signals
    Przekazuje sygnały SIGTERM i SIGINT otrzymane przez proces macierzysty unshare do jego procesów potomnych. Gdy nie poda się tej opcji, unshare ignoruje te sygnały przy oczekiwaniu na zakończenie procesu potomnego (domyślne zachowanie od util-linux 2.36). Pozwala to na utrzymanie istnienia rodzica podczas obsługi sygnałów przez proces potomny.

    Opcja przydatna, gdy proces macierzysty unshare otrzyma sygnały SIGTERM lub SIGINT (np. przy przeładowaniu systemu albo od menedżera procesów), a chce się uzyskać poinformowanie procesu potomnego o żądaniu poprawnego wyjścia, dzięki czemu może on przeprowadzić konieczne operacje czyszczące. Jeśli dany proces potomny ma procedury obsługi sygnałów (takie jak obsługa pułapek powłoki), włączenie tej opcji pozwala na ich wykonanie.

    Opcja ta wymusza --fork.

--keep-caps
    Gdy poda się opcję --user zapewnia, że przywileje nadane w przestrzeni nazw użytkownika są zachowywane w procesie potomnym.

--kill-child[=nazwa-sygnału]
    Gdy unshare kończy się, wyśle nazwę-sygnału do rozgałęzionego procesu potomnego. Przy łącznym stosowaniu z --pid można uzyskać łatwe i niezawodne zabijanie całego drzewa procesów unshare. Jeśli nie poda się nazwy-sygnału, domyślnie będzie to SIGKILL. Opcja wymusza --fork.

--mount-proc[=punkt-montowania]
    Tuż przed uruchomieniem programu, montuje system plików proc w punkcie-montowania (domyślnie w /proc). Przydatne przy tworzeniu nowej przestrzeni nazw PID. Wymusza także utworzenie nowej przestrzeni nazw montowań, ponieważ montowanie /proc spowodowałoby problemy dla istniejących programów w systemie. Nowy system plików proc jest jawnie montowany jako prywatny (z MS_PRIVATE|MS_REC).

--mount-binfmt[=punkt-montowania]
    Tuż przed uruchomieniem programu, montuje system plików binfmt_misc w punkcie-montowania (domyślnie w /proc/sys/fs/binfmt_misc). Wymusza także utworzenie nowej przestrzeni nazw montowań, ponieważ montowanie binfmt_misc spowodowałoby problemy dla istniejących programów w systemie. Nowy system plików binfmt_misc jest jawnie montowany jako prywatny (z MS_PRIVATE|MS_REC).

--map-user uid|nazwa
    Uruchamia program jedynie po przypisaniu bieżącego efektywnego identyfikatora użytkownika do uid. Jeśli poda się tę opcję wielokrotnie, pierwszeństwo ma ostatnie wystąpienie. Opcja wymusza --user.

--map-users wewnętrzny-uid:zewnętrzny-uid:liczba|auto|subids|all
    Uruchamia program jedynie po przypisaniu bloków identyfikatorów użytkownika o rozmiarze liczba zaczynających się od zewnętrznego-uid do bloków identyfikatorów użytkownika zaczynających się od wewnętrznego-uid. Przypisanie jest tworzone za pomocą newuidmap(1) jeśli unshare uruchomiono jako nieuprzywilejowany. Jeśli zakres identyfikatorów użytkowników nachodzi na przypisania podane w --map-user, to "dziura" zostanie usunięta z przypisania. Może to poskutkować tym, że najwyższy identyfikator użytkownika nie zostanie przypisany. Można przypisać kilka bloków identyfikatorów użytkownika, podając opcję --map-users wielokrotnie. Specjalna wartość auto przypisze pierwszy blok identyfikatorów użytkownika będący własnością efektywnego użytkownika z /etc/subuid do bloku zaczynającego się od identyfikatora użytkownika 0. Specjalna wartość subids utworzy równoważne przypisania tego samego bloku. Specjalna wartość all utworzy przypisanie przejściowe (pass-through) dla każdego dostępnego identyfikatora użytkownika w macierzystej przestrzeni nazw. Opcja wymusza również opcję --user.

    Przed wersją 2.39 util-linux, opcja ta oczekiwała argumentu używającego przecinka jako separatora, w postaci zewnętrzny-uid,wewnętrzny-uid,liczba, jednak format ten jest obecnie przestarzały, aby zachować spójność z kolejnością stosowaną w /proc/[pid]/uid_map i opcji montowania X-mount.idmap.

--map-group gid|nazwa
    Uruchamia program jedynie po przypisaniu bieżącego efektywnego identyfikatora grupy do gid. Jeśli poda się tę opcję wielokrotnie, pierwszeństwo ma ostatnie wystąpienie. Opcja wymusza --setgroups=deny i --user.

--map-groups wewnętrzny-gid:zewnętrzny-gid:liczba|auto|subids|all
    Uruchamia program jedynie po przypisaniu bloków identyfikatorów grup o rozmiarze liczba zaczynających się od zewnętrznego-gid do bloków identyfikatorów grup zaczynających się od wewnętrznego-gid. Przypisanie jest tworzone za pomocą newgidmap(1) jeśli unshare uruchomiono jako nieuprzywilejowany. Jeśli zakres identyfikatorów grup nachodzi na przypisania podane w --map-group, to "dziura" zostanie usunięta z przypisania. Może to poskutkować tym, że najwyższy identyfikator grupy nie zostanie przypisany. Można przypisać kilka bloków identyfikatorów grup, podając opcję --map-groups wielokrotnie. Specjalna wartość auto przypisze pierwszy blok identyfikatorów grup będący własnością efektywnej grupy z /etc/subgid do bloku zaczynającego się od identyfikatora grupy 0. Specjalna wartość subids utworzy równoważne przypisania tego samego bloku. Specjalna wartość all utworzy przypisanie przejściowe (pass-through) dla każdego dostępnego identyfikatora grupy w macierzystej przestrzeni nazw. Opcja wymusza również opcję --user.

    Przed wersją 2.39 util-linux, opcja ta oczekiwała argumentu używającego przecinka jako separatora, w postaci zewnętrzny-gid,wewnętrzny-gid,liczba, jednak format ten jest obecnie przestarzały, aby zachować spójność z kolejnością stosowaną w /proc/[pid]/gid_map i opcji montowania X-mount.idmap.

--map-auto
    Przypisuje pierwszy blok identyfikatorów użytkownika będący własnością efektywnego użytkownika z /etc/subuid do bloku zaczynającego się od identyfikatora użytkownika 0. W ten sam sposób, przypisze również pierwszy blok identyfikatorów grup będących własnością efektywnej grupy z /etc/subgid do bloku zaczynającego się od identyfikatora grupy 0. Opcja ta służy obsłużeniu częstego przypadku, gdy pierwszy blok podległych identyfikatorów użytkownika i grupy może zająć całą przestrzeń identyfikatorów użytkownika i grupy. Opcja odpowiada jednoczesnemu podaniu --map-users=auto oraz --map-groups=auto.

--map-subids
    Utworzy równoważne przypisania pierwszego bloku identyfikatorów użytkownika będących własnością efektywnego użytkownika z /etc/subuid. W ten sam sposób, utworzy również równoważne przypisania pierwszego bloku identyfikatorów grupy będących własnością 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 identyfikatorów użytkownika i grupy do UID-u i GID-u superużytkownika w nowo utworzonej przestrzeni nazw użytkownika. W ten sposób można wygodnie pozyskać uprawnienia potrzebne do zarządzania różnymi aspektami nowo utworzonych przestrzeni nazw (np. konfiguracji interfejsów w przestrzeni nazw sieci lub montowania systemów plików w przestrzeni nazw montowań) nawet, gdy działa się jako użytkownik nieuprzywilejowany. Jako że jest to funkcja powstała tylko dla wygody, nie obsługuje bardziej złożonych przypadków, takich jak przypisania zakresów UID-ów i GID-ów. 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 identyfikatorów użytkownika i grupy do tych samym UID-ów i GID-ów w nowo utworzonej przestrzeni nazw użytkownika. Opcja wymusza --setgroups=deny i --user. Odpowiada podaniu --map-user=$(id -ru) --map-group=$(id -rg).

--owner uid:gid
    Ustawia użytkownika i grupę właściciela przy tworzeniu nowej przestrzeni nazw użytkownika. Określają one, który użytkownik z macierzystej przestrzeni nazw ma przywilej CAP_SYS_ADMIN w nowo tworzonej potomnej przestrzeni nazw i może wykonać do niej setns(2). Opcja pozwala użytkownikowi uprzywilejowanemu na utworzenie przestrzeni nazw w imieniu użytkownika nieuprzywilejowanego, korzystając ze swoich przywilejów do przypisania identyfikatorów i/lub zamontowania przez podpięcie tej przestrzeni nazw w systemie plików. Wymusza --user.

--propagation private|shared|slave|unchanged
    Rekurencyjnie ustawia flagę propagacji montowania w nowej przestrzeni nazw montowań. Domyślnie propagacja jest ustawiana na private. Można wyłączyć tę funkcję argumentem unchanged. Opcja jest po cichu ignorowana, gdy nie żąda się przestrzeni nazw montowań (--mount).

--setgroups allow|deny
    Dozwala (allow) lub zabrania (deny) stosowania wywołania systemowego setgroups(2) w przestrzeni nazw użytkownika.

    Aby móc wywołać setgroups(2), proces wywołujący musi mieć co najmniej przywilej CAP_SETGID. Jednak od Linuksa 3.19 stosują się dodatkowe ograniczenia: jądro nadaje uprawnienie do wywołania setgroups(2) jedynie po ustawieniu przypisania GID (/proc/pid*/gid_map*). Przypisanie GID jest do zapisu przez roota gdy włączono setgroups(2) (tj. allow, wartość domyślna), natomiast przypisanie GID staje się do zapisu przez procesy nieuprzywilejowane, gdy setgroups(2) jest na stałe wyłączone (poprzez deny).

-R, --root katalog
    uruchamia polecenie z katalogiem głównym ustawionym na katalog.

-w, --wd katalog
    zmienia katalog roboczy na katalog.

-S, --setuid id-użytkownika
    Ustawia identyfikator użytkownika, który będzie stosowany po przejściu w przestrzeń nazw.

-G, --setgid id-grupy
    Ustawia identyfikator grupy, który będzie stosowany po przejściu w przestrzeń nazw oraz porzuca grupy dodatkowe.

-l, --load-interp łańcuch
    Ładuje definicję binfmt_misc do przestrzeni nazw (wymusza --mount-binfmt). Argument łańcuch ma postać :nazwa:typ:przesunięcie:magia:maska:interpretujący:flagi. Więcej szczegółów o rejestrowaniu nowego typu pliku wykonywalnego znajduje się w Do zarządzania flagą F w flags z parametrem --root, binfmt_misc jest montowane dwukrotnie, pierwszy raz przez wykonaniem chroot do załadowania interpretującego z systemu plików wywołującego, a następnie później, aby był dostępny z przestrzeni użytkownika chroot.

--monotonic przesunięcie
    Ustawia przesunięcie zegara CLOCK_MONOTONIC, które będzie stosowane po przejściu w przestrzeń nazw. Opcja wymaga oddzielenia przestrzeni nazw czasu za pomocą opcji --time.

--boottime przesunięcie
    Ustawia przesunięcie zegara CLOCK_BOOTTIME, które będzie stosowane po przejściu w przestrzeń nazw. Opcja wymaga oddzielenia przestrzeni nazw czasu za pomocą opcji --time.

-h, --help
    Wyświetla ten tekst i wychodzi.

-V, --version
    Wyświetla wersję i wychodzi.

UWAGI

Montowanie systemów plików proc i sysfs jako root, w przestrzeni nazw użytkownika, musi być ograniczone, aby mniej uprzywilejowany użytkownik nie był w stanie uzyskać dostępu do wrażliwych plików, które bardziej uprzywilejowany użytkownik uczynił niedostępnymi. W skrócie, zasady wobec proc i sysfs są maksymalnie zbliżone do montowania przez podpięcie.

PRZYKŁADY

Poniższe polecenie tworzy przestrzeń nazw PID, korzystając z --fork aby zapewnić, że wykonywane polecenie odbywa się w procesie potomnym, który (jako pierwszy proces w przestrzeni nazw) ma PID 1. Opcja --mount-proc powoduje, że równocześnie tworzy nową przestrzeń nazw montowań i montuje nowy system plików proc(5), zawierający informacje odnoszące się do nowej przestrzeni nazw PID. Gdy polecenie readlink(1) zakończy się, nowe przestrzenie nazw są automatycznie usuwane.

    # unshare --fork --pid --mount-proc readlink /proc/self
    1

Jako użytkownik nieuprzywilejowany, tworzy nową przestrzeń nazw użytkownika, gdzie poświadczenia użytkownika są przypisywane do identyfikatorów roota wewnątrz 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 użytkownik nieuprzywilejowany, tworzy przestrzeń nazw użytkownika, gdzie przypisane jest pierwszych 65536 identyfikatorów, a poświadczenia użytkownika są przypisywane do identyfikatorów roota wewnątrz przestrzeni nazw. Przypisanie odbywa się na podstawie podległych identyfikatorów przypisanych w subuid(5) i subgid(5). Następnie demonstrujemy przypisanie tworząc plik z identyfikatorem użytkownika 1 i identyfikatorem grupy 1. Ze względu na zwięzłość, pokazywane są tylko przypisania identyfikatora użytkownika:

    $ 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 poniższych poleceń tworzy nową, trwałą przestrzeń nazw UTS i modyfikuje nazwę stacji (hostname) widoczną w tej przestrzeni nazw. Następnie wchodzimy w przestrzeń nazw za pomocą nsenter(1), aby wyświetlić zmodyfikowaną nazwę stacji; krok ten pokazuje, że przestrzeń nazw UTS wciąż istnieje nawet pomimo tego, że po zakończeniu polecenia unshare, nie posiada już żadnych procesów. Następnie przestrzeń nazw jest niszczona poprzez usunięcie montowania przez podpięcie.

    # touch /root/uts-ns
    # unshare --uts=/root/uts-ns hostname FOO
    # nsenter --uts=/root/uts-ns hostname
    FOO
    # umount /root/uts-ns

Poniższe polecenia tworzą trwałą przestrzeń nazw montowań, do której odnosi się montowania przez podpięcie /root/namespaces/mnt. Aby zapewnić, że utworzenie tego montowania przez podpięcie powiedzie się, katalog nadrzędny (/root/namespaces) tworzony jest jako montowania przez podpięcie, którego typem nie jest shared.

    # mount --bind /root/namespaces /root/namespaces
    # mount --make-private /root/namespaces
    # touch /root/namespaces/mnt
    # unshare --mount=/root/namespaces/mnt

Poniższe polecenia demonstrują korzystanie z opcji --kill-child przy tworzeniu przestrzeni nazw PID, aby zapewnić, że gdy unshare jest zabijany, zabijane są też wszystkie procesy wewnątrz przestrzeni nazw PID.

    # set +m                # Nie wypisuje komunikatów ze stanem zadań
    # 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, że zadaniem w tle jest unshare(1)
    unshare
    # kill $!               # Zabijamy unshare(1)
    # pidof sleep

Polecenie pidof(1) nic nie wypisało, ponieważ procesy sleep zostały zabite. Mówiąc dokładniej, gdy proces sleep posiadający PID 1 w przestrzeni nazw (tj. będący procesem init przestrzeni nazw) został zabity, spowodowało to zabicie wszystkich pozostałych procesów w tej przestrzeni nazw. Inaczej będzie, gdy wydamy podobną serię poleceń nie korzystając z opcji --kill-child; wówczas po zakończeniu unshare procesy w przestrzeni nazw PID nie są 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

Poniższy przykład pokazuje utworzenie przestrzeni nazw czasu, w której zegar liczący czas od rozruchu jest ustawiany na kilka lat wstecz:

    # uptime -p             # Pokazujemy czas dział. 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

Poniższy przykład wykonuje chroot do katalogu /chroot/powerpc/jessie i instaluje program interpretujący /bin/qemu-ppc-static do wykonywania plików 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 można rozszyfrować następująco

    qemu-ppc
        jest nazwą nowego pliku tworzonego w katalogu /proc/sys/fs/binfmt_misc, do zarejestrowania programu interpretującego

    M
        definiuje program interpretujący dla danego typu liczby magicznej

    \\x7fELF\x01\\x02\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x1
        jest liczbą magiczną do rozpoznawania pliku do zinterpretowania (w tym przypadku, jest to nagłówek ELF PPC32)

    \\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff
        jest maską do stosowania liczby magicznej

    /bin/qemu-ppc-static
        program interpretujący stosowany z danym plikiem

    OCF
        plik jest otwierany przez jądro z poświadczeniami i tokenami bezpieczeństwa samego pliku i ładowany tuż po jego zarejestrowaniu.

AUTORZY

ZOBACZ TAKŻE

newuidmap(1), newgidmap(1), nsenter(1), lsns(8), clone(2), unshare(2), namespaces(7), mount(8)

ZGŁASZANIE BŁĘDÓW

Problemy należy zgłaszać w

DOSTĘPNOŚĆ

Polecenie unshare jest częścią pakietu util-linux, który można pobrać ze strony