/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 plugins.d/mandos-client.xml

* debian/control (mandos/Depends): Added "python-gobject".

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
 
<!ENTITY COMMANDNAME "password-request">
6
 
<!ENTITY TIMESTAMP "2008-09-03">
 
4
<!ENTITY COMMANDNAME "mandos-client">
 
5
<!ENTITY TIMESTAMP "2009-01-24">
 
6
<!ENTITY % common SYSTEM "../common.ent">
 
7
%common;
7
8
]>
8
9
 
9
10
<refentry xmlns:xi="http://www.w3.org/2001/XInclude">
10
11
  <refentryinfo>
11
12
    <title>Mandos Manual</title>
12
 
    <!-- Nwalsh’s docbook scripts use this to generate the footer: -->
 
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>
31
32
    </authorgroup>
32
33
    <copyright>
33
34
      <year>2008</year>
 
35
      <year>2009</year>
34
36
      <holder>Teddy Hogeborn</holder>
35
37
      <holder>Björn Påhlsson</holder>
36
38
    </copyright>
37
39
    <xi:include href="../legalnotice.xml"/>
38
40
  </refentryinfo>
39
 
 
 
41
  
40
42
  <refmeta>
41
43
    <refentrytitle>&COMMANDNAME;</refentrytitle>
42
44
    <manvolnum>8mandos</manvolnum>
45
47
  <refnamediv>
46
48
    <refname><command>&COMMANDNAME;</command></refname>
47
49
    <refpurpose>
48
 
      Client for mandos
 
50
      Client for <application>Mandos</application>
49
51
    </refpurpose>
50
52
  </refnamediv>
51
 
 
 
53
  
52
54
  <refsynopsisdiv>
53
55
    <cmdsynopsis>
54
56
      <command>&COMMANDNAME;</command>
55
57
      <group>
56
58
        <arg choice="plain"><option>--connect
57
 
        <replaceable>IPADDR</replaceable><literal>:</literal
 
59
        <replaceable>ADDRESS</replaceable><literal>:</literal
58
60
        ><replaceable>PORT</replaceable></option></arg>
59
61
        <arg choice="plain"><option>-c
60
 
        <replaceable>IPADDR</replaceable><literal>:</literal
 
62
        <replaceable>ADDRESS</replaceable><literal>:</literal
61
63
        ><replaceable>PORT</replaceable></option></arg>
62
64
      </group>
63
65
      <sbr/>
64
66
      <group>
65
 
        <arg choice="plain"><option>--keydir
66
 
        <replaceable>DIRECTORY</replaceable></option></arg>
67
 
        <arg choice="plain"><option>-d
68
 
        <replaceable>DIRECTORY</replaceable></option></arg>
69
 
      </group>
70
 
      <sbr/>
71
 
      <group>
72
67
        <arg choice="plain"><option>--interface
73
68
        <replaceable>NAME</replaceable></option></arg>
74
69
        <arg choice="plain"><option>-i
120
115
      </group>
121
116
    </cmdsynopsis>
122
117
  </refsynopsisdiv>
123
 
 
 
118
  
124
119
  <refsect1 id="description">
125
120
    <title>DESCRIPTION</title>
126
121
    <para>
127
122
      <command>&COMMANDNAME;</command> is a client program that
128
123
      communicates with <citerefentry><refentrytitle
129
124
      >mandos</refentrytitle><manvolnum>8</manvolnum></citerefentry>
130
 
      to get a password.  It uses IPv6 link-local addresses to get
131
 
      network connectivity, Zeroconf to find servers, and TLS with an
132
 
      OpenPGP key to ensure authenticity and confidentiality.  It
133
 
      keeps running, trying all servers on the network, until it
134
 
      receives a satisfactory reply or a TERM signal is recieved.
 
125
      to get a password.  In slightly more detail, this client program
 
126
      brings up a network interface, uses the interface’s IPv6
 
127
      link-local address to get network connectivity, uses Zeroconf to
 
128
      find servers on the local network, and communicates with servers
 
129
      using TLS with an OpenPGP key to ensure authenticity and
 
130
      confidentiality.  This client program keeps running, trying all
 
131
      servers on the network, until it receives a satisfactory reply
 
132
      or a TERM signal is received.  If no servers are found, or after
 
133
      all servers have been tried, it waits indefinitely for new
 
134
      servers to appear.
135
135
    </para>
136
136
    <para>
137
137
      This program is not meant to be run directly; it is really meant
191
191
      </varlistentry>
192
192
      
193
193
      <varlistentry>
194
 
        <term><option>--keydir=<replaceable
195
 
        >DIRECTORY</replaceable></option></term>
196
 
        <term><option>-d
197
 
        <replaceable>DIRECTORY</replaceable></option></term>
198
 
        <listitem>
199
 
          <para>
200
 
            Directory to read the OpenPGP key files
201
 
            <filename>pubkey.txt</filename> and
202
 
            <filename>seckey.txt</filename> from.  The default is
203
 
            <filename>/conf/conf.d/mandos</filename> (in the initial
204
 
            <acronym>RAM</acronym> disk environment).
205
 
          </para>
206
 
        </listitem>
207
 
      </varlistentry>
208
 
 
209
 
      <varlistentry>
210
194
        <term><option>--interface=
211
195
        <replaceable>NAME</replaceable></option></term>
212
196
        <term><option>-i
222
206
            specifies the interface to use to connect to the address
223
207
            given.
224
208
          </para>
 
209
          <para>
 
210
            Note that since this program will normally run in the
 
211
            initial RAM disk environment, the interface must be an
 
212
            interface which exists at that stage.  Thus, the interface
 
213
            can not be a pseudo-interface such as <quote>br0</quote>
 
214
            or <quote>tun0</quote>; such interfaces will not exist
 
215
            until much later in the boot process, and can not be used
 
216
            by this program.
 
217
          </para>
225
218
        </listitem>
226
219
      </varlistentry>
227
220
      
232
225
        <replaceable>FILE</replaceable></option></term>
233
226
        <listitem>
234
227
          <para>
235
 
            OpenPGP public key file base name.  This will be combined
236
 
            with the directory from the <option>--keydir</option>
237
 
            option to form an absolute file name.  The default name is
238
 
            <quote><literal>pubkey.txt</literal></quote>.
 
228
            OpenPGP public key file name.  The default name is
 
229
            <quote><filename>/conf/conf.d/mandos/pubkey.txt</filename
 
230
            ></quote>.
239
231
          </para>
240
232
        </listitem>
241
233
      </varlistentry>
242
 
 
 
234
      
243
235
      <varlistentry>
244
236
        <term><option>--seckey=<replaceable
245
237
        >FILE</replaceable></option></term>
247
239
        <replaceable>FILE</replaceable></option></term>
248
240
        <listitem>
249
241
          <para>
250
 
            OpenPGP secret key file base name.  This will be combined
251
 
            with the directory from the <option>--keydir</option>
252
 
            option to form an absolute file name.  The default name is
253
 
            <quote><literal>seckey.txt</literal></quote>.
 
242
            OpenPGP secret key file name.  The default name is
 
243
            <quote><filename>/conf/conf.d/mandos/seckey.txt</filename
 
244
            ></quote>.
254
245
          </para>
255
246
        </listitem>
256
247
      </varlistentry>
263
254
                      xpointer="priority"/>
264
255
        </listitem>
265
256
      </varlistentry>
266
 
 
 
257
      
267
258
      <varlistentry>
268
259
        <term><option>--dh-bits=<replaceable
269
260
        >BITS</replaceable></option></term>
309
300
          </para>
310
301
        </listitem>
311
302
      </varlistentry>
312
 
 
 
303
      
313
304
      <varlistentry>
314
305
        <term><option>--version</option></term>
315
306
        <term><option>-V</option></term>
321
312
      </varlistentry>
322
313
    </variablelist>
323
314
  </refsect1>
324
 
 
 
315
  
325
316
  <refsect1 id="overview">
326
317
    <title>OVERVIEW</title>
327
318
    <xi:include href="../overview.xml"/>
336
327
      <filename>/etc/crypttab</filename>, but it would then be
337
328
      impossible to enter a password for the encrypted root disk at
338
329
      the console, since this program does not read from the console
339
 
      at all.  This is why a separate plugin does that, which will be
340
 
      run in parallell to this one by the plugin runner.
 
330
      at all.  This is why a separate plugin runner (<citerefentry>
 
331
      <refentrytitle>plugin-runner</refentrytitle>
 
332
      <manvolnum>8mandos</manvolnum></citerefentry>) is used to run
 
333
      both this program and others in in parallel,
 
334
      <emphasis>one</emphasis> of which will prompt for passwords on
 
335
      the system console.
341
336
    </para>
342
337
  </refsect1>
343
338
  
350
345
      program will exit with a non-zero exit status only if a critical
351
346
      error occurs.  Otherwise, it will forever connect to new
352
347
      <application>Mandos</application> servers as they appear, trying
353
 
      to get a decryptable password.
 
348
      to get a decryptable password and print it.
354
349
    </para>
355
350
  </refsect1>
356
351
  
364
359
    </para>
365
360
  </refsect1>
366
361
  
367
 
  <refsect1 id="file">
 
362
  <refsect1 id="files">
368
363
    <title>FILES</title>
369
364
    <variablelist>
370
365
      <varlistentry>
389
384
<!--     <para> -->
390
385
<!--     </para> -->
391
386
<!--   </refsect1> -->
392
 
 
 
387
  
393
388
  <refsect1 id="example">
394
389
    <title>EXAMPLE</title>
395
390
    <para>
409
404
    </informalexample>
410
405
    <informalexample>
411
406
      <para>
412
 
        Search for Mandos servers on another interface:
 
407
        Search for Mandos servers (and connect to them) using another
 
408
        interface:
413
409
      </para>
414
410
      <para>
415
411
        <!-- do not wrap this line -->
418
414
    </informalexample>
419
415
    <informalexample>
420
416
      <para>
421
 
        Run in debug mode, and use a custom key directory:
 
417
        Run in debug mode, and use a custom key:
422
418
      </para>
423
419
      <para>
424
 
        <!-- do not wrap this line -->
425
 
        <userinput>&COMMANDNAME; --debug --keydir keydir</userinput>
 
420
 
 
421
<!-- do not wrap this line -->
 
422
<userinput>&COMMANDNAME; --debug --pubkey keydir/pubkey.txt --seckey keydir/seckey.txt</userinput>
 
423
 
426
424
      </para>
427
425
    </informalexample>
428
426
    <informalexample>
429
427
      <para>
430
 
        Run in debug mode, with a custom key directory, and do not use
431
 
        Zeroconf to locate a server; connect directly to the IPv6
432
 
        address <quote><systemitem class="ipaddress"
 
428
        Run in debug mode, with a custom key, and do not use Zeroconf
 
429
        to locate a server; connect directly to the IPv6 address
 
430
        <quote><systemitem class="ipaddress"
433
431
        >2001:db8:f983:bd0b:30de:ae4a:71f2:f672</systemitem></quote>,
434
432
        port 4711, using interface eth2:
435
433
      </para>
436
434
      <para>
437
435
 
438
436
<!-- do not wrap this line -->
439
 
<userinput>&COMMANDNAME; --debug --keydir keydir --connect 2001:db8:f983:bd0b:30de:ae4a:71f2:f672:4711 --interface eth2</userinput>
 
437
<userinput>&COMMANDNAME; --debug --pubkey keydir/pubkey.txt --seckey keydir/seckey.txt --connect 2001:db8:f983:bd0b:30de:ae4a:71f2:f672:4711 --interface eth2</userinput>
440
438
 
441
439
      </para>
442
440
    </informalexample>
443
441
  </refsect1>
444
 
 
 
442
  
445
443
  <refsect1 id="security">
446
444
    <title>SECURITY</title>
447
445
    <para>
448
446
      This program is set-uid to root, but will switch back to the
449
 
      original user and group after bringing up the network interface.
 
447
      original (and presumably non-privileged) user and group after
 
448
      bringing up the network interface.
450
449
    </para>
451
450
    <para>
452
451
      To use this program for its intended purpose (see <xref
466
465
      The only remaining weak point is that someone with physical
467
466
      access to the client hard drive might turn off the client
468
467
      computer, read the OpenPGP keys directly from the hard drive,
469
 
      and communicate with the server.  The defense against this is
470
 
      that the server is supposed to notice the client disappearing
471
 
      and will stop giving out the encrypted data.  Therefore, it is
472
 
      important to set the timeout and checker interval values tightly
473
 
      on the server.  See <citerefentry><refentrytitle
 
468
      and communicate with the server.  To safeguard against this, the
 
469
      server is supposed to notice the client disappearing and stop
 
470
      giving out the encrypted data.  Therefore, it is important to
 
471
      set the timeout and checker interval values tightly on the
 
472
      server.  See <citerefentry><refentrytitle
474
473
      >mandos</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
475
474
    </para>
476
475
    <para>
477
 
      <emphasis>Note</emphasis>: This makes it impossible to have
478
 
      <application >Mandos</application> clients which dual-boot to
479
 
      another operating system which does <emphasis>not</emphasis> run
480
 
      a <application>Mandos</application> client.
 
476
      It will also help if the checker program on the server is
 
477
      configured to request something from the client which can not be
 
478
      spoofed by someone else on the network, unlike unencrypted
 
479
      <acronym>ICMP</acronym> echo (<quote>ping</quote>) replies.
 
480
    </para>
 
481
    <para>
 
482
      <emphasis>Note</emphasis>: This makes it completely insecure to
 
483
      have <application >Mandos</application> clients which dual-boot
 
484
      to another operating system which is <emphasis>not</emphasis>
 
485
      trusted to keep the initial <acronym>RAM</acronym> disk image
 
486
      confidential.
481
487
    </para>
482
488
  </refsect1>
483
 
 
 
489
  
484
490
  <refsect1 id="see_also">
485
491
    <title>SEE ALSO</title>
486
492
    <para>
 
493
      <citerefentry><refentrytitle>cryptsetup</refentrytitle>
 
494
      <manvolnum>8</manvolnum></citerefentry>,
 
495
      <citerefentry><refentrytitle>crypttab</refentrytitle>
 
496
      <manvolnum>5</manvolnum></citerefentry>,
487
497
      <citerefentry><refentrytitle>mandos</refentrytitle>
488
498
      <manvolnum>8</manvolnum></citerefentry>,
489
499
      <citerefentry><refentrytitle>password-prompt</refentrytitle>
491
501
      <citerefentry><refentrytitle>plugin-runner</refentrytitle>
492
502
      <manvolnum>8mandos</manvolnum></citerefentry>
493
503
    </para>
494
 
    <itemizedlist>
495
 
      <listitem><para>
496
 
        <ulink url="http://www.zeroconf.org/">Zeroconf</ulink>
497
 
      </para></listitem>
498
 
      
499
 
      <listitem><para>
500
 
        <ulink url="http://www.avahi.org/">Avahi</ulink>
501
 
      </para></listitem>
502
 
      
503
 
      <listitem><para>
504
 
        <ulink
505
 
            url="http://www.gnu.org/software/gnutls/">GnuTLS</ulink>
506
 
      </para></listitem>
507
 
      
508
 
      <listitem><para>
509
 
        <ulink
510
 
        url="http://www.gnupg.org/related_software/gpgme/"
511
 
        >GPGME</ulink>
512
 
      </para></listitem>
513
 
      
514
 
      <listitem><para>
515
 
        <citation>RFC 4880: <citetitle>OpenPGP Message
516
 
        Format</citetitle></citation>
517
 
      </para></listitem>
518
 
      
519
 
      <listitem><para>
520
 
        <citation>RFC 5081: <citetitle>Using OpenPGP Keys for
521
 
        Transport Layer Security</citetitle></citation>
522
 
      </para></listitem>
523
 
      
524
 
      <listitem><para>
525
 
        <citation>RFC 4291: <citetitle>IP Version 6 Addressing
526
 
        Architecture</citetitle>, section 2.5.6, Link-Local IPv6
527
 
        Unicast Addresses</citation>
528
 
      </para></listitem>
529
 
    </itemizedlist>
 
504
    <variablelist>
 
505
      <varlistentry>
 
506
        <term>
 
507
          <ulink url="http://www.zeroconf.org/">Zeroconf</ulink>
 
508
        </term>
 
509
        <listitem>
 
510
          <para>
 
511
            Zeroconf is the network protocol standard used for finding
 
512
            Mandos servers on the local network.
 
513
          </para>
 
514
        </listitem>
 
515
      </varlistentry>
 
516
      <varlistentry>
 
517
        <term>
 
518
          <ulink url="http://www.avahi.org/">Avahi</ulink>
 
519
        </term>
 
520
      <listitem>
 
521
        <para>
 
522
          Avahi is the library this program calls to find Zeroconf
 
523
          services.
 
524
        </para>
 
525
      </listitem>
 
526
      </varlistentry>
 
527
      <varlistentry>
 
528
        <term>
 
529
          <ulink url="http://www.gnu.org/software/gnutls/"
 
530
          >GnuTLS</ulink>
 
531
        </term>
 
532
      <listitem>
 
533
        <para>
 
534
          GnuTLS is the library this client uses to implement TLS for
 
535
          communicating securely with the server, and at the same time
 
536
          send the public OpenPGP key to the server.
 
537
        </para>
 
538
      </listitem>
 
539
      </varlistentry>
 
540
      <varlistentry>
 
541
        <term>
 
542
          <ulink url="http://www.gnupg.org/related_software/gpgme/"
 
543
                 >GPGME</ulink>
 
544
        </term>
 
545
        <listitem>
 
546
          <para>
 
547
            GPGME is the library used to decrypt the OpenPGP data sent
 
548
            by the server.
 
549
          </para>
 
550
        </listitem>
 
551
      </varlistentry>
 
552
      <varlistentry>
 
553
        <term>
 
554
          RFC 4291: <citetitle>IP Version 6 Addressing
 
555
          Architecture</citetitle>
 
556
        </term>
 
557
        <listitem>
 
558
          <variablelist>
 
559
            <varlistentry>
 
560
              <term>Section 2.2: <citetitle>Text Representation of
 
561
              Addresses</citetitle></term>
 
562
              <listitem><para/></listitem>
 
563
            </varlistentry>
 
564
            <varlistentry>
 
565
              <term>Section 2.5.5.2: <citetitle>IPv4-Mapped IPv6
 
566
              Address</citetitle></term>
 
567
              <listitem><para/></listitem>
 
568
            </varlistentry>
 
569
            <varlistentry>
 
570
            <term>Section 2.5.6, <citetitle>Link-Local IPv6 Unicast
 
571
            Addresses</citetitle></term>
 
572
            <listitem>
 
573
              <para>
 
574
                This client uses IPv6 link-local addresses, which are
 
575
                immediately usable since a link-local addresses is
 
576
                automatically assigned to a network interfaces when it
 
577
                is brought up.
 
578
              </para>
 
579
            </listitem>
 
580
            </varlistentry>
 
581
          </variablelist>
 
582
        </listitem>
 
583
      </varlistentry>
 
584
      <varlistentry>
 
585
        <term>
 
586
          RFC 4346: <citetitle>The Transport Layer Security (TLS)
 
587
          Protocol Version 1.1</citetitle>
 
588
        </term>
 
589
      <listitem>
 
590
        <para>
 
591
          TLS 1.1 is the protocol implemented by GnuTLS.
 
592
        </para>
 
593
      </listitem>
 
594
      </varlistentry>
 
595
      <varlistentry>
 
596
        <term>
 
597
          RFC 4880: <citetitle>OpenPGP Message Format</citetitle>
 
598
        </term>
 
599
      <listitem>
 
600
        <para>
 
601
          The data received from the server is binary encrypted
 
602
          OpenPGP data.
 
603
        </para>
 
604
      </listitem>
 
605
      </varlistentry>
 
606
      <varlistentry>
 
607
        <term>
 
608
          RFC 5081: <citetitle>Using OpenPGP Keys for Transport Layer
 
609
          Security</citetitle>
 
610
        </term>
 
611
      <listitem>
 
612
        <para>
 
613
          This is implemented by GnuTLS and used by this program so
 
614
          that OpenPGP keys can be used.
 
615
        </para>
 
616
      </listitem>
 
617
      </varlistentry>
 
618
    </variablelist>
530
619
  </refsect1>
531
 
 
532
620
</refentry>
 
621
 
533
622
<!-- Local Variables: -->
534
623
<!-- time-stamp-start: "<!ENTITY TIMESTAMP [\"']" -->
535
624
<!-- time-stamp-end: "[\"']>" -->