Merge commit 'jrollins/master'
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Wed, 18 Feb 2009 04:33:55 +0000 (23:33 -0500)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Wed, 18 Feb 2009 04:33:55 +0000 (23:33 -0500)
man/man8/monkeysphere-authentication.8
man/man8/monkeysphere-host.8
packaging/debian/monkeysphere.postinst
src/monkeysphere-authentication
src/monkeysphere-host
src/share/ma/add_certifier
src/share/ma/setup
src/share/mh/import_key
src/share/mh/set_expire

index 9b8baa9960d7d1940c9519dd6b25ebe38682bc7a..4d453d377337ed74452cad84b6eab9a13e7d9a43 100644 (file)
@@ -21,13 +21,7 @@ authentication.
 
 .SH SUBCOMMANDS
 
-\fBmonkeysphere-authentication\fP takes various subcommands.
-.TP
-.B setup
-Setup the server for Monkeysphere user authentication.  This command
-is idempotent, which means it can be run multiple times to make sure
-the setup is correct, without adversely affecting existing setups.
-`s' may be used in place of `setup'.
+\fBmonkeysphere-authentication\fP takes various subcommands:
 .TP
 .B update-users [ACCOUNT]...
 Rebuild the monkeysphere-controlled authorized_keys files.  For each
@@ -62,6 +56,21 @@ Instruct system to ignore user identity certifications made by KEYID.
 List key IDs trusted by the system to certify user identities.  `c'
 may be used in place of `list-id-certifiers'.
 .TP
+.B help
+Output a brief usage summary.  `h' or `?' may be used in place of
+`help'.
+.TP
+.B version
+show version number
+
+Other commands:
+.TP
+.B setup
+Setup the server for Monkeysphere user authentication.  This command
+is idempotent and run automatically by the other commands, and should
+therefore not usually need to be run manually.  `s' may be used in
+place of `setup'.
+.TP
 .B diagnostics
 Review the state of the server with respect to authentication.  `d'
 may be used in place of `diagnostics'.
@@ -72,13 +81,6 @@ authentication "sphere" keyring.  This takes a single argument
 (multiple gpg arguments need to be quoted).  Use this command with
 caution, as modifying the authentication sphere keyring can affect ssh
 user authentication.
-.TP
-.B help
-Output a brief usage summary.  `h' or `?' may be used in place of
-`help'.
-.TP
-.B version
-show version number
 
 .SH SETUP USER AUTHENTICATION
 
index 062f0aadb68aa8e76cf56b736888c63a2538aad1..330b6107a20a28c2b4c2ce355039e62b90fa8a41 100644 (file)
@@ -23,6 +23,14 @@ connection authentication.
 
 \fBmonkeysphere-host\fP takes various subcommands:
 .TP
+.B import-key [NAME[:PORT]]
+Import a pem-encoded ssh secret host key, from stdin.  NAME[:PORT] is
+used to specify the hostname (and port) used in the user ID of the new
+OpenPGP key.  If NAME is not specified, then the system
+fully-qualified domain name will be used (ie. `hostname -f').  If PORT
+is not specified, the no port is added to the user ID, which means
+port 22 is assumed.  `i' may be used in place of `import-key'.
+.TP
 .B show-key
 Output information about host's OpenPGP and SSH keys.  `s' may be used
 in place of `show-key'.
@@ -61,13 +69,15 @@ Revoke the host's OpenPGP key.  `r' may be used in place of
 Publish the host's OpenPGP key to the keyserver.  `p' may be used in
 place of `publish-key'.
 .TP
-.B import-key [NAME[:PORT]]
-Import a pem-encoded ssh secret host key, from stdin.  NAME[:PORT] is
-used to specify the hostname (and port) used in the user ID of the new
-OpenPGP key.  If NAME is not specified, then the system
-fully-qualified domain name will be used (ie. `hostname -f').  If PORT
-is not specified, the no port is added to the user ID, which means
-port 22 is assumed.  `i' may be used in place of `import-key'.
+.B help
+Output a brief usage summary.  `h' or `?' may be used in place of
+`help'.
+.TP
+.B version
+show version number
+
+
+Other commands:
 .TP
 .B diagnostics
 Review the state of the monkeysphere server host key and report on
@@ -75,13 +85,6 @@ suggested changes.  Among other checks, this includes making sure
 there is a valid host key, that the key is published, that the sshd
 configuration points to the right place, etc.  `d' may be used in
 place of `diagnostics'.
-.TP
-.B help
-Output a brief usage summary.  `h' or `?' may be used in place of
-`help'.
-.TP
-.B version
-show version number
 
 .SH SETUP HOST AUTHENTICATION
 
index c697ae22d39f3327cfaddae5031fd4e8e7dda9e9..8e7977173b71fd370194613c7ebdfe88ac3e50be 100755 (executable)
@@ -17,8 +17,8 @@ if ! getent passwd monkeysphere >/dev/null ; then
        monkeysphere
 fi
 
-# import the host ssh key into the monkeysphere, with no expiration
-# FIXME: figure out how to do this best
+# setup monkeysphere authentication
+monkeysphere-authentication setup
 
 # dh_installdeb will replace this with shell code automatically
 # generated by other debhelper scripts.
index c349e6fc93c3c062e07b0d5c4f60b3ca2f7daf07..8a4146f36c9df4a2fa1f417d29dd9532a6117c1e 100755 (executable)
@@ -14,6 +14,9 @@
 ########################################################################
 set -e
 
+# set the pipefail option so pipelines fail on first command failure
+set -o pipefail
+
 PGRM=$(basename $0)
 
 SYSSHAREDIR=${MONKEYSPHERE_SYSSHAREDIR:-"/usr/share/monkeysphere"}
@@ -52,7 +55,6 @@ usage: $PGRM <subcommand> [options] [args]
 Monkeysphere authentication admin tool.
 
 subcommands:
- setup (s)                           setup monkeysphere user authentication
  update-users (u) [USER]...          update user authorized_keys files
  add-id-certifier (c+) KEYID         import and tsign a certification key
    --domain (-n) DOMAIN                limit ID certifications to DOMAIN
@@ -95,19 +97,12 @@ core_fingerprint() {
        | grep ^fpr: | cut -d: -f10
 }
 
-# fail if authentication has not been setup
-check_no_setup() {
-    # FIXME: what is the right test to do here?
-    [ -d "$MADATADIR" ] \
-       || failure "This host appears to have not yet been set up for Monkeysphere authentication.
-Please run 'monkeysphere-authentication setup' first."
-}
-
 # export signatures from core to sphere
 gpg_core_sphere_sig_transfer() {
     log debug "exporting core local sigs to sphere..."
     gpg_core --export-options export-local-sigs --export | \
-       gpg_sphere "--import-options import-local-sigs --import"
+       gpg_sphere "--import-options import-local-sigs --import" \
+       2>&1 | log debug
 }
 
 ########################################################################
@@ -164,40 +159,47 @@ shift
 case $COMMAND in
     'setup'|'setup'|'s')
        source "${MASHAREDIR}/setup"
-       setup "$@"
+       setup
        ;;
 
     'update-users'|'update-user'|'u')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/update_users"
        update_users "$@"
        ;;
 
     'add-identity-certifier'|'add-id-certifier'|'add-certifier'|'c+')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/add_certifier"
        add_certifier "$@"
        ;;
 
     'remove-identity-certifier'|'remove-id-certifier'|'remove-certifier'|'c-')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/remove_certifier"
        remove_certifier "$@"
        ;;
 
     'list-identity-certifiers'|'list-id-certifiers'|'list-certifiers'|'list-certifier'|'c')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/list_certifiers"
-       list_certifiers "$@"
+       list_certifiers
        ;;
 
     'diagnostics'|'d')
+       source "${MASHAREDIR}/setup"
+       setup
        source "${MASHAREDIR}/diagnostics"
        diagnostics
        ;;
 
     'gpg-cmd')
-       check_no_setup
+       source "${MASHAREDIR}/setup"
+       setup
        gpg_sphere "$@"
        ;;
 
index 11121cc8731f2fd56c533af472dba6a31256ddcf..3bee007f8d47067c623301a9e3b10cef7b71f3e9 100755 (executable)
@@ -80,7 +80,8 @@ gpg_host() {
     GNUPGHOME="$GNUPGHOME_HOST" gpg "$@"
 }
 
-# command to list the info about the host key, in colon format
+# command to list the info about the host key, in colon format, to
+# stdout
 gpg_host_list() {
     gpg_host --list-keys --with-colons --fixed-list-mode \
        --with-fingerprint --with-fingerprint \
@@ -92,8 +93,8 @@ gpg_host_list() {
 # FIXME: should we supress all the edit script spew?  or pipe it
 # through log debug?
 gpg_host_edit() {
-    gpg_host --quiet --command-fd 0 --edit-key \
-       "0x${HOST_FINGERPRINT}!" "$@"
+    gpg_host --quiet --command-fd 0 --no-tty --edit-key \
+       "0x${HOST_FINGERPRINT}!" "$@" 2>&1 | log debug
 }
 
 # export the host public key to the monkeysphere gpg pub key file
index 54ea67334fdb94fb749a6a106f41fbd454b9a19c..d34f0dec08d44ce8f1a362cefc8090a543ebf49f 100644 (file)
@@ -151,14 +151,15 @@ EOF
 # core ltsigns the newly imported certifier key
 log debug "executing core ltsign script..."
 if echo "$ltsignCommand" | \
-    gpg_core --quiet --command-fd 0 --edit-key "0x${fingerprint}!" ; then
+    gpg_core --quiet --command-fd 0 --no-tty --edit-key "0x${fingerprint}!" \
+     2>&1 | log debug ; then
 
     # transfer the new sigs back to the sphere keyring
     gpg_core_sphere_sig_transfer
 
     # update the sphere trustdb
     log debug "updating sphere trustdb..."
-    gpg_sphere "--check-trustdb"
+    gpg_sphere "--check-trustdb" 2>&1 | log debug
 
     log info "Identity certifier added."
 else
index f59187b8447bbfab4205e4e4bcfe2a4328f12eae..a17e4f2cad07e18515fbfa30071a06526f85165b 100644 (file)
@@ -59,7 +59,7 @@ EOF
        log debug "generating monkeysphere authentication trust core key ($CORE_KEYLENGTH bits)..."
        PEM2OPENPGP_USAGE_FLAGS=certify \
            PEM2OPENPGP_NEWKEY=$CORE_KEYLENGTH pem2openpgp "$CORE_UID" \
-           | gpg_core --import \
+           | gpg_core --import 2>&1 | log debug \
            || failure "Could not import new key for Monkeysphere authentication trust core"
 
        # get fingerprint of core key.  should definitely not be empty at this point
@@ -75,17 +75,17 @@ EOF
 
     # export the core key to the sphere keyring
     log debug "exporting core pub key to sphere keyring..."
-    gpg_core --export | gpg_sphere --import
+    gpg_core --quiet --export | gpg_sphere "--quiet --import"
 
     # ensure that the authentication sphere checker has absolute ownertrust on the expected key.
     log debug "setting ultimate owner trust on core key in gpg_sphere..."
-    printf "%s:6:\n" "$CORE_FPR" | gpg_sphere --import-ownertrust
-    gpg_sphere --export-ownertrust | log debug
+    printf "%s:6:\n" "$CORE_FPR" | gpg_sphere "--quiet --import-ownertrust"
+    gpg_sphere "--export-ownertrust" 2>&1 | log debug
 
     # check the owner trust
     log debug "checking gpg_sphere owner trust set properly..."
     local ORIG_TRUST
-    if ORIG_TRUST=$(gpg_sphere --export-ownertrust | grep '^[^#]') ; then
+    if ORIG_TRUST=$(gpg_sphere "--quiet --export-ownertrust" | grep '^[^#]') ; then
        if [ "${CORE_FPR}:6:" != "$ORIG_TRUST" ] ; then
            failure "Monkeysphere authentication trust sphere should explicitly trust the core.  It does not have proper ownertrust settings."
        fi
@@ -98,7 +98,7 @@ EOF
     # our preferences are reasonable (i.e. 3 marginal OR 1 fully
     # trusted certifications are sufficient to grant full validity.
     log debug "checking trust model for authentication ..."
-    local TRUST_MODEL=$(gpg_sphere "--with-colons --fixed-list-mode --list-keys" \
+    local TRUST_MODEL=$(gpg_sphere "--quiet --with-colons --fixed-list-mode --list-keys" \
        | head -n1 | grep "^tru:" | cut -d: -f3,6,7)
     log debug "sphere trust model: $TRUST_MODEL"
     if [ "$TRUST_MODEL" != '1:3:1' ] ; then
index d14fc13dbf0d485d5ebe47f4c683078d2d1d72a3..557bb7faaee6712942bfe5bdd0eb5b195013c505 100644 (file)
@@ -46,7 +46,7 @@ chmod 700 "${GNUPGHOME_HOST}"
 log verbose "importing ssh key..."
 # translate ssh key to a private key
 PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "$userID" \
-    | gpg_host --import
+    | gpg_host --import 2>&1 | log debug
 
 # load the new host fpr into the fpr variable.  this is so we can
 # create the gpg pub key file.  we have to do this from the secret key
@@ -57,6 +57,8 @@ load_fingerprint_secret
 # export to gpg public key to file
 update_gpg_pub_file
 
+log info "host key imported:"
+
 # show info about new key
 show_key
 
index 14d2501b6928d5a87f33989cfb3825be2b3bf53f..ae7c13a7089dedaa4baf37bc520f3053a6f137e9 100644 (file)
@@ -30,7 +30,7 @@ else
     log debug "extending without prompting."
 fi
 
-log info "setting host key expiration to ${extendTo}:"
+log info "setting host key expiration to ${extendTo}."
 
 log debug "executing host expire script..."
 gpg_host_edit expire <<EOF