~ubuntu-branches/ubuntu/quantal/lxc/quantal-201208301614

« back to all changes in this revision

Viewing changes to .pc/0105-lxc-attach-add-R-option/doc/lxc-attach.sgml.in

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2012-08-21 16:10:08 UTC
  • Revision ID: package-import@ubuntu.com-20120821161008-0fhg53kqdfn9u3aj
Tags: 0.8.0~rc1-4ubuntu27
* Add patches from mailing list to support per-namespace attach with
  lxc-attach.
  - 0104-add-option-to-lxc-attach-to-select-ns
  - 0105-lxc-attach-add-R-option

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!--
 
2
 
 
3
lxc: linux Container library
 
4
 
 
5
(C) Copyright IBM Corp. 2007, 2008
 
6
 
 
7
Authors:
 
8
Daniel Lezcano <dlezcano at fr.ibm.com>
 
9
 
 
10
This library is free software; you can redistribute it and/or
 
11
modify it under the terms of the GNU Lesser General Public
 
12
License as published by the Free Software Foundation; either
 
13
version 2.1 of the License, or (at your option) any later version.
 
14
 
 
15
This library is distributed in the hope that it will be useful,
 
16
but WITHOUT ANY WARRANTY; without even the implied warranty of
 
17
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
18
Lesser General Public License for more details.
 
19
 
 
20
You should have received a copy of the GNU Lesser General Public
 
21
License along with this library; if not, write to the Free Software
 
22
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
23
 
 
24
-->
 
25
 
 
26
<!DOCTYPE refentry PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
 
27
 
 
28
<!ENTITY commonoptions SYSTEM "@builddir@/common_options.sgml">
 
29
<!ENTITY seealso SYSTEM "@builddir@/see_also.sgml">
 
30
]>
 
31
 
 
32
<refentry>
 
33
 
 
34
  <docinfo><date>@LXC_GENERATE_DATE@</date></docinfo>
 
35
 
 
36
  <refmeta>
 
37
    <refentrytitle>lxc-attach</refentrytitle>
 
38
    <manvolnum>1</manvolnum>
 
39
  </refmeta>
 
40
 
 
41
  <refnamediv>
 
42
    <refname>lxc-attach</refname>
 
43
 
 
44
    <refpurpose>
 
45
      start a process inside a running container.
 
46
    </refpurpose>
 
47
  </refnamediv>
 
48
 
 
49
  <refsynopsisdiv>
 
50
    <cmdsynopsis><command>lxc-attach <replaceable>-n
 
51
    name</replaceable> <optional>-a
 
52
    arch</optional> <optional>-e</optional> <optional>-s
 
53
    namespaces</optional>
 
54
    <optional>-- command</optional></command></cmdsynopsis>
 
55
  </refsynopsisdiv>
 
56
 
 
57
  <refsect1>
 
58
    <title>Description</title>
 
59
 
 
60
    <para>
 
61
      <command>lxc-attach</command> runs the specified
 
62
      <replaceable>command</replaceable> inside the container
 
63
      specified by <replaceable>name</replaceable>. The container
 
64
      has to be running already.
 
65
    </para>
 
66
    <para>
 
67
      If no <replaceable>command</replaceable> is specified, the
 
68
      current default shell of the user running
 
69
      <command>lxc-attach</command> will be looked up inside the
 
70
      container and executed. This will fail if no such user exists
 
71
      inside the container or the container does not have a working
 
72
      nsswitch mechanism.
 
73
    </para>
 
74
 
 
75
  </refsect1>
 
76
 
 
77
  <refsect1>
 
78
 
 
79
    <title>Options</title>
 
80
 
 
81
    <variablelist>
 
82
 
 
83
      <varlistentry>
 
84
        <term>
 
85
          <option>-a, --arch <replaceable>arch</replaceable></option>
 
86
        </term>
 
87
        <listitem>
 
88
          <para>
 
89
            Specify the architecture which the kernel should appear to be
 
90
            running as to the command executed. This option will accept the
 
91
            same settings as the <option>lxc.arch</option> option in
 
92
            container configuration files, see
 
93
            <citerefentry>
 
94
              <refentrytitle><filename>lxc.conf</filename></refentrytitle>
 
95
              <manvolnum>5</manvolnum>
 
96
            </citerefentry>. By default, the current archictecture of the
 
97
            running container will be used.
 
98
          </para>
 
99
        </listitem>
 
100
      </varlistentry>
 
101
 
 
102
      <varlistentry>
 
103
        <term>
 
104
          <option>-e, --elevated-privileges</option>
 
105
        </term>
 
106
        <listitem>
 
107
          <para>
 
108
            Do not drop privileges when running
 
109
            <replaceable>command</replaceable> inside the container. If
 
110
            this option is specified, the new process will
 
111
            <emphasis>not</emphasis> be added to the container's cgroup(s)
 
112
            and it will not drop its capabilities before executing.
 
113
          </para>
 
114
          <para>
 
115
            <emphasis>Warning:</emphasis> This may leak privileges into the
 
116
            container if the command starts subprocesses that remain active
 
117
            after the main process that was attached is terminated. The
 
118
            (re-)starting of daemons inside the container is problematic,
 
119
            especially if the daemon starts a lot of subprocesses such as
 
120
            <command>cron</command> or <command>sshd</command>.
 
121
            <emphasis>Use with great care.</emphasis>
 
122
          </para>
 
123
        </listitem>
 
124
      </varlistentry>
 
125
 
 
126
      <varlistentry>
 
127
        <term>
 
128
          <option>-s, --namespaces <replaceable>namespaces</replaceable></option>
 
129
        </term>
 
130
        <listitem>
 
131
          <para>
 
132
            Specify the namespaces to attach to, as a pipe-separated liste,
 
133
            e.g. <replaceable>NETWORK|IPC</replaceable>. Allowed values are
 
134
            <replaceable>MOUNT</replaceable>, <replaceable>PID</replaceable>,
 
135
            <replaceable>UTSNAME</replaceable>, <replaceable>IPC</replaceable>,
 
136
            <replaceable>USER </replaceable> and
 
137
            <replaceable>NETWORK</replaceable>. This allows one to change
 
138
            the context of the process to e.g. the network namespace of the
 
139
            container while retaining the other namespaces as those of the
 
140
            host.
 
141
          </para>
 
142
          <para>
 
143
            <emphasis>Important:</emphasis> This option implies
 
144
            <option>-e</option>.
 
145
          </para>
 
146
        </listitem>
 
147
      </varlistentry>
 
148
 
 
149
    </variablelist>
 
150
 
 
151
  </refsect1>
 
152
 
 
153
  &commonoptions;
 
154
 
 
155
  <refsect1>
 
156
    <title>Examples</title>
 
157
      <para>
 
158
        To spawn a new shell running inside an existing container, use
 
159
        <programlisting>
 
160
          lxc-attach -n container
 
161
        </programlisting>
 
162
      </para>
 
163
      <para>
 
164
        To restart the cron service of a running Debian container, use
 
165
        <programlisting>
 
166
          lxc-attach -n container -- /etc/init.d/cron restart
 
167
        </programlisting>
 
168
      </para>
 
169
      <para>
 
170
        To deactivate the network link eth1 of a running container that
 
171
        does not have the NET_ADMIN capability, use either the
 
172
        <option>-e</option> option to use increased capabilities,
 
173
        assuming the <command>ip</command> tool is installed:
 
174
        <programlisting>
 
175
          lxc-attach -n container -e -- /sbin/ip link delete eth1
 
176
        </programlisting>
 
177
        Or, alternatively, use the <option>-s</option> to use the
 
178
        tools installed on the host outside the container:
 
179
        <programlisting>
 
180
          lxc-attach -n container -s NETWORK -- /sbin/ip link delete eth1
 
181
        </programlisting>
 
182
      </para>
 
183
  </refsect1>
 
184
 
 
185
  <refsect1>
 
186
    <title>Compatibility</title>
 
187
    <para>
 
188
      Attaching completely (including the pid and mount namespaces) to a
 
189
      container requires a patched kernel, please see the lxc website for
 
190
      details. <command>lxc-attach</command> will fail in that case if
 
191
      used with an unpatched kernel.
 
192
    </para>
 
193
    <para>
 
194
      Nevertheless, it will succeed on an unpatched kernel of version 3.0
 
195
      or higher if the <option>-s</option> option is used to restrict the
 
196
      namespaces that the process is to be attached to to one or more of 
 
197
      <replaceable>NETWORK</replaceable>, <replaceable>IPC</replaceable>
 
198
      and <replaceable>UTSNAME</replaceable>.
 
199
    </para>
 
200
    <para>
 
201
      Attaching to user namespaces is currently completely unsupported
 
202
      by the kernel. User namespaces will be skipped (but will not cause
 
203
      <command>lxc-attach</command> to fail) unless used with a future
 
204
      version of the kernel that supports this.
 
205
    </para>
 
206
  </refsect1>
 
207
 
 
208
  <refsect1>
 
209
    <title>Notes</title>
 
210
    <para>
 
211
      The Linux <replaceable>/proc</replaceable> and
 
212
      <replaceable>/sys</replaceable> filesystems contain information
 
213
      about some quantities that are affected by namespaces, such as
 
214
      the directories named after process ids in
 
215
      <replaceable>/proc</replaceable> or the network interface infromation
 
216
      in <replaceable>/sys/class/net</replaceable>. The namespace of the
 
217
      process mounting the pseudo-filesystems determines what information
 
218
      is shown, <emphasis>not</emphasis> the namespace of the process
 
219
      accessing <replaceable>/proc</replaceable> or
 
220
      <replaceable>/sys</replaceable>.
 
221
    </para>
 
222
    <para>
 
223
      If one uses the <option>-s</option> option to only attach to
 
224
      the pid namespace of a container, but not its mount namespace
 
225
      (which will contain the <replaceable>/proc</replaceable> of the
 
226
      container and not the host), the contents of <option>/proc</option>
 
227
      will reflect that of the host and not the container. Analogously,
 
228
      the same issue occurs when reading the contents of
 
229
      <replaceable>/sys/class/net</replaceable> and attaching to just
 
230
      the network namespace.
 
231
    </para>
 
232
    <para>
 
233
      A workaround is to use <command>lxc-unshare</command> to unshare
 
234
      the mount namespace after using <command>lxc-attach</command> with
 
235
      <replaceable>-s PID</replaceable> and/or <replaceable>-s
 
236
      NETWORK</replaceable> and then unmount and then mount again both
 
237
      pseudo-filesystems within that new mount namespace, before
 
238
      executing a program/script that relies on this information to be
 
239
      correct.
 
240
    </para>
 
241
  </refsect1>
 
242
 
 
243
  <refsect1>
 
244
    <title>Security</title>
 
245
    <para>
 
246
      The <option>-e</option> and <option>-s</option> options should
 
247
      be used with care, as it may break the isolation of the containers
 
248
      if used improperly.
 
249
    </para>
 
250
  </refsect1>
 
251
 
 
252
  &seealso;
 
253
 
 
254
  <refsect1>
 
255
    <title>Author</title>
 
256
    <para>Daniel Lezcano <email>daniel.lezcano@free.fr</email></para>
 
257
  </refsect1>
 
258
 
 
259
</refentry>
 
260
 
 
261
<!-- Keep this comment at the end of the file
 
262
Local variables:
 
263
mode: sgml
 
264
sgml-omittag:t
 
265
sgml-shorttag:t
 
266
sgml-minimize-attributes:nil
 
267
sgml-always-quote-attributes:t
 
268
sgml-indent-step:2
 
269
sgml-indent-data:t
 
270
sgml-parent-document:nil
 
271
sgml-default-dtd-file:nil
 
272
sgml-exposed-tags:nil
 
273
sgml-local-catalogs:nil
 
274
sgml-local-ecat-files:nil
 
275
End:
 
276
-->