Provided by: util-linux-locales_2.39.1-4ubuntu2.2_all bug

НАЗИВ

       unshare - извршава програм у новим називним просторима

УВОД

       unshare [опције] [програм [аргументи]]

ОПИС

       Наредба unshare ствара нови називни простор (као што је наведено опцијама линије наредби
       описаним испод) и затим извршава наведени програм. Ако програм није дат, тад се покреће
       „${SHELL}“ (основно: /bin/sh).

       По основи, нови називни простор постоји само све док има процесе чланове. Нови називни
       простор се може учинити постојаним чак и када нема процеса чланова тако што ћете повезати
       качење „/proc/pid/ns/врста датотеке“ на путању система датотека. Називни простор који је
       на овај начин постао постојан може се накнадно унети са nsenter(1) чак и након окончања
       програма (осим ПИД називних простора где је потребан трајно покренут процес покретања).
       Једном када трајни називни простор више није потребан, може се опозвати коришћењем
       umount(8) за уклањање повезаног качења. Погледајте одељак ПРИМЕРИ за више о томе.

       unshare од „util-linux“ издања 2.36 користи /proc/[pid]/ns/пид_за_децу и
       /proc/[pid]/ns/време_за_децу датотеке за трајни називни простор ПИД и ВРЕМЕ. Ова измена
       захтева Линукс кернел 4.17 или новији.

       Следеће врсте називних простора се могу направити са unshare:

       mount namespace
           Качење и откачињање система датотека неће деловати на остатак система, изузев за
           системе датотека који су изричито означени као дељени (са mount --make-shared; видите
           /proc/self/mountinfo или findmnt -o+ПРОСТИРАЊЕ за опције shared). За више о томе,
           видите mount_namespaces(7).

           unshare од „util-linux“-а издање 2.27 самостално поставља простирање на private у
           новом називном простору качења да би се уверио да нови називни простор заиста није
           дељен. Могуће је онемогућити ову функцију опцијом --propagation unchanged. Знајте да
           је private основна вредност кернела.

       UTS namespace
           Постављање назива домаћина или назива домена неће утицати на остатак система. За више
           о томе, видите uts_namespaces(7).

       IPC namespace
           Процес ће имати независтан називни простор за редове POSIX порука као и за редове
           порука System V, поставке семафора и сегменте дељене меморије. За више о томе, видите
           ipc_namespaces(7).

       network namespace
           Процес ће имати независне IPv4 и IPv6 спремнике, табеле IP рутине, правила мрежне
           баријере, сзабла /proc/net и /sys/class/net директоријума, прикључница, итд. За више о
           томе, видите network_namespaces(7).

       PID namespace
           Пород ће имати посебан скуп мапирања ПИД-у-процес од свог родитеља. За више детаља,
           погледајте pid_namespaces(7).

       cgroup namespace
           Процес ће имати виртуелизовани преглед /proc/self/cgroup-е, а нова „cgroup“ качења
           биће укорењена у „cgroup“ корен називног простора. За више о томе, видите
           cgroup_namespaces(7).

       user namespace
           Процес ће имати различити скуп УИД-ова, ГИД-ова и могућности. За више о томе, видите
           user_namespaces(7).

       time namespace
           Процес може имати другачији преглед CLOCK_MONOTONIC-а и/или CLOCK_BOOTTIME-а који се
           могу изменити коришћењем /proc/self/timens_offsets. За више о томе, видите
           time_namespaces(7).

ОПЦИЈЕ

       -i, --ipc[=датотека]
           Ствара нови „IPC“ називни простор. Ако је датотека наведена, тада се називни простор
           чини трајним стварањем свезе качења на датотеци.

       -m, --mount[=датотека]
           Ствара нови називни простор качења. Ако је датотека наведена, тада се називни простор
           чини трајним стварањем свезе качења на датотеци. Знајте да датотека мора да се налази
           на качењу чија врста простирања није дељена (или је резултат грешке). Користите
           наредбу findmnt -o+ПРОСТИРАЊЕ када нисте сигурни у тренутну поставку. Погледајте и
           примере у наставку.

       -n, --net[=датотека]
           Ствара нови називни простор мреже. Ако је датотека наведена, тада се називни простор
           чини трајним стварањем свезе качења на датотеци.

       -p, --pid[=датотека]
           Ствара нови називни простор ПИД-а. Ако је датотека наведена, тада се називни простор
           чини трајним стварањем свезе качења на датотеци. (Стварање трајног ПИД називног
           простора неће успети ако се и --fork опција такође не наведе.)

           Видите такође опцију --fork и --mount-proc.

       -u, --uts[=датотека]
           Ствара нови простор времена УТС-а. Ако је датотека наведена, тада се називни простор
           чини трајним стварањем свезе качења на датотеци

       -U, --user[=датотека]
           Ствара нови називни простор корисника. Ако је датотека наведена, тада се називни
           простор чини трајним стварањем свезе качења на датотеци

       -C, --cgroup[=датотека]
           Ствара нови „cgroup“ називни простор. Ако је датотека наведена, тада се називни
           простор чини трајним стварањем свезе качења на датотеци.

       -T, --time[=датотека]
           Ствара нови називни простор времена. Ако је датотека наведена, тада се називни простор
           чини трајним стварањем свезе качења на датотеци. Опције --monotonic и --boottime се
           могу користити за навођење одговарајућег помераја у временском називном простору.

       -f, --fork
           Клонира наведени програм као подређени процес unshare-а уместо да га покрене
           непосредно. Ово је корисно када правите нови ПИД називни простор. Знајте да када
           unshare чека на процес порода, тада занемарује SIGINT и SIGTERM и не прослеђује
           никакве сигнале породу. Неопходно је слати сигнале процесу порода.

       --keep-caps
           Када је опција --user дата, осигурава да су могућности гарантоване у корисничком
           називном простору очуване у проистеклом процесу.

       --kill-child[=назив-сигнала]
           Када се unshare оконча, чини да се назив-сигнала пошаље клонираном процесу порода. У
           комбинацији са --pid ово омогућава лако и поуздано убијање читавог стабла процеса
           испод unshare. Ако није дато, назив-сигнала се по основи пребацује на SIGKILL. Ова
           опција подразумева --fork.

       --mount-proc[=тачка-качења]
           Непосредно пре покретања програма, качи „proc“ систем датотека на тачку-качења
           (основно је /proc). Ово је корисно када правите нови називни простор ПИД-а. Такође
           подразумева стварање новог називног простора качења јер би /proc качење иначе
           покварило постојеће програме на систему. Нови „proc“ систем датотека је изричито
           прикачен као приватни (са MS_PRIVATE|MS_REC).

       --map-user=уид|назив
           Покреће програм само након што је текући ефективни ИД корисника мапиран на уид. Ако је
           ова опција наведена више пута, последње појављивање има предност. Ова опција
           подразумева --user.

       --map-users=inneruid:outeruid:count|auto
           Покреће програм само након што је блок ИД-ова корисника величине укупност који почиње
           на спољномуид-у био мапиран на блок ИД-ова корисника који почињу на унутарњемуид-у.
           Ово мапирање се прави са newuidmap(1). Ако се опсег ИД-ова корисника преклапа са
           мапирањем наведеним са --map-user, тада ће „рупа“ бити уклоњена из мапирања. То може
           резултирати већим ИД-ом корисника мапирања које није мапирано. Нарочита вредност auto
           ће мапирати први блок ИД-ова корисника у поседу ефективног корисника из /etc/subuid у
           блок који почиње на корисничком ИД-у 0. Ако је ова опција наведена више пута, последње
           појављивање има предност. Ова опција подразумева --user.

           Before util-linux version 2.39, this option expected a comma-separated argument of the
           form outeruid,inneruid,count but that format is now deprecated for consistency with
           the ordering used in /proc/[pid]/uid_map and the X-mount.idmap mount option.

       --map-group=гид|назив
           Покреће програм само након што је текући ефективни ИД корисника мапиран на гид. Ако је
           ова опција наведена више пута, последње појављивање има предност. Ова опција
           подразумева --setgroups=deny и --user.

       --map-groups=innergid:outergid:count|auto
           Покреће програм само након што је блок ИД-ова групе величине укупност који почиње на
           спољномгид-у био мапиран на блок ИД-ова групе који почињу на унутарњемгид-у. Ово
           мапирање се прави са newgidmap(1). Ако се опсег ИД-ова групе преклапа са мапирањем
           наведеним са --map-group, тада ће „рупа“ бити уклоњена из мапирања. То може
           резултирати већим ИД-ом групе мапирања које није мапирано. Нарочита вредност auto ће
           мапирати први блок ИД-ова корисника у поседу ефективног корисника из /etc/subgid у
           блок који почиње на групном ИД-у 0. Ако је ова опција наведена више пута, последње
           појављивање има предност. Ова опција подразумева --user.

           Before util-linux version 2.39, this option expected a comma-separated argument of the
           form outergid,innergid,count but that format is now deprecated for consistency with
           the ordering used in /proc/[pid]/gid_map and the X-mount.idmap mount option.

       --map-auto
           Мапира први блок корисникових ИД-ова у власништву ефективног корисника из /etc/subuid
           на блок који почиње на корисниковом ИД-у 0. На исти начин, такође мапира први блок
           ИД-ова групе у власништву ефективне групе из /etc/subgid на блок који почиње на ИД-у
           групе 0. Ова опција је замишљена да ради са општим случајем где први блок подређених
           ИД-ова корисника и групе може да мапира читав простор ИД-а корисника и групе. Ова
           опција је еквивалент за навођење --map-users=auto и --map-groups=auto.

       -r, --map-root-user
           Покреће програм тек након што се тренутни стварни ИД-ови корисника и групе мапирају у
           УИД и ГИД суперкорисника у новоствореном корисничком називном простору. Ово омогућава
           пригодно добијање могућности потребних за управљање различитим аспектима новостворених
           наменских простора (као што је подешавање сучеља у мрежном називном простору или
           качење система датотека у називном простору качења) чак и када се покрену као
           непривилеговани. Као само функција погодности, не подржава софистицираније случајеве
           употребе, као што је мапирање више опсега УИД-а и ГИД-ова. Ова опција подразумева
           --setgroups=deny и --user. Ова опција је еквивалентна са --map-user=0 --map-group=0.

       -c, --map-current-user
           Покреће програм тек након што се тренутни стварни ИД-ови корисника и групе мапирају на
           исти УИД и ГИД у новоствореном корисничком наменском простору. Ова опција подразумева
           --setgroups=deny и --user. Ова опција је еквивалентна са --map-user=$(id -ru)
           --map-group=$(id -rg).

       --propagation private|shared|slave|unchanged
           Дубински поставља опцију простирања качења у новом називном простору качења. Основно
           је постављање простирања на private. Могуће је онемогућити ову функцију аргументом
           unchanged. Опција се тихо занемарује када се називни простор качења (--mount) не
           захтева.

       --setgroups allow|deny
           Допушта или забрањује setgroups(2) системски позив у корисничком називном простору.

           Да би био у могућности да позове setgroups(2), процес позивања мора да има барем
           CAP_SETGID. Али од Линукса 3.19 примењује се још једно ограничење: кернел даје дозволу
           за позивање setgroups(2) само након што је ГИД мапа (/proc/пид*/гид_мапа*) постављена.
           У ГИД мапу може да пише администратор када је setgroups(2) омогућено (тј. allow,
           подразумевано), а ГИД мапа постаје уписива непривилегованим процесима када је
           setgroups(2) трајно онемогућено (са deny).

       -R, --root=дир
           извршава наредбу са кореним директоријумом постављеним на дир.

       -w, --wd=дир
           мења радни директоријум у дир.

       -S, --setuid уиб
           Поставља ИД корисника који ће се користити у унесеном називном простору.

       -G, --setgid ГИБ
           Поставља ИД групе који ће се користити у унесеном називном простору и одбацује додатне
           групе.

       --monotonic померај
           Поставља померај CLOCK_MONOTONIC који ће се користити у унесеном временском називном
           простору. Ова опција захтева поништавање дељења временског називног простора са
           --time.

       --boottime померај
           Поставља померај CLOCK_BOOTTIME који ће се користити у унесеном временском називном
           простору. Ова опција захтева поништавање дељења временског називног простора са
           --time.

       -h, --help
           Приказује текст помоћи и излази.

       -V, --version
           Исписује издање и излази.

БЕЛЕШКЕ

       Системи датотека „proc“ и „sysfs“ који се каче као корени у корисничком називном простору
       морају бити ограничени тако да мање привилеговани корисник не може да добије већи приступ
       осетљивим датотекама које је привилегованији корисник учинио недоступним. Укратко, правило
       за „proc“ и „sysfs“ је што је могуће ближе свезивању качења.

ПРИМЕРИ

       The following command creates a PID namespace, using --fork to ensure that the executed
       command is performed in a child process that (being the first process in the namespace)
       has PID 1. The --mount-proc option ensures that a new mount namespace is also
       simultaneously created and that a new proc(5) filesystem is mounted that contains
       information corresponding to the new PID namespace. When the readlink(1) command
       terminates, the new namespaces are automatically torn down.

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

       Као непривилеговани корисник, ствара нови кориснички називни простор где су корисничка
       уверења мапирана на ИД-ове корена унутар називног простора:

           $ 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

       Као непривилеговани корисник, ствара кориснички називни простор где су првих 65536 ИД-ова
       сви мапирани, а креденцијали корисника су мапирани на корене ИД-ове унутар називног
       простора. Мапа је одређена подређеним ИД-овима додељеним у subuid(5) и subgid(5).
       Приказује ово мапирање стварањем датотеке са ИД-ом 1 корисника и ИД-ом 1 групе. Укратко,
       приказана су само мапирања ИД-а корисника:

           $ 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 file; chown 1:1 file
           # ls -ln --time-style=+ file
           -rw-r--r-- 1 1 1 0  file
           # exit
           $ ls -ln --time-style=+ file
           -rw-r--r-- 1 100000 100000 0  file

       Прва од следећих наредби ствара нови трајни UTS називни простор и мења назив домаћина како
       се види у том називном простору. Називни простор се затим уноси са nsenter(1) да би се
       приказао измењен назив домаћина; овај корак показује да UTS називни простор наставља да
       постоји иако називни простор није имао процесе чланове након што се окончала наредба
       unshare. Називни простор се затим уништава уклањањем свезног качења.

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

       Следеће наредбе успостављају постојан називни простор качења на који упућује свеза качења
       /root/namespace/mnt. Да би се осигурало да стварање тог свезивања качења буде успешно,
       родитељски директоријум (/root/namespaces) је учињен свезом качења чија врста простирања
       није shared.

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

       Следеће наредбе показују коришћење опције --kill-child приликом стварања ПИД називног
       пропстора, да би се осигурало да када је unshare убијено, сви процеси у ПИД називном
       простору су убијени.

           # set +m                # Не исписује поруке стања посла

           # 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' $! # Показује да је позадински посао „unshare(1)“
           unshare
           # kill $! # Убија „unshare(1)“
           # pidof sleep

       Наредба pidof(1) не исписује никакав излаз, јер су sleep процеси убијени. Тачније, када је
       процес sleep који има ПИД 1 у називном простору (тј. покретачки процес називног простора)
       био убијен, то је довело до тога да сви остали процеси у називном простору буду убијени.
       Насупрот томе, слична серија наредби где се опција --kill-child не користи показује да
       када се unshare оконча, процеси у ПИД називном простору нису убијени:

           # 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

       Следећи пример показује стварање временског називног простора где је сат времена подизања
       система постављен да показује неколико година у прошлости:

           # uptime -p             # Приказује „uptime“ у почетном временском називном простору
           up 21 сат, 30 минута
           # unshare --time --fork --boottime 300000000 uptime -p
           up 9 година, 28 седмице, 1 дан, 2 сата, 50 минута

АУТОРИ

       Mikhail Gusarov <dottedmag@dottedmag.net>, Karel Zak <kzak@redhat.com>

ПОГЛЕДАЈТЕ ТАКОЂЕ

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

ПРИЈАВЉИВАЊЕ ГРЕШАКА

       За пријављивање грешака, користите пратиоца грешака на
       https://github.com/util-linux/util-linux/issues.

ДОСТУПНОСТ

       Наредба unshare је део пакета „util-linux“ који се може преузети са Архиве Линукс кернела
       <https://www.kernel.org/pub/linux/utils/util-linux/>.