[lxc-devel] [PATCH 1/1] lxc-usernsexec: add a manpage
Serge Hallyn
serge.hallyn at ubuntu.com
Fri Jan 17 21:15:45 UTC 2014
and fix the help output in the program
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
configure.ac | 1 +
doc/Makefile.am | 1 +
doc/lxc-usernsexec.sgml.in | 156 +++++++++++++++++++++++++++++++++++++++++++++
src/lxc/lxc_usernsexec.c | 3 +-
4 files changed, 159 insertions(+), 2 deletions(-)
create mode 100644 doc/lxc-usernsexec.sgml.in
diff --git a/configure.ac b/configure.ac
index d8be165..8e1c198 100644
--- a/configure.ac
+++ b/configure.ac
@@ -592,6 +592,7 @@ AC_CONFIG_FILES([
doc/lxc-unfreeze.sgml
doc/lxc-unshare.sgml
doc/lxc-user-nic.sgml
+ doc/lxc-usernsexec.sgml
doc/lxc-version.sgml
doc/lxc-wait.sgml
diff --git a/doc/Makefile.am b/doc/Makefile.am
index e87c2f8..f548238 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -38,6 +38,7 @@ man_MANS = \
lxc-unfreeze.1 \
lxc-unshare.1 \
lxc-user-nic.1 \
+ lxc-usernsexec.1 \
lxc-version.1 \
lxc-wait.1 \
\
diff --git a/doc/lxc-usernsexec.sgml.in b/doc/lxc-usernsexec.sgml.in
new file mode 100644
index 0000000..ca55ed8
--- /dev/null
+++ b/doc/lxc-usernsexec.sgml.in
@@ -0,0 +1,156 @@
+<!--
+
+lxc: linux Container library
+
+(C) Copyright IBM Corp. 2007, 2008
+
+Authors:
+Daniel Lezcano <daniel.lezcano at free.fr>
+Serge Hallyn <serge.hallyn at ubuntu.com>
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-->
+
+<!DOCTYPE refentry PUBLIC @docdtd@ [
+
+<!ENTITY commonoptions SYSTEM "@builddir@/common_options.sgml">
+<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
+]>
+
+<refentry>
+
+ <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
+
+ <refmeta>
+ <refentrytitle>lxc-usernsexec</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>lxc-usernsexec</refname>
+
+ <refpurpose>
+ Run a task as root in a new user namespace.
+ </refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>lxc-unshare</command>
+ <arg choice="opt">-m <replaceable>uid-map</replaceable></arg>
+ <arg choice="req">-- command</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>
+ <command>lxc-usernsexec</command> can be used to run a task as root
+ in a new user namespace.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+
+ <title>Options</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>
+ <option>-m <replaceable>uid-map</replaceable></option>
+ </term>
+ <listitem>
+ <para>
+ The uid map to use in the user namespace. Each map consists of
+ four colon-separate values. First a character 'u', 'g' or 'b' to
+ specify whether this map perttains to user ids, group ids, or
+ both; next the first userid in the user namespace; next the
+ first userid as seen on the host; and finally the number of
+ ids to be mapped.
+ </para>
+ <para>
+ More than one map can be specified. If no map is
+ specified, then by default the full uid and gid ranges granted
+ by /etc/subuid and /etc/subgid will be mapped to the
+ uids and gids starting at 0 in the container.
+ </para>
+ <para>
+ Note that <replaceable>lxc-usernsexec</replaceable> always tries
+ to setuid and setgid to 0 in the namespace. Therefore uid 0 in
+ the namespace must be mapped.
+ </para>
+ </listitem>
+ </varlistentry>
+
+
+ </variablelist>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+ <para>
+ To spawn a shell with the full allotted subuids mapped into
+ the container, use
+ <programlisting>
+ lxc-usernsexec
+ </programlisting>
+ To run a different shell than <replaceable>/bin/sh</replaceable>, use
+ <programlisting>
+ lxc-usernsexec -- /bin/bash
+ </programlisting>
+ </para>
+ <para>
+ If your user id is 1000, root in a container is mapped to 190000, and
+ you wish to chown a file you own to root in the container, you can use:
+ <programlisting>
+ lxc-usernsexec -m b:0:1000:1 -m b:1:190000:1 -- /bin/chown 1:1 $file
+ </programlisting>
+ This maps your userid to root in the user namespace, and 190000 to uid 1.
+ Since root in the user namespace is privileged over all userids mapped
+ into the namespace, you are allowed to change the file ownership, which
+ you could not do on the host using a simple chown.
+ </para>
+ </refsect1>
+
+ &seealso;
+
+ <refsect1>
+ <title>Author</title>
+ <para>Serge Hallyn <email>serge.hallyn at ubuntu.com</email></para>
+ </refsect1>
+
+</refentry>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-default-dtd-file:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/src/lxc/lxc_usernsexec.c b/src/lxc/lxc_usernsexec.c
index 35cd473..8335725 100644
--- a/src/lxc/lxc_usernsexec.c
+++ b/src/lxc/lxc_usernsexec.c
@@ -47,8 +47,7 @@ int unshare(int flags);
static void usage(const char *name)
{
- printf("usage: %s [-h] [-c] [-mnuUip] [-P <pid-file>]"
- "[command [arg ..]]\n", name);
+ printf("usage: %s [-h] [-m <uid-maps>] -- [command [arg ..]]\n", name);
printf("\n");
printf(" -h this message\n");
printf("\n");
--
1.8.5.2
More information about the lxc-devel
mailing list