/mandos/release

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/release

« back to all changes in this revision

Viewing changes to plugin-runner.xml

Merge change to add local route when network is "unreachable".

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
<?xml version="1.0" encoding="UTF-8"?>
2
2
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3
3
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4
 
<!ENTITY VERSION "1.0">
5
4
<!ENTITY COMMANDNAME "plugin-runner">
6
 
<!ENTITY TIMESTAMP "2008-09-02">
 
5
<!ENTITY TIMESTAMP "2015-06-28">
 
6
<!ENTITY % common SYSTEM "common.ent">
 
7
%common;
7
8
]>
8
9
 
9
10
<refentry xmlns:xi="http://www.w3.org/2001/XInclude">
11
12
    <title>Mandos Manual</title>
12
13
    <!-- Nwalsh’s docbook scripts use this to generate the footer: -->
13
14
    <productname>Mandos</productname>
14
 
    <productnumber>&VERSION;</productnumber>
 
15
    <productnumber>&version;</productnumber>
15
16
    <date>&TIMESTAMP;</date>
16
17
    <authorgroup>
17
18
      <author>
18
19
        <firstname>Björn</firstname>
19
20
        <surname>Påhlsson</surname>
20
21
        <address>
21
 
          <email>belorn@fukt.bsnet.se</email>
 
22
          <email>belorn@recompile.se</email>
22
23
        </address>
23
24
      </author>
24
25
      <author>
25
26
        <firstname>Teddy</firstname>
26
27
        <surname>Hogeborn</surname>
27
28
        <address>
28
 
          <email>teddy@fukt.bsnet.se</email>
 
29
          <email>teddy@recompile.se</email>
29
30
        </address>
30
31
      </author>
31
32
    </authorgroup>
32
33
    <copyright>
33
34
      <year>2008</year>
 
35
      <year>2009</year>
 
36
      <year>2012</year>
34
37
      <holder>Teddy Hogeborn</holder>
35
38
      <holder>Björn Påhlsson</holder>
36
39
    </copyright>
37
40
    <xi:include href="legalnotice.xml"/>
38
41
  </refentryinfo>
39
 
 
 
42
  
40
43
  <refmeta>
41
44
    <refentrytitle>&COMMANDNAME;</refentrytitle>
42
45
    <manvolnum>8mandos</manvolnum>
45
48
  <refnamediv>
46
49
    <refname><command>&COMMANDNAME;</command></refname>
47
50
    <refpurpose>
48
 
      Run Mandos plugins.  Pass data from first succesful one.
 
51
      Run Mandos plugins, pass data from first to succeed.
49
52
    </refpurpose>
50
53
  </refnamediv>
51
 
 
 
54
  
52
55
  <refsynopsisdiv>
53
56
    <cmdsynopsis>
54
57
      <command>&COMMANDNAME;</command>
55
58
      <group rep="repeat">
56
59
        <arg choice="plain"><option>--global-env=<replaceable
57
 
        >VAR</replaceable><literal>=</literal><replaceable
 
60
        >ENV</replaceable><literal>=</literal><replaceable
58
61
        >value</replaceable></option></arg>
59
62
        <arg choice="plain"><option>-G
60
 
        <replaceable>VAR</replaceable><literal>=</literal><replaceable
 
63
        <replaceable>ENV</replaceable><literal>=</literal><replaceable
61
64
        >value</replaceable> </option></arg>
62
65
      </group>
63
66
      <sbr/>
111
114
      <arg><option>--plugin-dir=<replaceable
112
115
      >DIRECTORY</replaceable></option></arg>
113
116
      <sbr/>
 
117
      <arg><option>--plugin-helper-dir=<replaceable
 
118
      >DIRECTORY</replaceable></option></arg>
 
119
      <sbr/>
114
120
      <arg><option>--config-file=<replaceable
115
121
      >FILE</replaceable></option></arg>
116
122
      <sbr/>
140
146
    <title>DESCRIPTION</title>
141
147
    <para>
142
148
      <command>&COMMANDNAME;</command> is a program which is meant to
143
 
      be specified as <quote>keyscript</quote> in <citerefentry>
144
 
      <refentrytitle>crypttab</refentrytitle>
145
 
      <manvolnum>5</manvolnum></citerefentry> for the root disk.  The
146
 
      aim of this program is therefore to output a password, which
147
 
      then <citerefentry><refentrytitle>cryptsetup</refentrytitle>
148
 
      <manvolnum>8</manvolnum></citerefentry> will use to try and
149
 
      unlock the root disk.
 
149
      be specified as a <quote>keyscript</quote> for the root disk in
 
150
      <citerefentry><refentrytitle>crypttab</refentrytitle>
 
151
      <manvolnum>5</manvolnum></citerefentry>.  The aim of this
 
152
      program is therefore to output a password, which then
 
153
      <citerefentry><refentrytitle>cryptsetup</refentrytitle>
 
154
      <manvolnum>8</manvolnum></citerefentry> will use to unlock the
 
155
      root disk.
150
156
    </para>
151
157
    <para>
152
158
      This program is not meant to be invoked directly, but can be in
170
176
    <variablelist>
171
177
      <varlistentry>
172
178
        <term><option>--global-env
173
 
        <replaceable>VAR</replaceable><literal>=</literal><replaceable
 
179
        <replaceable>ENV</replaceable><literal>=</literal><replaceable
174
180
        >value</replaceable></option></term>
175
 
        <term><option>-e
176
 
        <replaceable>VAR</replaceable><literal>=</literal><replaceable
 
181
        <term><option>-G
 
182
        <replaceable>ENV</replaceable><literal>=</literal><replaceable
177
183
        >value</replaceable></option></term>
178
184
        <listitem>
179
185
          <para>
189
195
        <replaceable>PLUGIN</replaceable><literal>:</literal
190
196
        ><replaceable>ENV</replaceable><literal>=</literal
191
197
        ><replaceable>value</replaceable></option></term>
192
 
        <term><option>-f
 
198
        <term><option>-E
193
199
        <replaceable>PLUGIN</replaceable><literal>:</literal
194
200
        ><replaceable>ENV</replaceable><literal>=</literal
195
201
        ><replaceable>value</replaceable></option></term>
215
221
            <replaceable>OPTIONS</replaceable> is a comma separated
216
222
            list of options.  This is not a very useful option, except
217
223
            for specifying the <quote><option>--debug</option></quote>
218
 
            for all plugins.
 
224
            option to all plugins.
219
225
          </para>
220
226
        </listitem>
221
227
      </varlistentry>
241
247
            <option>--bar</option> with the option argument
242
248
            <quote>baz</quote> is either
243
249
            <userinput>--options-for=foo:--bar=baz</userinput> or
244
 
            <userinput>--options-for=foo:--bar,baz</userinput>, but
245
 
            <emphasis>not</emphasis>
246
 
            <userinput>--options-for="foo:--bar baz"</userinput>.
 
250
            <userinput>--options-for=foo:--bar,baz</userinput>.  Using
 
251
            <userinput>--options-for="foo:--bar baz"</userinput>. will
 
252
            <emphasis>not</emphasis> work.
247
253
          </para>
248
254
        </listitem>
249
255
      </varlistentry>
250
 
 
 
256
      
251
257
      <varlistentry>
252
258
        <term><option>--disable
253
259
        <replaceable>PLUGIN</replaceable></option></term>
258
264
            Disable the plugin named
259
265
            <replaceable>PLUGIN</replaceable>.  The plugin will not be
260
266
            started.
261
 
          </para>       
 
267
          </para>
262
268
        </listitem>
263
269
      </varlistentry>
264
 
 
 
270
      
265
271
      <varlistentry>
266
272
        <term><option>--enable
267
273
        <replaceable>PLUGIN</replaceable></option></term>
272
278
            Re-enable the plugin named
273
279
            <replaceable>PLUGIN</replaceable>.  This is only useful to
274
280
            undo a previous <option>--disable</option> option, maybe
275
 
            from the config file.
 
281
            from the configuration file.
276
282
          </para>
277
283
        </listitem>
278
284
      </varlistentry>
279
 
 
 
285
      
280
286
      <varlistentry>
281
287
        <term><option>--groupid
282
288
        <replaceable>ID</replaceable></option></term>
289
295
          </para>
290
296
        </listitem>
291
297
      </varlistentry>
292
 
 
 
298
      
293
299
      <varlistentry>
294
300
        <term><option>--userid
295
301
        <replaceable>ID</replaceable></option></term>
302
308
          </para>
303
309
        </listitem>
304
310
      </varlistentry>
305
 
 
 
311
      
306
312
      <varlistentry>
307
313
        <term><option>--plugin-dir
308
314
        <replaceable>DIRECTORY</replaceable></option></term>
317
323
      </varlistentry>
318
324
      
319
325
      <varlistentry>
 
326
        <term><option>--plugin-helper-dir
 
327
        <replaceable>DIRECTORY</replaceable></option></term>
 
328
        <listitem>
 
329
          <para>
 
330
            Specify a different plugin helper directory.  The default
 
331
            is <filename>/lib/mandos/plugin-helpers</filename>, which
 
332
            will exist in the initial <acronym>RAM</acronym> disk
 
333
            environment.  (This will simply be passed to all plugins
 
334
            via the <envar>MANDOSPLUGINHELPERDIR</envar> environment
 
335
            variable.  See <xref linkend="writing_plugins"/>)
 
336
          </para>
 
337
        </listitem>
 
338
      </varlistentry>
 
339
      
 
340
      <varlistentry>
320
341
        <term><option>--config-file
321
342
        <replaceable>FILE</replaceable></option></term>
322
343
        <listitem>
365
386
          </para>
366
387
        </listitem>
367
388
      </varlistentry>
368
 
 
 
389
      
369
390
      <varlistentry>
370
391
        <term><option>--version</option></term>
371
392
        <term><option>-V</option></term>
377
398
      </varlistentry>
378
399
    </variablelist>
379
400
  </refsect1>
380
 
 
 
401
  
381
402
  <refsect1 id="overview">
382
403
    <title>OVERVIEW</title>
383
404
    <xi:include href="overview.xml"/>
403
424
      code will make this plugin-runner output the password from that
404
425
      plugin, stop any other plugins, and exit.
405
426
    </para>
 
427
    
 
428
    <refsect2 id="writing_plugins">
 
429
      <title>WRITING PLUGINS</title>
 
430
      <para>
 
431
        A plugin is simply a program which prints a password to its
 
432
        standard output and then exits with a successful (zero) exit
 
433
        status.  If the exit status is not zero, any output on
 
434
        standard output will be ignored by the plugin runner.  Any
 
435
        output on its standard error channel will simply be passed to
 
436
        the standard error of the plugin runner, usually the system
 
437
        console.
 
438
      </para>
 
439
      <para>
 
440
        If the password is a single-line, manually entered passprase,
 
441
        a final trailing newline character should
 
442
        <emphasis>not</emphasis> be printed.
 
443
      </para>
 
444
      <para>
 
445
        The plugin will run in the initial RAM disk environment, so
 
446
        care must be taken not to depend on any files or running
 
447
        services not available there.  Any helper executables required
 
448
        by the plugin (which are not in the <envar>PATH</envar>) can
 
449
        be placed in the plugin helper directory, the name of which
 
450
        will be made available to the plugin via the
 
451
        <envar>MANDOSPLUGINHELPERDIR</envar> environment variable.
 
452
      </para>
 
453
      <para>
 
454
        The plugin must exit cleanly and free all allocated resources
 
455
        upon getting the TERM signal, since this is what the plugin
 
456
        runner uses to stop all other plugins when one plugin has
 
457
        output a password and exited cleanly.
 
458
      </para>
 
459
      <para>
 
460
        The plugin must not use resources, like for instance reading
 
461
        from the standard input, without knowing that no other plugin
 
462
        is also using it.
 
463
      </para>
 
464
      <para>
 
465
        It is useful, but not required, for the plugin to take the
 
466
        <option>--debug</option> option.
 
467
      </para>
 
468
    </refsect2>
406
469
  </refsect1>
407
470
  
408
471
  <refsect1 id="fallback">
434
497
      only passes on its environment to all the plugins.  The
435
498
      environment passed to plugins can be modified using the
436
499
      <option>--global-env</option> and <option>--env-for</option>
437
 
      optins.
 
500
      options.  Also, the <option>--plugin-helper-dir</option> option
 
501
      will affect the environment variable
 
502
      <envar>MANDOSPLUGINHELPERDIR</envar> for the plugins.
438
503
    </para>
439
504
  </refsect1>
440
505
  
480
545
  <refsect1 id="bugs">
481
546
    <title>BUGS</title>
482
547
    <para>
 
548
      The <option>--config-file</option> option is ignored when
 
549
      specified from within a configuration file.
483
550
    </para>
484
551
  </refsect1>
485
552
  
486
553
  <refsect1 id="examples">
487
554
    <title>EXAMPLE</title>
488
 
    <para>
489
 
    </para>
 
555
    <informalexample>
 
556
      <para>
 
557
        Normal invocation needs no options:
 
558
      </para>
 
559
      <para>
 
560
        <userinput>&COMMANDNAME;</userinput>
 
561
      </para>
 
562
    </informalexample>
 
563
    <informalexample>
 
564
      <para>
 
565
        Run the program, but not the plugins, in debug mode:
 
566
      </para>
 
567
      <para>
 
568
        
 
569
        <!-- do not wrap this line -->
 
570
        <userinput>&COMMANDNAME; --debug</userinput>
 
571
        
 
572
      </para>
 
573
    </informalexample>
 
574
    <informalexample>
 
575
      <para>
 
576
        Run all plugins, but run the <quote>foo</quote> plugin in
 
577
        debug mode:
 
578
      </para>
 
579
      <para>
 
580
        
 
581
        <!-- do not wrap this line -->
 
582
        <userinput>&COMMANDNAME; --options-for=foo:--debug</userinput>
 
583
        
 
584
      </para>
 
585
    </informalexample>
 
586
    <informalexample>
 
587
      <para>
 
588
        Run all plugins, but not the program, in debug mode:
 
589
      </para>
 
590
      <para>
 
591
        
 
592
        <!-- do not wrap this line -->
 
593
        <userinput>&COMMANDNAME; --global-options=--debug</userinput>
 
594
        
 
595
      </para>
 
596
    </informalexample>
 
597
    <informalexample>
 
598
      <para>
 
599
        Read a different configuration file, run plugins from a
 
600
        different directory, specify an alternate plugin helper
 
601
        directory and add two options to the
 
602
        <citerefentry><refentrytitle >mandos-client</refentrytitle>
 
603
        <manvolnum>8mandos</manvolnum></citerefentry> plugin:
 
604
      </para>
 
605
      <para>
 
606
 
 
607
<!-- do not wrap this line -->
 
608
<userinput>cd /etc/keys/mandos; &COMMANDNAME;  --config-file=/etc/mandos/plugin-runner.conf --plugin-dir /usr/lib/x86_64-linux-gnu/mandos/plugins.d --plugin-helper-dir /usr/lib/x86_64-linux-gnu/mandos/plugin-helpers --options-for=mandos-client:--pubkey=pubkey.txt,--seckey=seckey.txt</userinput>
 
609
 
 
610
      </para>
 
611
    </informalexample>
490
612
  </refsect1>
491
 
  
492
613
  <refsect1 id="security">
493
614
    <title>SECURITY</title>
494
615
    <para>
 
616
      This program will, when starting, try to switch to another user.
 
617
      If it is started as root, it will succeed, and will by default
 
618
      switch to user and group 65534, which are assumed to be
 
619
      non-privileged.  This user and group is then what all plugins
 
620
      will be started as.  Therefore, the only way to run a plugin as
 
621
      a privileged user is to have the set-user-ID or set-group-ID bit
 
622
      set on the plugin executable file (see <citerefentry>
 
623
      <refentrytitle>execve</refentrytitle><manvolnum>2</manvolnum>
 
624
      </citerefentry>).
 
625
    </para>
 
626
    <para>
 
627
      If this program is used as a keyscript in <citerefentry
 
628
      ><refentrytitle>crypttab</refentrytitle><manvolnum>5</manvolnum>
 
629
      </citerefentry>, there is a slight risk that if this program
 
630
      fails to work, there might be no way to boot the system except
 
631
      for booting from another media and editing the initial RAM disk
 
632
      image to not run this program.  This is, however, unlikely,
 
633
      since the <citerefentry><refentrytitle
 
634
      >password-prompt</refentrytitle><manvolnum>8mandos</manvolnum>
 
635
      </citerefentry> plugin will read a password from the console in
 
636
      case of failure of the other plugins, and this plugin runner
 
637
      will also, in case of catastrophic failure, itself fall back to
 
638
      asking and outputting a password on the console (see <xref
 
639
      linkend="fallback"/>).
495
640
    </para>
496
641
  </refsect1>
497
642
  
498
643
  <refsect1 id="see_also">
499
644
    <title>SEE ALSO</title>
500
645
    <para>
 
646
      <citerefentry><refentrytitle>intro</refentrytitle>
 
647
      <manvolnum>8mandos</manvolnum></citerefentry>,
501
648
      <citerefentry><refentrytitle>cryptsetup</refentrytitle>
502
649
      <manvolnum>8</manvolnum></citerefentry>,
 
650
      <citerefentry><refentrytitle>crypttab</refentrytitle>
 
651
      <manvolnum>5</manvolnum></citerefentry>,
 
652
      <citerefentry><refentrytitle>execve</refentrytitle>
 
653
      <manvolnum>2</manvolnum></citerefentry>,
503
654
      <citerefentry><refentrytitle>mandos</refentrytitle>
504
655
      <manvolnum>8</manvolnum></citerefentry>,
505
656
      <citerefentry><refentrytitle>password-prompt</refentrytitle>
506
657
      <manvolnum>8mandos</manvolnum></citerefentry>,
507
 
      <citerefentry><refentrytitle>password-request</refentrytitle>
 
658
      <citerefentry><refentrytitle>mandos-client</refentrytitle>
508
659
      <manvolnum>8mandos</manvolnum></citerefentry>
509
660
    </para>
510
661
  </refsect1>