Hobbykeys

From Hobbynet Admin Wiki
Revision as of 12:03, 18 April 2010 by Bas (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

wat is hobbykeys

Hobbykeys is een script dat via https een tar bestand ophaalt van www.hobby.nl met daarin de ssh keys van de beheerders.
Dit tar bestand wordt vervolgens gecontroleerd met gpg, of het bestand correct en niet aangepast is. Is alles OK dan zal het script in /root/.ssh een authorized_keys2 file maken met daarin alle ssh keys zodat de hobbynet beheerders kunnen inloggen. Gebruikers van de server kunnen eventueel hun eigen keys plaatsen in /root/.ssh/authorized_keys2.local

voor de gebruiker info

Gebruikers moet gebriefd worden dat ze hun ssh keys kunnen plaatsen in: /root/.ssh/authorized_keys2.local

waar staat het script

https://www.hobby.nl/keys/hobbykeys

hoe voegtoe / verwijder ik keys toe aan key ring

1. log in op monitor
2. wordt root
3. ga naar de directory /disk/site/hobbynet/www/keys
4. voegtoe of verwijder de key (let op key file naam moet altijd beginnen als volgt id_rs.pub. en mag geen punten bevatten)
5. verwijder oude key file door rm hobbykeys.tar hobbykeys.tar.sig
6. maak een nieuw tar file aan als volgt " tar -cf hobbykeys.tar id_rsa.pub.*"
7. draai su - om alle root variable te laden (altijd doen !!!!)
8. gpg --detach-sign hobbykeys.tar (geef het bekende ww in)
9. en klaar is kees

het script

met dank aan BIT

#!/bin/sh

umask 077
PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin"
SSHDIR="/root/.ssh"
DEFFILE="$SSHDIR/authorized_keys.local"
DEFFILE2="$SSHDIR/authorized_keys2.local"
KEYLOC="https://www.hobby.nl/keys/hobbykeys.tar"
KEYLOCSIG="https://www.hobby.nl/keys/hobbykeys.tar.sig"
GOODSIG="Good signature from \"Hobbynet Beheer <beheer@hobby.nl>"\"
HOBBYSIGID="705BACFF"
HOBBYKEYS="$SSHDIR/hobbykeys.tar"
HOBBYSIG="$SSHDIR/hobbykeys.tar.sig"
HOBBYOLD="$SSHDIR/hobbykeys.tar.old"
HOBBYSIGOLD="$SSHDIR/hobbykeys.sig.old"
GPGKEYSERVER="pgp.surfnet.nl"
GPGKEYSERVER2="pgp.mit.edu"


# Checken of de .ssh dir bestaat en zo niet, aanmaken.
[ ! -d ${SSHDIR} ] && mkdir -p ${SSHDIR}

# chdir naar de sshdir, exit als niet gelukt
cd ${SSHDIR} || exit 1


# Nu ff HOBBYKEYS verplaatsen, exit als niet gelukt
if [ -f ${HOBBYKEYS} ]; then
        mv -- ${HOBBYKEYS} ${HOBBYOLD} || exit 1
fi

if [ -f ${HOBBYSIG} ]; then
        mv -- ${HOBBYSIG} ${HOBBYSIGOLD} || exit 1
fi
# HOBBY ophalen vanaf $KELOC met wget
cd ${SSHDIR}
wget --quiet -t 20 ${KEYLOC}


if [ ! -f ${HOBBYKEYS} ]; then
        if [ -f ${HOBBYOLD} ]; then
                echo "Could not retrieve ${KEYLOC}, using old ${HOBBYKEYS}."
                mv -- ${HOBBYOLD} ${HOBBYKEYS}
        else
                echo "Could not retrieve ${KEYLOC}, bailing!"
                exit 127
        fi
fi
if [ ! -s ${HOBBYKEYS} ]; then
        echo "Retrieved ${KEYLOC}, but it's empty, using old ${HOBBYKEYS}."
        mv -- ${HOBBYSOLD} ${HOBBYKEYS}
fi

# Nu checken of GnuPG aanwezig is, en zo ja, dan $KEYLOCSIG downloaden

gpg --help 1>/dev/null 2>&1
if [ "$?" = "0" ]; then
        cd ${SSHDIR}
        wget --quiet -t 20 ${KEYLOCSIG}
        if [ ! -f ${HOBBYSIG} ]; then
                if [ -f ${HOBBYSIGOLD} ]; then
                       echo "Could not retrieve ${KEYLOCSIG}, using old ${HOBBYSIG}! " 1>&2
                        mv -- ${HOBBYSIGOLD} ${HOBBYSIG}
                else
                        echo "Could not retrieve ${KEYLOCSIG}!" 1>&2
                        exit 127
                fi
        fi

if [ -f ${HOBBYSIG} -a -f ${HOBBYOLD} ]; then

                # controleren of de pub key van HOBBYKEYS@gisnet.nl al aanwezig is

                gpg --list-keys ${HOBBYSIGID} 1>/dev/null 2>&1
                if [ "$?" = "2" ]; then
                        # pubkey niet aanwezig
                        # eerst de key van beheer@hobby.nl downrukken
                        echo  "HOBBYKEYS signature 0x${HOBBYSIGID} not found, now trying to retrieve from $GPGKEYSERVER1 or $GPGKEYSERVER2."
                        gpg --quiet --keyserver ${GPGKEYSERVER} --recv-keys ${HOBBYSIGID} 1>/dev/null 2>&1
                        if [ "$?" = "0" ]; then
                                echo "Succesfuly retrieved key ${HOBBYSIGID} from keyserver. "
                        else

                                echo "First attempt to retrieve the key failed. Let's try it one more time at ${GPGKEYSERVER2}."
                                gpg --quiet --keyserver ${GPGKEYSERVER2} --recv-keys ${HOBBYSIGID} 1>/dev/null 2>&1
                                if [ "$?" = "0" ]; then
                                        echo "Succesfuly retrieved key ${HOBBYSIGID} from keyserver. "
                                else
                                        echo "Failed to retrieve key ${HOBBYSIGID} from keyserver(s)! " 1>&2
                                        exit 127
                                fi
                        fi
                fi
                # nu hebben we de GISkeys en de GPG signed sig, en gaan we kijken of deze bij elkaar horen
                if ! [ "A$(gpg --quiet --verify ${HOBBYSIG} ${HOBBYKEYS} 2>&1 | grep "${GOODSIG}")" != "A" ]; then

                        # dat is niet het geval, exiten uit het prog dus
                        mv -- ${HOBBYKEYS} ${GISKTIKEYS}.BAD
                        echo "Wrong GPG signed HOBBYKEYS! " 1>&2
                        echo $GOODSIG
                        gpg --quiet --verify ${HOBBYSIG} ${HOBBYKEYS}

                        exit 127
                else
                        # nu hebben we een geldige versie vanHOBBYKEYS.tar
			echo ""
                        echo "${HOBBYKEYS} has been succesfully checked against GPG sig ${HOBBYSIG} "
                fi
        else
                # het is niet gelukt om deHOBBYKEYS.sig ($HOBBYSIG) te vinden en dus kanHOBBYKEYS niet GPG gevalideerd worden
                echo "${HOBBYKEYS} was *not* succesfully checked against GPG sig ${HOBBYSIG}! " 1>&2
                exit 127
        fi
fi

# HOBBYKEYS uitpakken
tar -xf ${HOBBYKEYS}

# ouwe zut dumpen, defaultkeys kopieren
# SSH1
[ -f ${SSHDIR}/authorized_keys ] && rm -- ${SSHDIR}/authorized_keys
[ -f ${DEFFILE} ] && cp -- ${DEFFILE} ${SSHDIR}/authorized_keys
# SSH2
[ -f ${SSHDIR}/authorized_keys2 ] && rm -- ${SSHDIR}/authorized_keys2
[ -f ${DEFFILE2} ] && cp -- ${DEFFILE2} ${SSHDIR}/authorized_keys2

# keys toevoegen die we hebben binnen geslurpt SSH1 SSH2
for i in `ls id_rsa.pub.*` ; do
        USER=`cat $i | cut -d" " -f3`
        cat ${SSHDIR}/$i >> ${SSHDIR}/authorized_keys2
        echo "Added key: ${USER}"
done


# clean up
rm -f -- id_rsa.pub.*