PPTP+RADIUS+LDAP VPN 3.
PPTP+RADIUS+LDAP összeállítással készített VPN 3. rész
LDAP Adatbázis
Az ldap adatbázisa karakteres felületről is kezelhető, de a módosítás és törlés, valamint a fa létrehozása grafikus felületről sokkal áttekinthetőbb. Erre a célre használható a PHPLDAPADMIN nevű webes alkalmazás is.
Használata előtt be kell jelentkezni. Bejelentkezéshez a felhasználónév összetettebb, mint más alkalmazásoknál. Itt a cn=admin,dc=company,dc=hu a felhasználónév.
VPN felhasználó hozzáadása a webes felületről nem könnyebb, mivel a sambaLMPassword és sambaNTPassword értékek leképzéséhez szükség van egy mkntpwd nevű programra, ami a /usr/bin könyvtárban található. A felhasználó hozzáadásának megkönnyítése érdekében készült egy script, ami ldap-useradd.sh nevet kapta. Ezt konzolból kell kiadni. A script egyszerű, csak felhasználónevet és jelszót fog kérdezni. A felhasználó hozzáadásának sikerességéről tájékoztat.
Az LDAP sajátossága, hogy nem önállóan gondoskodik a felhasználót azonosító számról, a UserIdről, hanem az adatbázisba való feltöltéskor kell gondoskodni ennek ellenőrzéséről. A script ki lett egészítve egy funkcióval, melynek segítségével ellenőrzi az adatbázisban szereplő legnagyobb UID-t, majd az egyel növelt értéked adja az új felhasználónak.
Felhasználó hozzáadása:
intranet:~# ldap-useradd.sh
Felhasználónév: proba_felhasznalo
Jelszó: proba
adding new entry "uid=proba_felhasznalo,ou=VPN users,dc=company,dc=hu"
Success...
intranet:~#
A script maga:
#!/bin/bash
GROUPID='1001'
MKNTPWD='/usr/bin/mkntpwd'
GENSHA1='/usr/local/bin/gensha1.pl'
LDAP_BIND_DN='cn=replicator,dc=company,dc=hu'
LDAP_BIND_SECRET='replica'
LDAP_SUFIX='dc=company,dc=hu'
LDAP_USERS='ou=VPN users'
RETVAL=0
BASH='/bin/bash'
#---------------------------------Kovetkezo UID kiszamolasa
max_uid=$(ldapsearch -x | awk '/uidNumber/ { gsub ( /uidNumber:/,"",$1); print $2 ;}' | sort -r | head -n 1)
USERID=$( echo $max_uid+1 | bc)
#--------------------------------- Check required programs
[ ! -x $MKNTPWD ] && exit 1
usercount=1
while [ $usercount -ne 0 ]
do
echo -n "Felhasznalonev:"
read USERNAME
usercount=`ldapsearch -x | awk -F \, '/dn: uid=/ {gsub(/dn: uid=/,"");print $1}' | grep -c $USERNAME`
if [ $usercount -ne 0 ]; then
echo "Foglalt felhasznalonev"
fi
done
echo -n "Jelszo: "
read PASSWORD
#--------------------------------- jelszo hashelese
LMPASSWD=`$MKNTPWD -L $PASSWORD`
NTPASSWD=`$MKNTPWD -N $PASSWORD`
LOCALSID=`net getlocalsid | awk -F ': ' '{ print $2 }'`
USERPASSWD=`slappasswd -s $PASSWORD`
#--------------------------------- Felhasznalo felvetele az adatbazisba
echo -e "dn: uid=$USERNAME,$LDAP_USERS,$LDAP_SUFIX\nobjectClass: top\nobjectClass: account\nobjectClass: posixAccount\nobjectClass: sambaSamAccount\nuid: $USERNAME\nuserPassword: $USERPASSWD\nloginShell: $BASH\nsambaSID: $LOCALSID\nsambaLMPassword: $LMPASSWD\nsambaNTPassword: $NTPASSWD\ncn: $USERNAME\nuidNumber: $USERID\ngidNumber: $GROUPID\nhomeDirectory: /home/ldap_users/$USERNAME" | \
ldapadd -x -D $LDAP_BIND_DN -w $LDAP_BIND_SECRET
RETVAL=$?
if [ $RETVAL -eq 0 ] ;
then
echo 'Felhasznalo sikeresen hozzaadva!'
else
echo 'Felhasznalo hozzaadasa sikertelen!!'
exit 1
fi