diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/basic | 144 | ||||
-rw-r--r-- | tests/etc/ssh/sshd_config | 23 | ||||
-rw-r--r-- | tests/home/testuser/.gnupg/gpg.conf | 5 | ||||
-rw-r--r-- | tests/home/testuser/.gnupg/pubring.gpg | bin | 405 -> 1153 bytes | |||
-rw-r--r-- | tests/home/testuser/.gnupg/random_seed | bin | 600 -> 600 bytes | |||
-rw-r--r-- | tests/home/testuser/.gnupg/secring.gpg | bin | 737 -> 775 bytes | |||
-rw-r--r-- | tests/home/testuser/.gnupg/trustdb.gpg | bin | 1280 -> 1360 bytes | |||
-rw-r--r-- | tests/home/testuser/.monkeysphere/authorized_user_ids | 1 | ||||
-rw-r--r-- | tests/home/testuser/.monkeysphere/monkeysphere.conf | 3 | ||||
-rwxr-xr-x | tests/home/testuser/.ssh/askpass | 6 | ||||
-rw-r--r-- | tests/home/testuser/.ssh/config | 10 | ||||
-rwxr-xr-x | tests/home/testuser/.ssh/proxy-command | 8 |
12 files changed, 157 insertions, 43 deletions
diff --git a/tests/basic b/tests/basic index b9ae8f1..2befac2 100755 --- a/tests/basic +++ b/tests/basic @@ -2,38 +2,46 @@ # Tests to ensure that the monkeysphere is working -# Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net> -# Date: 2008-09-13 13:40:15-0400 +# Authors: +# Daniel Kahn Gillmor <dkg@fifthhorseman.net> +# Jameson Rollins <jrollins@fifthhorseman.net> +# Copyright: 2008 +# License: GPL v3 or later -# these tests might be best run under fakeroot, particularly the -# "server-side" tests. Using fakeroot, they should be able to be run +# these tests should all be able to # as a non-privileged user. -# NOTE: these tests have *not* themselves been tested yet -# (2008-09-13). Please exercise with caution! +# all subcommands in this script should complete without failure: +set -e -# these tests assume a commonly-trusted "Admin's key", a fake key -# permanently stored in ./home/admin/.gnupg: +# gpg command for test admin user gpgadmin() { - GNUPGHOME="$TESTDIR"/home/admin/.gnupg gpg "$@" + GNUPGHOME="$TEMPDIR"/admin/.gnupg gpg "$@" } +failed_cleanup() { +# FIXME: can we be more verbose here? + echo 'FAILED!' + read -p "press enter to cleanup and remove tmp:" + + cleanup +} # cleanup: cleanup() { - # FIXME: stop the sshd process + if ( ps "$SSHD_PID" >/dev/null ) ; then + echo "### stopping still-running sshd..." + kill "$SSHD_PID" + fi - echo - echo "-- removing temp dir..." + echo "### removing temp dir..." rm -rf "$TEMPDIR" - # FIXME: how should we clear out the temporary $VARLIB? - - # FIXME: clear out ssh client config file and known hosts. + wait } ## setup trap -#trap cleanup EXIT +trap failed_cleanup EXIT ## set up some variables to ensure that we're operating strictly in ## the tests, not system-wide: @@ -42,6 +50,10 @@ export TESTDIR=$(pwd) # make temp dir TEMPDIR="$TESTDIR"/tmp +if [ -e "$TEMPDIR" ] ; then + echo "tempdir '$TEMPDIR' already exists." + exit 1 +fi mkdir "$TEMPDIR" # Use the local copy of executables first, instead of system ones. @@ -52,62 +64,108 @@ export MONKEYSPHERE_SYSDATADIR="$TEMPDIR" export MONKEYSPHERE_SYSCONFIGDIR="$TEMPDIR" export MONKEYSPHERE_SYSSHAREDIR="$TESTDIR"/../src export MONKEYSPHERE_MONKEYSPHERE_USER="$USER" +export MONKEYSPHERE_CHECK_KEYSERVER=false + +SSHD_CONFIG="$TEMPDIR"/sshd_config export SOCKET="$TEMPDIR"/ssh-socket +# copy in admin and testuser home to tmp +echo "### copying admin and testuser homes..." +cp -a "$TESTDIR"/home/admin "$TEMPDIR"/ +cp -a "$TESTDIR"/home/testuser "$TEMPDIR"/ + +cat <<EOF >> "$TEMPDIR"/testuser/.ssh/config +UserKnownHostsFile $TEMPDIR/testuser/.ssh/known_hosts +ProxyCommand $TEMPDIR/testuser/.ssh/proxy-command %h %p $SOCKET +EOF + +cat <<EOF >> "$TEMPDIR"/testuser/.monkeysphere/monkeysphere.conf +KNOWN_HOSTS=$TEMPDIR/testuser/.ssh/known_hosts +EOF + +# set up a simple default monkeysphere-server.conf +cat <<EOF >> "$TEMPDIR"/monkeysphere-server.conf +AUTHORIZED_USER_IDS="$TEMPDIR/testuser/.monkeysphere/authorized_user_ids" +EOF + ### SERVER TESTS -# create the temp gnupghome directories +# setup monkeysphere temp gnupghome directories mkdir -p -m 750 "$MONKEYSPHERE_SYSDATADIR"/gnupg-host mkdir -p -m 700 "$MONKEYSPHERE_SYSDATADIR"/gnupg-authentication +mkdir -p -m 700 "$MONKEYSPHERE_SYSDATADIR"/authorized_keys +cat <<EOF > "$MONKEYSPHERE_SYSDATADIR"/gnupg-authentication/gpg.conf +primary-keyring ${MONKEYSPHERE_SYSDATADIR}/gnupg-authentication/pubring.gpg +keyring ${MONKEYSPHERE_SYSDATADIR}/gnupg-host/pubring.gpg +EOF # create a new host key -echo "-- generating server key..." -echo | monkeysphere-server gen-key --length 1024 --expire 0 +echo "### generating server key..." +# add gpg.conf with quick-random +echo "quick-random" >> "$MONKEYSPHERE_SYSCONFIGDIR"/gnupg-host/gpg.conf +echo | monkeysphere-server gen-key --length 1024 --expire 0 testhost +# remove the gpg.conf +rm "$MONKEYSPHERE_SYSCONFIGDIR"/gnupg-host/gpg.conf HOSTKEYID=$( monkeysphere-server show-key | tail -n1 | cut -f3 -d\ ) # certify it with the "Admin's Key". # (this would normally be done via keyservers) -echo "-- certifying server key..." +echo "### certifying server key..." monkeysphere-server gpg-authentication-cmd "--armor --export $HOSTKEYID" | gpgadmin --import -gpgadmin --sign-key "$HOSTKEYID" +echo y | gpgadmin --command-fd 0 --sign-key "$HOSTKEYID" # FIXME: how can we test publish-key without flooding junk into the # keyservers? -# indicate that the "Admin's" key is an identity certifier for the -# host - -echo "-- adding admin as certifier..." -monkeysphere-server add-identity-certifier "$TESTDIR"/home/admin/.gnupg/pubkey.gpg +# add admin as identity certifier for testhost +echo "### adding admin as certifier..." +echo y | monkeysphere-server add-identity-certifier "$TEMPDIR"/admin/.gnupg/pubkey.gpg +# initialize base sshd_config +cp etc/ssh/sshd_config "$SSHD_CONFIG" # write the sshd_config -cat <<EOF > "$TEMPDIR"/sshd_config +cat <<EOF >> "$SSHD_CONFIG" HostKey ${MONKEYSPHERE_SYSDATADIR}/ssh_host_rsa_key +AuthorizedKeysFile ${MONKEYSPHERE_SYSDATADIR}/authorized_keys/%u EOF -# launch sshd with the new host key. -echo "-- starting sshd..." -socat EXEC:'/usr/sbin/sshd -f '"$TEMPDIR"/sshd_config' -i -d -d -d -D -e' "UNIX-LISTEN:${TEMPDIR/socket}" & - +# launch test sshd with the new host key. +echo "### starting sshd..." +socat EXEC:"/usr/sbin/sshd -f ${SSHD_CONFIG} -i -D -e" "UNIX-LISTEN:${SOCKET}" 2> "$TEMPDIR"/sshd.log & +export SSHD_PID=$! ### TESTUSER TESTS -# copy testuser home directory into temp dir -cp -r "$TESTDIR"/home/testuser "$TEMPDIR"/ - # generate an auth subkey for the test user -echo "-- generating key for testuser..." -MONKEYSPHERE_GNUPGHOME="$TEMPDIR"/testuser/.gnupg \ - monkeysphere gen-subkey --expire 0 +echo "### generating key for testuser..." +export GNUPGHOME="$TEMPDIR"/testuser/.gnupg +export SSH_ASKPASS="$TEMPDIR"/testuser/.ssh/askpass +export MONKEYSPHERE_HOME="$TEMPDIR"/testuser/.monkeysphere + +monkeysphere gen-subkey --expire 0 + +# add server key to testuser keychain +echo "### export server key to testuser..." +gpgadmin --armor --export "$HOSTKEYID" | gpg --import + +# teach the "server" about the testuser's key +echo "### export testuser key to server..." +gpg --export testuser | monkeysphere-server gpg-authentication-cmd --import +echo "### update server authorized_keys file for this testuser..." +monkeysphere-server update-users "$USER" -# connect to sample sshd host key, using monkeysphere to verify the -# identity before connection. +# connect to test sshd, using monkeysphere-ssh-proxycommand to verify +# the identity before connection. This should work in both directions! +echo "### testuser connecting to sshd socket..." -## FIXME: implement! +ssh-agent bash -c \ + "monkeysphere subkey-to-ssh-agent && ssh -F $TEMPDIR/testuser/.ssh/config testhost true" -# create a new client side key, certify it with the "CA", use it to -# log in. +trap - EXIT -## FIXME: implement! +echo +echo "Monkeysphere basic tests completed successfully!" +echo +cleanup diff --git a/tests/etc/ssh/sshd_config b/tests/etc/ssh/sshd_config new file mode 100644 index 0000000..82c72b9 --- /dev/null +++ b/tests/etc/ssh/sshd_config @@ -0,0 +1,23 @@ +# Base sshd_config for monkeysphere test + +# HostKey and AuthorizedKeysFile lines will be added dynamically +# during test. + +# goal: minimal ssh configuration to do public key authentication. + +Protocol 2 +PubkeyAuthentication yes +HostbasedAuthentication no +PermitEmptyPasswords no +ChallengeResponseAuthentication no +PasswordAuthentication no +KerberosAuthentication no +GSSAPIAuthentication no +X11Forwarding no +PrintMotd no +PrintLastLog no +TCPKeepAlive no +AcceptEnv LANG LC_* +UsePAM no +UsePrivilegeSeparation no +LogLevel DEBUG diff --git a/tests/home/testuser/.gnupg/gpg.conf b/tests/home/testuser/.gnupg/gpg.conf new file mode 100644 index 0000000..f65c71b --- /dev/null +++ b/tests/home/testuser/.gnupg/gpg.conf @@ -0,0 +1,5 @@ +# command to avoid depleting the system entropy +quick-random +# other options +verify-options show-uid-validity +list-options show-uid-validity diff --git a/tests/home/testuser/.gnupg/pubring.gpg b/tests/home/testuser/.gnupg/pubring.gpg Binary files differindex 8cea4b5..bef6b42 100644 --- a/tests/home/testuser/.gnupg/pubring.gpg +++ b/tests/home/testuser/.gnupg/pubring.gpg diff --git a/tests/home/testuser/.gnupg/random_seed b/tests/home/testuser/.gnupg/random_seed Binary files differindex 40ab6a6..230b315 100644 --- a/tests/home/testuser/.gnupg/random_seed +++ b/tests/home/testuser/.gnupg/random_seed diff --git a/tests/home/testuser/.gnupg/secring.gpg b/tests/home/testuser/.gnupg/secring.gpg Binary files differindex a5519a6..26cf230 100644 --- a/tests/home/testuser/.gnupg/secring.gpg +++ b/tests/home/testuser/.gnupg/secring.gpg diff --git a/tests/home/testuser/.gnupg/trustdb.gpg b/tests/home/testuser/.gnupg/trustdb.gpg Binary files differindex e67f5c8..bc946df 100644 --- a/tests/home/testuser/.gnupg/trustdb.gpg +++ b/tests/home/testuser/.gnupg/trustdb.gpg diff --git a/tests/home/testuser/.monkeysphere/authorized_user_ids b/tests/home/testuser/.monkeysphere/authorized_user_ids new file mode 100644 index 0000000..4b51eaf --- /dev/null +++ b/tests/home/testuser/.monkeysphere/authorized_user_ids @@ -0,0 +1 @@ +Monkeysphere Test Suite Test User (DO NOT USE!!!) <testuser@example.net> diff --git a/tests/home/testuser/.monkeysphere/monkeysphere.conf b/tests/home/testuser/.monkeysphere/monkeysphere.conf new file mode 100644 index 0000000..59cc0cf --- /dev/null +++ b/tests/home/testuser/.monkeysphere/monkeysphere.conf @@ -0,0 +1,3 @@ +# monkeysphere config for testuser in monkeysphere test suite + +# KNOWN_HOSTS will be dynamically defined after creation. diff --git a/tests/home/testuser/.ssh/askpass b/tests/home/testuser/.ssh/askpass new file mode 100755 index 0000000..5b7b059 --- /dev/null +++ b/tests/home/testuser/.ssh/askpass @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +# phony/automatic askpass, to provide the passphrase for the +# testuser's GPG key. + +echo abc123 diff --git a/tests/home/testuser/.ssh/config b/tests/home/testuser/.ssh/config new file mode 100644 index 0000000..1da2344 --- /dev/null +++ b/tests/home/testuser/.ssh/config @@ -0,0 +1,10 @@ +# ssh config file for testuser for monkeysphere test suite. +Host * +PasswordAuthentication no +KbdInteractiveAuthentication no +RSAAuthentication no +GSSAPIAuthentication no +StrictHostKeyChecking yes +LogLevel DEBUG + +# UserKnownHostsFile and ProxyCommand will be filled in dynamically. diff --git a/tests/home/testuser/.ssh/proxy-command b/tests/home/testuser/.ssh/proxy-command new file mode 100755 index 0000000..21c66fa --- /dev/null +++ b/tests/home/testuser/.ssh/proxy-command @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# simple socket-based proxy-command wrapper for testing monkeysphere. + +# pass this thing the host, the port, and the socket. + +monkeysphere-ssh-proxycommand --no-connect "$1" "$2" && \ +exec socat STDIO UNIX:"$3" |