/mandos/trunk

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

« back to all changes in this revision

Viewing changes to plugins.d/mandos-client.xml

  • Committer: Teddy Hogeborn
  • Date: 2008-11-09 06:40:29 UTC
  • mto: (24.1.113 mandos)
  • mto: This revision was merged to the branch mainline in revision 238.
  • Revision ID: teddy@fukt.bsnet.se-20081109064029-df71jpoce308cq3v
First steps of a D-Bus interface to the server.

* mandos: Also import "dbus.service".
  (Client): Inherit from "dbus.service.Object", which is a new-style
            class, so inheriting from "object" is no longer necessary.
  (Client.interface): New temporary variable which only exists during
                     class definition.

  (Client.getName, Client.getFingerprint): New D-Bus getter methods.
  (Client.setSecret): New D-Bus setter method.
  (Client._set_timeout): Emit D-Bus signal "TimeoutChanged".
  (Client.getTimeout): New D-Bus getter method.
  (Client.TimeoutChanged): New D-Bus signal.
  (Client._set_interval): Emit D-Bus signal "IntervalChanged".
  (Client.getInterval): New D-Bus getter method.
  (Client.intervalChanged): New D-Bus signal.
  (Client.__init__): Also call "dbus.service.Object.__init__".
  (Client.started): New boolean attribute.
  (Client.start, Client.stop): Update "self.started", and emit D-Bus
                               signal "StateChanged".
  (Client.StateChanged): New D-Bus signal.
  (Client.stop): Use "self.started" instead of misusing "self.secret".
                 Also simplify code by using "getattr" instead of
                 "hasattr".
  (Client.checker_callback): Emit D-Bus signal "CheckerCompleted".
  (Client.CheckerCompleted): New D-Bus signal.
  (Client.bumpTimeout): D-Bus method name for "bump_timeout".
  (Client.start_checker): Emit D-Bus signal "CheckerStarted".
  (Client.CheckerStarted): New D-Bus signal.
  (Client.checkerIsRunning): New D-Bus method.
  (Client.StopChecker): D-Bus method name for "stop_checker".
  (Client.still_valid): First check "self.started".
  (Client.stillValid): D-Bus method name for "still_valid".

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 "2008-10-03">
 
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>
36
37
    </copyright>
37
38
    <xi:include href="../legalnotice.xml"/>
38
39
  </refentryinfo>
39
 
 
 
40
  
40
41
  <refmeta>
41
42
    <refentrytitle>&COMMANDNAME;</refentrytitle>
42
43
    <manvolnum>8mandos</manvolnum>
45
46
  <refnamediv>
46
47
    <refname><command>&COMMANDNAME;</command></refname>
47
48
    <refpurpose>
48
 
      Client for mandos
 
49
      Client for <application>Mandos</application>
49
50
    </refpurpose>
50
51
  </refnamediv>
51
 
 
 
52
  
52
53
  <refsynopsisdiv>
53
54
    <cmdsynopsis>
54
55
      <command>&COMMANDNAME;</command>
55
56
      <group>
56
57
        <arg choice="plain"><option>--connect
57
 
        <replaceable>IPADDR</replaceable><literal>:</literal
 
58
        <replaceable>ADDRESS</replaceable><literal>:</literal
58
59
        ><replaceable>PORT</replaceable></option></arg>
59
60
        <arg choice="plain"><option>-c
60
 
        <replaceable>IPADDR</replaceable><literal>:</literal
 
61
        <replaceable>ADDRESS</replaceable><literal>:</literal
61
62
        ><replaceable>PORT</replaceable></option></arg>
62
63
      </group>
63
64
      <sbr/>
64
65
      <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
66
        <arg choice="plain"><option>--interface
73
67
        <replaceable>NAME</replaceable></option></arg>
74
68
        <arg choice="plain"><option>-i
120
114
      </group>
121
115
    </cmdsynopsis>
122
116
  </refsynopsisdiv>
123
 
 
 
117
  
124
118
  <refsect1 id="description">
125
119
    <title>DESCRIPTION</title>
126
120
    <para>
131
125
      network connectivity, Zeroconf to find servers, and TLS with an
132
126
      OpenPGP key to ensure authenticity and confidentiality.  It
133
127
      keeps running, trying all servers on the network, until it
134
 
      receives a satisfactory reply or a TERM signal is recieved.
 
128
      receives a satisfactory reply or a TERM signal is received.
135
129
    </para>
136
130
    <para>
137
131
      This program is not meant to be run directly; it is really meant
191
185
      </varlistentry>
192
186
      
193
187
      <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
188
        <term><option>--interface=
211
189
        <replaceable>NAME</replaceable></option></term>
212
190
        <term><option>-i
232
210
        <replaceable>FILE</replaceable></option></term>
233
211
        <listitem>
234
212
          <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>.
 
213
            OpenPGP public key file name.  The default name is
 
214
            <quote><filename>/conf/conf.d/mandos/pubkey.txt</filename
 
215
            ></quote>.
239
216
          </para>
240
217
        </listitem>
241
218
      </varlistentry>
242
 
 
 
219
      
243
220
      <varlistentry>
244
221
        <term><option>--seckey=<replaceable
245
222
        >FILE</replaceable></option></term>
247
224
        <replaceable>FILE</replaceable></option></term>
248
225
        <listitem>
249
226
          <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>.
 
227
            OpenPGP secret key file name.  The default name is
 
228
            <quote><filename>/conf/conf.d/mandos/seckey.txt</filename
 
229
            ></quote>.
254
230
          </para>
255
231
        </listitem>
256
232
      </varlistentry>
263
239
                      xpointer="priority"/>
264
240
        </listitem>
265
241
      </varlistentry>
266
 
 
 
242
      
267
243
      <varlistentry>
268
244
        <term><option>--dh-bits=<replaceable
269
245
        >BITS</replaceable></option></term>
309
285
          </para>
310
286
        </listitem>
311
287
      </varlistentry>
312
 
 
 
288
      
313
289
      <varlistentry>
314
290
        <term><option>--version</option></term>
315
291
        <term><option>-V</option></term>
321
297
      </varlistentry>
322
298
    </variablelist>
323
299
  </refsect1>
324
 
 
 
300
  
325
301
  <refsect1 id="overview">
326
302
    <title>OVERVIEW</title>
327
303
    <xi:include href="../overview.xml"/>
336
312
      <filename>/etc/crypttab</filename>, but it would then be
337
313
      impossible to enter a password for the encrypted root disk at
338
314
      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.
 
315
      at all.  This is why a separate plugin runner (<citerefentry>
 
316
      <refentrytitle>plugin-runner</refentrytitle>
 
317
      <manvolnum>8mandos</manvolnum></citerefentry>) is used to run
 
318
      both this program and others in in parallel,
 
319
      <emphasis>one</emphasis> of which will prompt for passwords on
 
320
      the system console.
341
321
    </para>
342
322
  </refsect1>
343
323
  
350
330
      program will exit with a non-zero exit status only if a critical
351
331
      error occurs.  Otherwise, it will forever connect to new
352
332
      <application>Mandos</application> servers as they appear, trying
353
 
      to get a decryptable password.
 
333
      to get a decryptable password and print it.
354
334
    </para>
355
335
  </refsect1>
356
336
  
364
344
    </para>
365
345
  </refsect1>
366
346
  
367
 
  <refsect1 id="file">
 
347
  <refsect1 id="files">
368
348
    <title>FILES</title>
369
349
    <variablelist>
370
350
      <varlistentry>
389
369
<!--     <para> -->
390
370
<!--     </para> -->
391
371
<!--   </refsect1> -->
392
 
 
 
372
  
393
373
  <refsect1 id="example">
394
374
    <title>EXAMPLE</title>
395
375
    <para>
409
389
    </informalexample>
410
390
    <informalexample>
411
391
      <para>
412
 
        Search for Mandos servers on another interface:
 
392
        Search for Mandos servers (and connect to them) using another
 
393
        interface:
413
394
      </para>
414
395
      <para>
415
396
        <!-- do not wrap this line -->
418
399
    </informalexample>
419
400
    <informalexample>
420
401
      <para>
421
 
        Run in debug mode, and use a custom key directory:
 
402
        Run in debug mode, and use a custom key:
422
403
      </para>
423
404
      <para>
424
 
        <!-- do not wrap this line -->
425
 
        <userinput>&COMMANDNAME; --debug --keydir keydir</userinput>
 
405
 
 
406
<!-- do not wrap this line -->
 
407
<userinput>&COMMANDNAME; --debug --pubkey keydir/pubkey.txt --seckey keydir/seckey.txt</userinput>
 
408
 
426
409
      </para>
427
410
    </informalexample>
428
411
    <informalexample>
429
412
      <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"
 
413
        Run in debug mode, with a custom key, and do not use Zeroconf
 
414
        to locate a server; connect directly to the IPv6 address
 
415
        <quote><systemitem class="ipaddress"
433
416
        >2001:db8:f983:bd0b:30de:ae4a:71f2:f672</systemitem></quote>,
434
417
        port 4711, using interface eth2:
435
418
      </para>
436
419
      <para>
437
420
 
438
421
<!-- do not wrap this line -->
439
 
<userinput>&COMMANDNAME; --debug --keydir keydir --connect 2001:db8:f983:bd0b:30de:ae4a:71f2:f672:4711 --interface eth2</userinput>
 
422
<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
423
 
441
424
      </para>
442
425
    </informalexample>
443
426
  </refsect1>
444
 
 
 
427
  
445
428
  <refsect1 id="security">
446
429
    <title>SECURITY</title>
447
430
    <para>
 
431
      This program is set-uid to root, but will switch back to the
 
432
      original (and presumably non-privileged) user and group after
 
433
      bringing up the network interface.
 
434
    </para>
 
435
    <para>
 
436
      To use this program for its intended purpose (see <xref
 
437
      linkend="purpose"/>), the password for the root file system will
 
438
      have to be given out to be stored in a server computer, after
 
439
      having been encrypted using an OpenPGP key.  This encrypted data
 
440
      which will be stored in a server can only be decrypted by the
 
441
      OpenPGP key, and the data will only be given out to those
 
442
      clients who can prove they actually have that key.  This key,
 
443
      however, is stored unencrypted on the client side in its initial
 
444
      <acronym>RAM</acronym> disk image file system.  This is normally
 
445
      readable by all, but this is normally fixed during installation
 
446
      of this program; file permissions are set so that no-one is able
 
447
      to read that file.
 
448
    </para>
 
449
    <para>
 
450
      The only remaining weak point is that someone with physical
 
451
      access to the client hard drive might turn off the client
 
452
      computer, read the OpenPGP keys directly from the hard drive,
 
453
      and communicate with the server.  To safeguard against this, the
 
454
      server is supposed to notice the client disappearing and stop
 
455
      giving out the encrypted data.  Therefore, it is important to
 
456
      set the timeout and checker interval values tightly on the
 
457
      server.  See <citerefentry><refentrytitle
 
458
      >mandos</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
 
459
    </para>
 
460
    <para>
 
461
      It will also help if the checker program on the server is
 
462
      configured to request something from the client which can not be
 
463
      spoofed by someone else on the network, unlike unencrypted
 
464
      <acronym>ICMP</acronym> echo (<quote>ping</quote>) replies.
 
465
    </para>
 
466
    <para>
 
467
      <emphasis>Note</emphasis>: This makes it completely insecure to
 
468
      have <application >Mandos</application> clients which dual-boot
 
469
      to another operating system which is <emphasis>not</emphasis>
 
470
      trusted to keep the initial <acronym>RAM</acronym> disk image
 
471
      confidential.
448
472
    </para>
449
473
  </refsect1>
450
 
 
 
474
  
451
475
  <refsect1 id="see_also">
452
476
    <title>SEE ALSO</title>
453
477
    <para>
 
478
      <citerefentry><refentrytitle>cryptsetup</refentrytitle>
 
479
      <manvolnum>8</manvolnum></citerefentry>,
 
480
      <citerefentry><refentrytitle>crypttab</refentrytitle>
 
481
      <manvolnum>5</manvolnum></citerefentry>,
454
482
      <citerefentry><refentrytitle>mandos</refentrytitle>
455
483
      <manvolnum>8</manvolnum></citerefentry>,
456
484
      <citerefentry><refentrytitle>password-prompt</refentrytitle>
458
486
      <citerefentry><refentrytitle>plugin-runner</refentrytitle>
459
487
      <manvolnum>8mandos</manvolnum></citerefentry>
460
488
    </para>
461
 
    <itemizedlist>
462
 
      <listitem><para>
463
 
        <ulink url="http://www.zeroconf.org/">Zeroconf</ulink>
464
 
      </para></listitem>
465
 
      
466
 
      <listitem><para>
467
 
        <ulink url="http://www.avahi.org/">Avahi</ulink>
468
 
      </para></listitem>
469
 
      
470
 
      <listitem><para>
471
 
        <ulink
472
 
            url="http://www.gnu.org/software/gnutls/">GnuTLS</ulink>
473
 
      </para></listitem>
474
 
      
475
 
      <listitem><para>
476
 
        <ulink
477
 
        url="http://www.gnupg.org/related_software/gpgme/"
478
 
        >GPGME</ulink>
479
 
      </para></listitem>
480
 
      
481
 
      <listitem><para>
482
 
        <citation>RFC 4880: <citetitle>OpenPGP Message
483
 
        Format</citetitle></citation>
484
 
      </para></listitem>
485
 
      
486
 
      <listitem><para>
487
 
        <citation>RFC 5081: <citetitle>Using OpenPGP Keys for
488
 
        Transport Layer Security</citetitle></citation>
489
 
      </para></listitem>
490
 
      
491
 
      <listitem><para>
492
 
        <citation>RFC 4291: <citetitle>IP Version 6 Addressing
493
 
        Architecture</citetitle>, section 2.5.6, Link-Local IPv6
494
 
        Unicast Addresses</citation>
495
 
      </para></listitem>
496
 
    </itemizedlist>
 
489
    <variablelist>
 
490
      <varlistentry>
 
491
        <term>
 
492
          <ulink url="http://www.zeroconf.org/">Zeroconf</ulink>
 
493
        </term>
 
494
        <listitem>
 
495
          <para>
 
496
            Zeroconf is the network protocol standard used for finding
 
497
            Mandos servers on the local network.
 
498
          </para>
 
499
        </listitem>
 
500
      </varlistentry>
 
501
      <varlistentry>
 
502
        <term>
 
503
          <ulink url="http://www.avahi.org/">Avahi</ulink>
 
504
        </term>
 
505
      <listitem>
 
506
        <para>
 
507
          Avahi is the library this program calls to find Zeroconf
 
508
          services.
 
509
        </para>
 
510
      </listitem>
 
511
      </varlistentry>
 
512
      <varlistentry>
 
513
        <term>
 
514
          <ulink url="http://www.gnu.org/software/gnutls/"
 
515
          >GnuTLS</ulink>
 
516
        </term>
 
517
      <listitem>
 
518
        <para>
 
519
          GnuTLS is the library this client uses to implement TLS for
 
520
          communicating securely with the server, and at the same time
 
521
          send the public OpenPGP key to the server.
 
522
        </para>
 
523
      </listitem>
 
524
      </varlistentry>
 
525
      <varlistentry>
 
526
        <term>
 
527
          <ulink url="http://www.gnupg.org/related_software/gpgme/"
 
528
                 >GPGME</ulink>
 
529
        </term>
 
530
        <listitem>
 
531
          <para>
 
532
            GPGME is the library used to decrypt the OpenPGP data sent
 
533
            by the server.
 
534
          </para>
 
535
        </listitem>
 
536
      </varlistentry>
 
537
      <varlistentry>
 
538
        <term>
 
539
          RFC 4291: <citetitle>IP Version 6 Addressing
 
540
          Architecture</citetitle>
 
541
        </term>
 
542
        <listitem>
 
543
          <variablelist>
 
544
            <varlistentry>
 
545
              <term>Section 2.2: <citetitle>Text Representation of
 
546
              Addresses</citetitle></term>
 
547
              <listitem><para/></listitem>
 
548
            </varlistentry>
 
549
            <varlistentry>
 
550
              <term>Section 2.5.5.2: <citetitle>IPv4-Mapped IPv6
 
551
              Address</citetitle></term>
 
552
              <listitem><para/></listitem>
 
553
            </varlistentry>
 
554
            <varlistentry>
 
555
            <term>Section 2.5.6, <citetitle>Link-Local IPv6 Unicast
 
556
            Addresses</citetitle></term>
 
557
            <listitem>
 
558
              <para>
 
559
                This client uses IPv6 link-local addresses, which are
 
560
                immediately usable since a link-local addresses is
 
561
                automatically assigned to a network interfaces when it
 
562
                is brought up.
 
563
              </para>
 
564
            </listitem>
 
565
            </varlistentry>
 
566
          </variablelist>
 
567
        </listitem>
 
568
      </varlistentry>
 
569
      <varlistentry>
 
570
        <term>
 
571
          RFC 4346: <citetitle>The Transport Layer Security (TLS)
 
572
          Protocol Version 1.1</citetitle>
 
573
        </term>
 
574
      <listitem>
 
575
        <para>
 
576
          TLS 1.1 is the protocol implemented by GnuTLS.
 
577
        </para>
 
578
      </listitem>
 
579
      </varlistentry>
 
580
      <varlistentry>
 
581
        <term>
 
582
          RFC 4880: <citetitle>OpenPGP Message Format</citetitle>
 
583
        </term>
 
584
      <listitem>
 
585
        <para>
 
586
          The data received from the server is binary encrypted
 
587
          OpenPGP data.
 
588
        </para>
 
589
      </listitem>
 
590
      </varlistentry>
 
591
      <varlistentry>
 
592
        <term>
 
593
          RFC 5081: <citetitle>Using OpenPGP Keys for Transport Layer
 
594
          Security</citetitle>
 
595
        </term>
 
596
      <listitem>
 
597
        <para>
 
598
          This is implemented by GnuTLS and used by this program so
 
599
          that OpenPGP keys can be used.
 
600
        </para>
 
601
      </listitem>
 
602
      </varlistentry>
 
603
    </variablelist>
497
604
  </refsect1>
498
 
 
499
605
</refentry>
 
606
 
500
607
<!-- Local Variables: -->
501
608
<!-- time-stamp-start: "<!ENTITY TIMESTAMP [\"']" -->
502
609
<!-- time-stamp-end: "[\"']>" -->