#!/bin/sh
#
# Die addvpnuser erstellt die VPN-Files und den Benutzer Ordner an dem hinterlegten '$DIR' Verzeichnis. Version 2.0
# Version 2.0
#
# Einfach im Terminal "addvpnuser test" eingeben und User Test wird angelegt und VPN-Files erstellt.
# "addvpnuser test leoschen" loescht die VPN-Files, nur VPN-Files! Odener im '$DIR' Verzeichnis wird nach abfrage geloescht!
# "addvpnuser test deaktiv" VPN-Files werden deaktiviert
# "addvpnuser test aktiv" VPN-Files werden wieder aktiviert
# Auslesen der Funktionen / Variablen
. /etc/functions_cron_pack.conf
if [ "$(id -u)" -ne 0 ]; then
exec sudo $0 $1 $2
exit 0
fi
export OPENSSL_CONF=/etc/openvpn/$VPNdir/openssl.cnf
cd /etc/openvpn/$VPNdir
help_txt() {
echo "\033[34mUm User anzulegen, z.b $0 hansmeier adduser"
echo "Um User zu loeschen, z.b: $0 hansmeier deluser"
echo "Um User nur VPN maeßig zu deaktivieren, z.b: $0 hansmeier deaktivuser"
echo "Um VPN User wieder zu aktivieren, z.b: $0 hansmeier aktivuser\033[0m"
}
aktivuser() {
if [ `ls | wc -w` -le 2 ]; then
echo "\033[31mServer Zertifikate wurden noch nicht erstellt! Bitte erst 'addvpnuser {username} adduser' eingeben!\033[0m"
exit
fi
if [ $(grep -c "^R.*$1" index.txt) -gt 0 ]; then
awk '/^R.*CN='$1'/ { print "echo \"\033[31mUser '$1' ist gesperrt, wird jetzt entsperrt\033[0m\";"; print "sed -i \""NR"s/^R/V/;"NR"s/"$3"//\" "FILENAME;}' index.txt | bash
_error $? "Es ist ein Fehler aufgetreten beim aktivieren von VPN User $1" && exit
else
echo "\033[31mUser $1 is nicht gesperrt!\033[0m"
grep "^V.*$1" index.txt
exit 0
fi
openssl ca -gencrl -out crl.pem && sleep 2
_error $? "Es ist ein Fehler aufgetreten beim erstellen von crl.pem" && exit
echo "\033[31m$1 wurde wieder aktiviert!\033[0m"
exit 0
}
deaktivuser() {
if [ `ls | wc -w` -le 2 ]; then
echo "\033[31mServer Zertifikate wurden noch nicht erstellt! Bitte erst 'addvpnuser {username} adduser' eingeben!\033[0m"
exit
fi
if [ $(grep -c "^R.*$1" index.txt) -gt 0 ]; then
echo "\033[31mVPN-User $1 wurde schon deaktivert!\033[0m" && sleep 10
else
echo "\033[31mVPN-User $1 wird deaktiviert\033[0m" && sleep 10
fi
openssl ca -revoke $1.crt
_error $? "Es ist ein Fehler aufgetreten beim Sperren von VPN User $1" && exit
openssl ca -gencrl -out crl.pem && sleep 2
_error $? "Es ist ein Fehler aufgetreten beim erstellen von crl.pem" && exit
echo "\033[31mVPN-User $1 wurde deaktiviert\033[0m" && sleep 10
}
makeca() {
echo "\033[31mScript wird zum erstenmal verwendent, erstelle Master und Server Zertifikat!\033[0m" && sleep 10
touch serial && echo 01 > serial
touch index.txt
echo "\033[31mCA certificate wird gleich erstellt, bitte pass phrase merken. Wird benoetigt um User zu deaktivieren!\033[0m"
echo "\033[31mDruecken Sie eine beliebige Taste, um fortzufahren!\033[0m"
stty raw -echo
of=/dev/null bs=1 count=1 2> /dev/null}
stty echo -raw
./CA.pl -newca
echo "\033[31mErstelle Master Zertifikat\033[0m"
echo "\033[31mKann eine weile dauern\033[0m" && sleep 10
openssl req -days 3650 -nodes -new -x509 -keyout ca.key -out ca.crt && sleep 2
if [ "$?" = 1 ]; then
_error 1 "Es ist ein Fehler aufgetreten beim erstellen vom Master Zertifikat"
rm -r demoCA serial index.txt *.key *.crt
exit
fi
openssl dhparam -out dh2048.pem 2048
if [ "$?" = 1 ]; then
_error 1 "Es ist ein Fehler aufgetreten beim erstellen vom Master Zertifikat"
rm -r demoCA serial index.txt *.key *.crt *.pem
exit
fi
echo "\033[31mErstelle Server Zertifikat\033[0m" && sleep 10
echo "\033[31mCommonName muss gleich sein wie username, ganz wichtig!!!\033[0m"
echo "\033[31mDruecken Sie eine beliebige Taste, um fortzufahren!\033[0m"
stty raw -echo
of=/dev/null bs=1 count=1 2> /dev/null}
stty echo -raw
openssl req -days 3650 -nodes -new -keyout server.key -out server.csr && sleep 2
openssl ca -days 3650 -out server.crt -in server.csr
if [ "$?" = 1 ]; then
_error 1 "Es ist ein Fehler aufgetreten beim erstellen vom Server Zertifikat"
rm -r demoCA serial index.txt *.key *.crt *.pem *.csr
exit
fi
openssl ca -gencrl -out crl.pem
if [ "$?" = 1 ]; then
_error 1 "Es ist ein Fehler aufgetreten beim erstellen von crl.pem"
exit
fi
echo "\033[31mSetzte Zertifikat Angaben in /etc/openvpn/server.conf\033[0m" && sleep 10
sed -i '$a\ca "/etc/openvpn/'"$VPNdir"'/ca.crt"' /etc/openvpn/server.conf
sed -i '$a\cert "/etc/openvpn/'"$VPNdir"'/server.crt"' /etc/openvpn/server.conf
sed -i '$a\key "/etc/openvpn/'"$VPNdir"'/server.key"' /etc/openvpn/server.conf
sed -i '$a\dh "/etc/openvpn/'"$VPNdir"'/dh2048.pem"' /etc/openvpn/server.conf
sed -i '$a\crl-verify "/etc/openvpn/'"$VPNdir"'/crl.pem"' /etc/openvpn/server.conf
echo "\033[31m/etc/openvpn/server.conf wird geoeffnet zum pruefen ob ca.crt; server.crt; server.key; dh2048.pem und crl.pem gesetzt worden sind!\033[0m" && sleep 10
echo "\033[31mDruecken Sie eine beliebige Taste, um fortzufahren!\033[0m"
stty raw -echo
of=/dev/null bs=1 count=1 2> /dev/null}
stty echo -raw
nano /etc/openvpn/server.conf
}
deluser() {
if [ `ls | wc -w` -le 2 ]; then
echo "\033[31mServer Zertifikate wurden noch nicht erstellt! Bitte erst 'addvpnuser {username} adduser' eingeben!\033[0m"
exit
fi
echo "\033[31mSoll VPN Files von $1 deaktiviert werden[JN]?\033[0m"
read deaktiv
case $deaktiv in
[YyJj]* ) deaktivuser $1 ;;
[Nn]* ) echo "\033[31mVPN Files von $1 bleiben aktiv!\033[0m" ;;
*) echo "\033[31mOrdner von $1 bleibt erhalten!\033[0m" ;;
esac
echo "\033[31mSoll Benutzer Ordner $DIR/$1 geloescht werden [JN]?\033[0m"
read del
if [ -d "$DIR/$1" ]; then
case $del in
[YyJj]* ) echo "\033[31mOrdner $DIR/$1 wird geloescht!\033[0m" && rm -r $DIR/$1 ;;
[Nn]* ) echo "\033[31mOrdner von $1 bleibt erhalten!\033[0m" ;;
*) echo "\033[31mOrdner von $1 bleibt erhalten!\033[0m" ;;
esac
else
echo "\033[31m$DIR/$1 wurde schon geloescht!\033[0m"
fi
exit 0
}
adduser() {
if [ `ls | wc -w` -le 2 ]; then
makeca
fi
if [ ! -d "$DIR/$1" ]; then
mkdir -p $DIR/$1/{CC,cronM,VPN}
mkdir -p $DIR/$1/{OS,Scripte}/files
chmod -R 755 $DIR/$1
else
echo "\033[31m$DIR/$1 ist schon vorhanden\033[0m" && sleep 5
fi
for datei in `find -name "$1.*" -print 2>/dev/null`
do
VPNkey=1
done
if [ "$VPNkey" = 1 ]; then
echo "\033[31m$1 VPN Files schon angelegt unter /etc/openvpn/$VPNdir\033[0m"
else
echo "\033[31mErstelle $1 Zertifikat\033[0m" && sleep 10
echo "\033[31mCommonName muss gleich sein wie username, ganz wichtig!!!\033[0m"
echo "\033[31mDruecken Sie eine beliebige Taste, um fortzufahren!\033[0m"
stty raw -echo
of=/dev/null bs=1 count=1 2> /dev/null}
stty echo -raw
openssl req -days 3650 -nodes -new -keyout $1.key -out $1.csr && sleep 2
openssl ca -days 3650 -out $1.crt -in $1.csr
if [ "$?" = 1 ]; then
_error 1 "Es ist ein Fehler aufgetreten beim erstellen von $1 Zertifikat"
rm -r $1.*
exit
fi
echo "\033[31mKopiere VPN-Files nach $DIR/VPN/files\033[0m" && sleep 10
cp -R $1.* $DIR/VPN/files/
_error $? "Es ist ein Fehler aufgetreten beim kopieren von $1 Zertifikate nach $DIR/VPN/files"
cp -R ca.crt $DIR/VPN/files/alle/
_error $? "Es ist ein Fehler aufgetreten beim kopieren von ca.crt Zertifikate nach $DIR/VPN/alle"
fi
}
case $2 in
deluser)
deluser $1
;;
aktivuser)
aktivuser $1
;;
deaktivuser)
deaktivuser $1
exit 0
;;
adduser)
adduser $1
;;
*)
help_txt
exit 0
;;
esac
echo "\033[31mFertig! Druecken Sie eine beliebige Taste, um dass Script zu beenden!\033[0m"
stty raw -echo
dd of=/dev/null bs=1 count=1 2> /dev/null
stty echo -raw
exit 0