X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=src%2Fmonkeysphere-server;h=19b457fed71ea65cf34fa85234f22181619ea1e6;hb=4c39f00752f9a57329aff481d33aed24bfc301a4;hp=b7e82d80079045e6f78c64e9f2460e93a15368a1;hpb=c8b42c1d77005ab3f41d20cc2524f4307086ec4f;p=monkeysphere.git diff --git a/src/monkeysphere-server b/src/monkeysphere-server index b7e82d8..19b457f 100755 --- a/src/monkeysphere-server +++ b/src/monkeysphere-server @@ -25,7 +25,7 @@ DATE=$(date -u '+%FT%T') unset GREP_OPTIONS # default return code -ERR=0 +RETURN=0 ######################################################################## # FUNCTIONS @@ -33,11 +33,11 @@ ERR=0 usage() { cat < [args] +usage: $PGRM [options] [args] MonkeySphere server admin tool. subcommands: - update-users (u) [USER]... update users authorized_keys files + update-users (u) [USER]... update user authorized_keys files gen-key (g) [HOSTNAME] generate gpg key for the server -l|--length BITS key length in bits (2048) @@ -47,12 +47,14 @@ subcommands: publish-key (p) publish server's host key to keyserver add-identity-certifier (a) KEYID import and tsign a certification key - -n|--domain DOMAIN domain of certifier () - -t|--trust TRUST trust level of certifier ('full') + -n|--domain DOMAIN limit ID certifications to IDs in DOMAIN () + -t|--trust TRUST trust level of certifier (full) -d|--depth DEPTH trust depth for certifier (1) remove-identity-certifier (r) KEYID remove a certification key list-identity-certifiers (l) list certification keys + gpg-authentication-cmd CMD gnupg-authentication command + help (h,?) this help EOF @@ -123,7 +125,7 @@ update_users() { for uname in $unames ; do # check all specified users exist if ! getent passwd "$uname" >/dev/null ; then - error "----- unknown user '$uname' -----" + log "----- unknown user '$uname' -----" continue fi @@ -141,6 +143,16 @@ update_users() { log "----- user: $uname -----" + if ! check_key_file_permissions "$uname" "$AUTHORIZED_USER_IDS" ; then + log "Improper permissions on authorized_user_ids file." + continue + fi + + if ! check_key_file_permissions "$uname" "$RAW_AUTHORIZED_KEYS" ; then + log "Improper permissions on authorized_keys file." + continue + fi + # make temporary directory TMPDIR=$(mktemp -d) @@ -176,7 +188,7 @@ update_users() { # user su_monkeysphere_user \ ". ${SHARE}/common; process_authorized_user_ids $TMP_AUTHORIZED_USER_IDS" - ERR="$?" + RETURN="$?" fi # add user-controlled authorized_keys file path if specified @@ -205,11 +217,56 @@ update_users() { # generate server gpg key gen_key() { + local keyType + local keyLength + local keyUsage + local keyExpire + local revoker local hostName local userID local keyParameters local fingerprint + # set default key parameter values + keyType="RSA" + keyLength="2048" + keyUsage="auth" + keyExpire= + revoker= + + # get options + TEMP=$(getopt -o l:e:r: -l length:,expire:,revoker: -n "$PGRM" -- "$@") + + if [ $? != 0 ] ; then + exit 1 + fi + + # Note the quotes around `$TEMP': they are essential! + eval set -- "$TEMP" + + while true ; do + case "$1" in + -l|--length) + keyLength="$2" + shift 2 + ;; + -e|--expire) + keyExpire="$2" + shift 2 + ;; + -r|--revoker) + revoker="$2" + shift 2 + ;; + --) + shift + ;; + *) + break + ;; + esac + done + hostName=${1:-$(hostname --fqdn)} userID="ssh://${hostName}" @@ -218,12 +275,8 @@ gen_key() { failure "Key for '$userID' already exists" fi - # set key variables - KEY_TYPE="RSA" - KEY_LENGTH=${KEY_LENGTH:="2048"} - KEY_USAGE="auth" # prompt about key expiration if not specified - if [ -z "$KEY_EXPIRE" ] ; then + if [ -z "$keyExpire" ] ; then cat <m = key expires in n months y = key expires in n years EOF - while [ -z "$KEY_EXPIRE" ] ; do - read -p "Key is valid for? (0) " KEY_EXPIRE - if ! test_gpg_expire ${KEY_EXPIRE:=0} ; then + while [ -z "$keyExpire" ] ; do + read -p "Key is valid for? (0) " keyExpire + if ! test_gpg_expire ${keyExpire:=0} ; then echo "invalid value" - unset KEY_EXPIRE + unset keyExpire fi done - elif ! test_gpg_expire "$KEY_EXPIRE" ; then - failure "invalid key expiration value '$KEY_EXPIRE'." + elif ! test_gpg_expire "$keyExpire" ; then + failure "invalid key expiration value '$keyExpire'." fi # set key parameters keyParameters=$(cat <