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