Repository: incubator-guacamole-manual
Updated Branches:
  refs/heads/master 3ef53a014 -> b2c261add


GUACAMOLE-136: Document use of the Duo multi-factor authentication extension.


Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/commit/b6c9c437
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/tree/b6c9c437
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/diff/b6c9c437

Branch: refs/heads/master
Commit: b6c9c437930560d99791ff5efe14cf5cedab1064
Parents: d1a691d
Author: Michael Jumper <[email protected]>
Authored: Thu Jan 19 23:44:52 2017 -0800
Committer: Michael Jumper <[email protected]>
Committed: Fri Jan 20 11:44:17 2017 -0800

----------------------------------------------------------------------
 src/chapters/duo-auth.xml                    | 228 ++++++++++++++++++++++
 src/chapters/images/duo-add-guacamole.png    | Bin 0 -> 6788 bytes
 src/chapters/images/duo-auth-factor-1.png    | Bin 0 -> 12418 bytes
 src/chapters/images/duo-auth-factor-2.png    | Bin 0 -> 28876 bytes
 src/chapters/images/duo-copy-details.png     | Bin 0 -> 19979 bytes
 src/chapters/images/duo-rename-guacamole.png | Bin 0 -> 13827 bytes
 src/gug.xml                                  |   1 +
 7 files changed, 229 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/b6c9c437/src/chapters/duo-auth.xml
----------------------------------------------------------------------
diff --git a/src/chapters/duo-auth.xml b/src/chapters/duo-auth.xml
new file mode 100644
index 0000000..11d3870
--- /dev/null
+++ b/src/chapters/duo-auth.xml
@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<chapter xml:id="duo-auth" xmlns="http://docbook.org/ns/docbook"; version="5.0" 
xml:lang="en"
+    xmlns:xi="http://www.w3.org/2001/XInclude"; 
xmlns:xlink="http://www.w3.org/1999/xlink";>
+    <title>Duo two-factor authentication</title>
+    <indexterm>
+        <primary>Duo</primary>
+    </indexterm>
+    <para>Guacamole supports Duo as a second authentication factor, layered on 
top of any other
+        authentication extension, including those available from the main 
project website. The Duo
+        authentication extension allows users to be additionally verified 
against the Duo service
+        before the authentication process is allowed to succeed.</para>
+    <important>
+        <para>This chapter involves modifying the contents of 
<varname>GUACAMOLE_HOME</varname> -
+            the Guacamole configuration directory. If you are unsure where
+                <varname>GUACAMOLE_HOME</varname> is located on your system, 
please consult <xref
+                linkend="configuring-guacamole"/> before proceeding.</para>
+    </important>
+    <section xml:id="duo-architecture">
+        <title>How Duo works with Guacamole</title>
+        <para>Guacamole provides support for Duo as a second authentication 
factor. To make use of
+            the Duo authentication extension, some other authentication 
mechanism will need be
+            configured, as well. When a user attempts to log into Guacamole, 
other installed
+            authentication methods will be queried first:</para>
+        <informalfigure>
+            <mediaobject>
+                <imageobject>
+                    <imagedata fileref="images/duo-auth-factor-1.png" 
format="PNG"
+                        contentwidth="2in"/>
+                </imageobject>
+            </mediaobject>
+        </informalfigure>
+        <para>Only after authentication has succeeded with one of those 
methods will Guacamole reach
+            out to Duo to obtain additional verification of user 
identity:</para>
+        <informalfigure>
+            <mediaobject>
+                <imageobject>
+                    <imagedata fileref="images/duo-auth-factor-2.png" 
format="PNG"
+                        contentwidth="4in"/>
+                </imageobject>
+            </mediaobject>
+        </informalfigure>
+        <para>If both the initial authentication attempt and verification 
through Duo succeed, the
+            user will be allowed in. If either mechanism fails, access to 
Guacamole is
+            denied.</para>
+    </section>
+    <section xml:id="duo-downloading">
+        <title>Downloading the Duo extension</title>
+        <para>The Duo authentication extension is available separately from 
the main
+                <filename>guacamole.war</filename>. The link for this and all 
other
+            officially-supported and compatible extensions for a particular 
version of Guacamole are
+            provided on the release notes for that version. You can find the 
release notes for
+            current versions of Guacamole here: <link
+                xlink:href="http://guacamole.incubator.apache.org/releases/";
+                >http://guacamole.incubator.apache.org/releases/</link>.</para>
+        <para>The Duo authentication extension is packaged as a 
<filename>.tar.gz</filename> file
+            containing only the extension itself,
+                <filename>guacamole-auth-duo-0.9.11-incubating.jar</filename>, 
which must ultimately
+            be placed in <filename>GUACAMOLE_HOME/extensions</filename>.</para>
+    </section>
+    <section xml:id="installing-duo-auth">
+        <title>Installing Duo authentication</title>
+        <para>Guacamole extensions are self-contained 
<filename>.jar</filename> files which are
+            located within the <filename>GUACAMOLE_HOME/extensions</filename> 
directory. To install
+            the Duo authentication extension, you must:</para>
+        <procedure>
+            <step>
+                <para>Create the 
<filename>GUACAMOLE_HOME/extensions</filename> directory, if it
+                    does not already exist.</para>
+            </step>
+            <step>
+                <para>Copy 
<filename>guacamole-auth-duo-0.9.11-incubating.jar</filename> within
+                        <filename>GUACAMOLE_HOME/extensions</filename>.</para>
+            </step>
+            <step>
+                <para>Configure Guacamole to use Duo authentication, as 
described below.</para>
+            </step>
+        </procedure>
+        <important>
+            <para>You will need to restart Guacamole by restarting your 
servlet container in order
+                to complete the installation. Doing this will disconnect all 
active users, so be
+                sure that it is safe to do so prior to attempting 
installation. If you do not
+                configure the Duo authentication properly, Guacamole will not 
start up again until
+                the configuration is fixed.</para>
+        </important>
+        <section>
+            <title xml:id="duo-guac-config">Adding Guacamole to Duo</title>
+            <para>Duo does not provide a specific integration option for 
Guacamole, but Guacamole's
+                Duo extension uses Duo's generic authentication API. To use 
Guacamole with Duo, you
+                will need to add it as a new "Auth API" application from 
within the "Applications"
+                tab of the admin panel of your Duo account:</para>
+            <informalfigure>
+                <mediaobject>
+                    <imageobject>
+                        <imagedata fileref="images/duo-add-guacamole.png" 
format="PNG"
+                            contentwidth="6in"/>
+                    </imageobject>
+                </mediaobject>
+            </informalfigure>
+            <para>Within the settings of the newly-added application, rename 
the application to
+                something more representative than "Auth API". This 
application name is what will be
+                presented to your users when they are prompted by Duo for 
additional
+                authentication:</para>
+            <informalfigure>
+                <mediaobject>
+                    <imageobject>
+                        <imagedata fileref="images/duo-rename-guacamole.png" 
format="PNG"
+                            contentwidth="6in"/>
+                    </imageobject>
+                </mediaobject>
+            </informalfigure>
+            <para>Once you've finished adding Guacamole as an "Auth API" 
application, the
+                configuration information required to configure Guacamole is 
listed within the
+                application's "Details" section. You will need to copy the 
integration key, secret
+                key, and API hostname - they will later be specified within
+                    <filename>guacamole.properties</filename>:</para>
+            <informalfigure>
+                <mediaobject>
+                    <imageobject>
+                        <imagedata fileref="images/duo-copy-details.png" 
format="PNG"
+                            contentwidth="6in"/>
+                    </imageobject>
+                </mediaobject>
+            </informalfigure>
+        </section>
+        <section xml:id="guac-duo-config">
+            <title>Configuring Guacamole for Duo</title>
+            <indexterm>
+                <primary>configuring Duo</primary>
+            </indexterm>
+            <indexterm>
+                <primary>Duo</primary>
+                <secondary>configuration</secondary>
+            </indexterm>
+            <para>The application-specific configuration information retrieved 
from Duo must be
+                added to <filename>guacamole.properties</filename> to describe 
how Guacamole should
+                connect to the Duo service:</para>
+            <variablelist>
+                <varlistentry>
+                    <term><property>duo-api-hostname</property></term>
+                    <listitem>
+                        <para>The hostname of the Duo API endpoint to be used 
to verify user
+                            identities. This will usually be in the form
+                                    
"<uri>api-<replaceable>XXXXXXXX</replaceable>.duosecurity.com</uri>",
+                            where "<replaceable>XXXXXXXX</replaceable>" is 
some arbitrary
+                            alphanumeric value assigned by Duo. This value 
will have been generated
+                            by Duo when you added Guacamole as an "Auth API" 
application, and can be
+                            found within the application details in the "API 
hostname" field.
+                                <emphasis>This value is 
required.</emphasis></para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term><property>duo-integration-key</property></term>
+                    <listitem>
+                        <para>The integration key provided for Guacamole by 
Duo. This value will
+                            have been generated by Duo when you added 
Guacamole as an "Auth API"
+                            application, and can be found within the 
application details in the
+                            "Integration key" field. <emphasis>This value is 
required and must be
+                                EXACTLY 20 characters.</emphasis></para>
+                    </listitem>
+                </varlistentry>
+                <varlistentry>
+                    <term><property>duo-secret-key</property></term>
+                    <listitem>
+                        <para>The secret key provided for Guacamole by Duo. 
This value will have
+                            been generated by Duo when you added Guacamole as 
an "Auth API"
+                            application, and can be found within the 
application details in the
+                            "Secret key" field. <emphasis>This value is 
required and must be EXACTLY
+                                20 characters.</emphasis></para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+            <para>In addition to the above, <emphasis>you must also manually 
generate an
+                    "application key"</emphasis>. The application key is 
required by Duo's
+                authentication API, but is not provided by Duo. It is an 
arbitrary value meant to be
+                unique to each deployment of an application using their 
API.</para>
+            <variablelist>
+                <varlistentry>
+                    <term><property>duo-application-key</property></term>
+                    <listitem>
+                        <para>An arbitrary, random key which you manually 
generated for Guacamole.
+                                <emphasis>This value is required and must be 
AT LEAST 40
+                                characters.</emphasis></para>
+                    </listitem>
+                </varlistentry>
+            </variablelist>
+            <para>The application key can be generated with any method as long 
as it is sufficiently
+                random. There exist utilities which will do this for you, like
+                    <command>pwgen</command>:</para>
+            <informalexample>
+                <screen><prompt>$</prompt> <userinput>pwgen 40 1</userinput>
+<computeroutput>em1io4zievohneeseiwah0zie2raQuoo2ci5oBoo</computeroutput>
+<prompt>$</prompt></screen>
+            </informalexample>
+            <para>Alternatively, one quick and fairly portable way to do this 
is to use the
+                    <command>dd</command> utility to copy random bytes from 
the secure random device
+                    <filename>/dev/random</filename>, sending the data through 
a cryptographic hash
+                tool with a sufficiently-long result, like 
<command>sha256sum</command>:</para>
+            <informalexample>
+                <screen><prompt>$</prompt> <userinput>dd if=/dev/random 
count=1 | sha256sum</userinput>
+<computeroutput>5d16d6bb86da73e7d1abd3286b21dcf3b3e707532e64ceebc7a008350d0d485d
 -</computeroutput>
+<prompt>$</prompt></screen>
+            </informalexample>
+        </section>
+        <section xml:id="completing-duo-install">
+            <title>Completing the installation</title>
+            <para>Guacamole will only reread 
<filename>guacamole.properties</filename> and load
+                newly-installed extensions during startup, so your servlet 
container will need to be
+                restarted before Duo authentication will take effect. Restart 
your servlet container
+                and give the new authentication a try.</para>
+            <para>
+                <important>
+                    <para>You only need to restart your servlet container. 
<emphasis>You do not need
+                            to restart 
<package>guacd</package></emphasis>.</para>
+                    <para><package>guacd</package> is completely independent 
of the web application
+                        and does not deal with 
<filename>guacamole.properties</filename> or the
+                        authentication system in any way. Since you are 
already restarting the
+                        servlet container, restarting <package>guacd</package> 
as well technically
+                        won't hurt anything, but doing so is completely 
pointless.</para>
+                </important>
+            </para>
+            <para>If Guacamole does not come back online after restarting your 
servlet container,
+                check the logs. Problems in the configuration of the Duo 
extension may prevent
+                Guacamole from starting up, and any such errors will be 
recorded in the logs of your
+                servlet container.</para>
+        </section>
+    </section>
+</chapter>

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/b6c9c437/src/chapters/images/duo-add-guacamole.png
----------------------------------------------------------------------
diff --git a/src/chapters/images/duo-add-guacamole.png 
b/src/chapters/images/duo-add-guacamole.png
new file mode 100644
index 0000000..82ab175
Binary files /dev/null and b/src/chapters/images/duo-add-guacamole.png differ

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/b6c9c437/src/chapters/images/duo-auth-factor-1.png
----------------------------------------------------------------------
diff --git a/src/chapters/images/duo-auth-factor-1.png 
b/src/chapters/images/duo-auth-factor-1.png
new file mode 100644
index 0000000..3a82976
Binary files /dev/null and b/src/chapters/images/duo-auth-factor-1.png differ

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/b6c9c437/src/chapters/images/duo-auth-factor-2.png
----------------------------------------------------------------------
diff --git a/src/chapters/images/duo-auth-factor-2.png 
b/src/chapters/images/duo-auth-factor-2.png
new file mode 100644
index 0000000..8c35648
Binary files /dev/null and b/src/chapters/images/duo-auth-factor-2.png differ

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/b6c9c437/src/chapters/images/duo-copy-details.png
----------------------------------------------------------------------
diff --git a/src/chapters/images/duo-copy-details.png 
b/src/chapters/images/duo-copy-details.png
new file mode 100644
index 0000000..d7faa7a
Binary files /dev/null and b/src/chapters/images/duo-copy-details.png differ

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/b6c9c437/src/chapters/images/duo-rename-guacamole.png
----------------------------------------------------------------------
diff --git a/src/chapters/images/duo-rename-guacamole.png 
b/src/chapters/images/duo-rename-guacamole.png
new file mode 100644
index 0000000..85412d7
Binary files /dev/null and b/src/chapters/images/duo-rename-guacamole.png differ

http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/b6c9c437/src/gug.xml
----------------------------------------------------------------------
diff --git a/src/gug.xml b/src/gug.xml
index 222ece3..cc84bec 100644
--- a/src/gug.xml
+++ b/src/gug.xml
@@ -160,6 +160,7 @@
         <xi:include href="chapters/configuring.xml"/>
         <xi:include href="chapters/jdbc-auth.xml"/>
         <xi:include href="chapters/ldap-auth.xml"/>
+        <xi:include href="chapters/duo-auth.xml"/>
         <xi:include href="chapters/noauth.xml"/>
         <xi:include href="chapters/using.xml"/>
         <xi:include href="chapters/administration.xml"/>

Reply via email to