unshare(1)


NAME

   unshare - run program with some namespaces unshared from parent

SYNOPSIS

   unshare [options] program [arguments]

DESCRIPTION

   Unshares  the  indicated  namespaces  from  the parent process and then
   executes the specified program.

   The namespaces can optionally  be  made  persistent  by  bind  mounting
   /proc/pid/ns/type   files   to  a  filesystem  path  and  entered  with
   nsenter(1) even  after  the  program  terminates.   Once  a  persistent
   namespace  is  no  longer needed, it can be unpersisted with umount(8).
   See the EXAMPLES section for more details.

   The namespaces to be unshared are indicated via  options.   Unshareable
   namespaces are:

   mount namespace
          Mounting  and unmounting filesystems will not affect the rest of
          the system (CLONE_NEWNS flag), except for filesystems which  are
          explicitly  marked  as  shared  (with  mount  --make-shared; see
          /proc/self/mountinfo or findmnt -o+PROPAGATION  for  the  shared
          flags).

          unshare   since   util-linux  version  2.27  automatically  sets
          propagation to private in a new mount  namespace  to  make  sure
          that  the  new  namespace  is really unshared.  It's possible to
          disable this feature with option --propagation unchanged.   Note
          that private is the kernel default.

   UTS namespace
          Setting  hostname  or domainname will not affect the rest of the
          system.  (CLONE_NEWUTS flag)

   IPC namespace
          The process will have an  independent  namespace  for  System  V
          message  queues,  semaphore  sets  and  shared  memory segments.
          (CLONE_NEWIPC flag)

   network namespace
          The process will have  independent  IPv4  and  IPv6  stacks,  IP
          routing tables, firewall rules, the /proc/net and /sys/class/net
          directory trees, sockets, etc.  (CLONE_NEWNET flag)

   pid namespace
          Children will have a distinct  set  of  PID-to-process  mappings
          from their parent.  (CLONE_NEWPID flag)

   cgroup namespace
          The  process  will have a virtualized view of /proc/self/cgroup,
          and new cgroup mounts will be rooted  at  the  namespace  cgroup
          root.  (CLONE_NEWCGROUP flag)

   user namespace
          The  process  will  have  a  distinct  set  of  UIDs,  GIDs  and
          capabilities.  (CLONE_NEWUSER flag)

   See clone(2) for the exact semantics of the flags.

OPTIONS

   -i, --ipc[=file]
          Unshare the  IPC  namespace.   If  file  is  specified,  then  a
          persistent namespace is created by a bind mount.

   -m, --mount[=file]
          Unshare  the  mount  namespace.   If  file  is specified, then a
          persistent namespace is created by a bind mount.  Note that file
          has  to be located on a filesystem with the propagation flag set
          to private.  Use the command  findmnt  -o+PROPAGATION  when  not
          sure about the current setting.  See also the examples below.

   -n, --net[=file]
          Unshare  the  network  namespace.   If file is specified, then a
          persistent namespace is created by a bind mount.

   -p, --pid[=file]
          Unshare the PID namespace.  If file is specified then persistent
          namespace  is  created by a bind mount.  See also the --fork and
          --mount-proc options.

   -u, --uts[=file]
          Unshare the  UTS  namespace.   If  file  is  specified,  then  a
          persistent namespace is created by a bind mount.

   -U, --user[=file]
          Unshare  the  user  namespace.   If  file  is  specified, then a
          persistent namespace is created by a bind mount.

   -C, --cgroup[=file]
          Unshare  the  cgroup  namespace.  If  file  is  specified   then
          persistent namespace is created by bind mount.

   -f, --fork
          Fork  the specified program as a child process of unshare rather
          than running it directly.  This is useful when  creating  a  new
          PID namespace.

   --mount-proc[=mountpoint]
          Just  before  running  the program, mount the proc filesystem at
          mountpoint (default is /proc).  This is useful when  creating  a
          new  PID  namespace.   It  also  implies  creating  a  new mount
          namespace since the /proc mount would otherwise mess up existing
          programs  on  the system.  The new proc filesystem is explicitly
          mounted as private (with MS_PRIVATE|MS_REC).

   -r, --map-root-user
          Run the program only after the current effective user and  group
          IDs  have  been mapped to the superuser UID and GID in the newly
          created user namespace.  This makes it possible to  conveniently
          gain  capabilities needed to manage various aspects of the newly
          created  namespaces  (such  as  configuring  interfaces  in  the
          network   namespace   or   mounting  filesystems  in  the  mount
          namespace) even when run unprivileged.  As  a  mere  convenience
          feature,  it does not support more sophisticated use cases, such
          as mapping multiple  ranges  of  UIDs  and  GIDs.   This  option
          implies --setgroups=deny.

   --propagation private|shared|slave|unchanged
          Recursively  set  the  mount  propagation  flag in the new mount
          namespace.  The default is to set the  propagation  to  private.
          It  is  possible  to  disable  this  feature  with  the argument
          unchanged.  The  option  is  silently  ignored  when  the  mount
          namespace (--mount) is not requested.

   --setgroups allow|deny
          Allow or deny the setgroups(2) syscall in a user namespace.

          To  be  able  to  call setgroups(2), the calling process must at
          least  have  CAP_SETGID.   But  since  Linux  3.19   a   further
          restriction   applies:  the  kernel  gives  permission  to  call
          setgroups(2) only after the GID map (/proc/pid/gid_map) has been
          set.   The  GID  map  is  writable  by root when setgroups(2) is
          enabled (i.e. allow, the  default),  and  the  GID  map  becomes
          writable   by   unprivileged   processes  when  setgroups(2)  is
          permanently disabled (with deny).

   -V, --version
          Display version information and exit.

   -h, --help
          Display help text and exit.

EXAMPLES

   # unshare --fork --pid --mount-proc readlink /proc/self
   1
          Establish a PID namespace, ensure we're PID 1 in  it  against  a
          newly mounted procfs instance.

   $ unshare --map-root-user --user sh -c whoami
   root
          Establish  a  user namespace as an unprivileged user with a root
          user within it.

   # touch /root/uts-ns
   # unshare --uts=/root/uts-ns hostname FOO
   # nsenter --uts=/root/uts-ns hostname
   FOO
   # umount /root/uts-ns
          Establish a persistent UTS namespace, and modify  the  hostname.
          The  namespace  is  then entered with nsenter.  The namespace is
          destroyed by unmounting the bind reference.

   # mount --bind /root/namespaces /root/namespaces
   # mount --make-private /root/namespaces
   # touch /root/namespaces/mnt
   # unshare --mount=/root/namespaces/mnt
          Establish a persistent mount namespace referenced  by  the  bind
          mount  /root/namespaces/mnt.   This  example  shows  a  portable
          solution, because it makes sure that the bind mount  is  created
          on a shared filesystem.

SEE ALSO

   unshare(2), clone(2), mount(8)

AUTHORS

   Mikhail Gusarov dottedmag@dottedmag.net
   Karel Zak kzak@redhat.com

AVAILABILITY

   The  unshare command is part of the util-linux package and is available
   from ftp://ftp.kernel.org/pub/linux/utils/util-linux/.





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.