Autor | Zpráva | ||
---|---|---|---|
Clint Profil |
#1 · Zasláno: 30. 1. 2014, 14:26:54
Zdravím,
potřeboval bych poradit. Existuje podniková sít (extranet) do které se přihlašují uživatelé a mohou pracovat s počítačem. Co mi bylo sděleno, tak tyto informace se nacházejí v LDAP (jedná se o autentizaci NTLM). V síti je server bežící na iis6 s php, mysql, Příjdu k počítači, přihlásím se a jakým způsobem v php, získám informace o uživateli (čili o mě) - glob. proměnná $_SERVER[„LOGON_USER“] je prázdná, takže musím nějak vytáhnout data z LDAP, ale funkce ldap_read, chce po mě username a passwort a právě username je to co chci zjistit. Případně jestli neexistuje jiný způsob Díky za help |
||
okolojsoucí Profil |
Zkuste toto:
$ldap = @ldap_connect($yourHostname); $query = @ldap_search($ldap, 'o=example', 'cn=cihats'); $results = @ldap_get_entries($ldap, $query); if ($results['count']) { print_r($results); } else { echo "No such common name"; } Případně ohledně serveru bych zkusil toto function getUserName(){ $username = null; $check = array('LOGON_USER', 'AUTH_USER', 'REDIRECT_LOGON_USER', 'REDIRECT_AUTH_USER'); foreach($check as $index){ if(array_key_exists($index, $_SERVER)){ $username = $_SERVER[$index]; } } return $username; } |
||
peta Profil |
#3 · Zasláno: 30. 1. 2014, 14:58:58
Abys mohl vytahnout informace z sql db, musis se prihlasit. Bud jako admin nebo uzivatel, ktery ma pravo cist data z dane tabulky.
Totez funguje u ldap, take tam mas uzivatele admin, uzivatele na prohlizeni, uzivatele na pristup. function LDAPSearch1($_filter,$_att) { global $ERRORS,$LDAP; ldap_set_option($LDAP['conn'], LDAP_OPT_DEREF, 2); //LDAP_DEREF_NEVER $result = ldap_search($LDAP['conn'],$LDAP['DN'],$_filter,$_att) or die(ldap_error($LDAP['conn'])); $count = ldap_count_entries($LDAP['conn'], $result); $data = ($count>0) ? ldap_get_entries($LDAP['conn'], $result) : null; ldap_free_result($result); return $data; } function LDAPConnect() { global $LDAP; $LDAP['conn'] = ldap_connect($LDAP['server']) or die("Not connect: ". $LDAP['server'] ."Chyba: ". ldap_error($LDAP['conn'])); if ($LDAP['conn']) { // binding to ldap server $result = ldap_bind($LDAP['conn'], $LDAP['user'], $LDAP['psw']); } } function LDAPDisconnect() { global $LDAP; ldap_close($LDAP['conn']); $LDAP['conn'] = null; } $LDAP = array(); $LDAP['server'] = 'ldap://jmeno.server.cz'; // LDAP server $LDAP['user'] = 'cn=intercon,ou=system,ou=skup1,o=skup2'; // LDAP user $LDAP['psw'] = 'heslo'; // LDAP psw $LDAP['DN'] = 'o=skup2'; $LDAP['conn'] = null; $LDAP['search'] = array(); LDAPConnect(); $filter = "(&(objectclass=person)(displayname=peter mlich))"; $att = array(); $data = LDAPSearch1($filter,$att); LDAPDisconnect(); |
||
Clint Profil |
#4 · Zasláno: 30. 1. 2014, 15:11:10
okolojsoucí:
Díky za help - musím počkat až si na serveru provozní knihovnu pro LDAP, pak prozkouším. A dám vědět |
||
okolojsoucí Profil |
#5 · Zasláno: 30. 1. 2014, 15:33:41
|
||
Clint Profil |
#6 · Zasláno: 30. 1. 2014, 17:14:07 · Upravil/a: Clint
Jednu věc, ale nechápu abych se připojil do LDAP musím zadat username, heslo adalší údaje:
$LDAP = array(); $LDAP['server'] = 'ldap://jmeno.server.cz'; // LDAP server $LDAP['user'] = 'cn=intercon,ou=system,ou=skup1,o=skup2'; // LDAP user $LDAP['psw'] = 'heslo'; // LDAP psw $LDAP['DN'] = 'o=skup2'; $LDAP['conn'] = null; $LDAP['search'] = array(); jenže já ty udaje neznám. Mě bylo řečeno, že se uživatel přihlásí do sítě a pokud vstoupí na nějaké stránky, s php skriptem musím zjistit jeho přihlašovací jméno z LDAP a s tím pak budu dále pracovat. A pokud bych tam nastavil nějaké natvrdo username a heslo, tak to bude přeci vracet ten username pod kterým se do LDAP přihlašuji. Tak mi bylo řečeno, že pokud se uživatel přihlásí do sítě, existuje tam AD (Active Directory), který ověří, zda jsou platný přihlašovací údaje. PHP knihovna LDAP slouží k tomu, abych údaje, které jsou v AD získal. K tomu, abych se připojil přes LDAP potřebuji nějaká username, heslo, domenu atd. Nechápu, když zadám udáje typu username=pepa, heslo=heslo, domena=test.cz, tak přeci získám pepa. Ale já potřebuji získat username aktuálně přihlášeného uživatele v síti u konkrétního počtače. Čili pokud u PC1 bude sedět Jan - vytáhne se mi Jan, u PC2 bude sedět Martin - vytáhne se Martin. Přiznám se, že v tomhle okruhu jsem úplný nováček. |
||
peta Profil |
#7 · Zasláno: 31. 1. 2014, 07:34:38
Zkus si rozklikat na foru jednotlive php prikazy, odkazy vedou na manual s priklady.
ldap_connect ldap_bind ldap_search ldap_get_entries U nas to funguje tak, ze se pripojis, prihlasis na univerzalniho uzivatele, vyhledas si, zda existuje uzivatel tveho jmeno a pak se na nej pokusis pres jmeno a heslo prihlasit. Je to zduvodu zabezpeceni. Kdyz se takovy hacker pres ldap_connect pripoji a muze hnedka pouzit search, tak sestavi takovy search, ktery povede ke zhrouceni serveru. Coz je nezadouci. LDAP je totiz pomale, jak snek. Zadne jine udaje nez jmeno, heslo a true/false seznam serveru, pro ktere maji tyto prihlasovaci udaje byt pouzite, bych do nej neukladal. |
||
Clint Profil |
peta:
Projel jsem si ty fce, ale jedna věc mi není jasná, kde zjistím jméno, které chci pomocí ldap_search najít, protože pokud jej budu znát, tak nepotřebuji ldap, právě přes ldap musím zjistit to jméno. A s tím jménem budu pracovat. Nebo funkčnost LDAP chápu špatně. Teď mě napadlo že pomocí LDAP jen ověřím zda ten uživatel tam je - to bude asi ta hlavní věc. Ale to jméno nevím jak získat V globální proměnné $_SERVER žádné jméno nemám |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
Clint:
Ja ted uplne nerozumim. Kdyz chces prohledavat v LDAP, potrebujes se prihlasit, aspon u nas to tak funguje. Obvykly univerzalni uzivatel je cn=intercon,ou=system (CN = Common Name, OU = Organizational Unit, DC = Domain Component). okolojsoucí pouzil ldap_connect, ldap_search, ldap_get_entries bez ldap_bind. To je sice cool, ale u nas bys neziskal z ldap nic. Proc by mel ldap rozdava nahodnym kolemjdoucim seznam uzivatelu, ze jo? Co chces hledat potom nastavujes do filtru pro search $filter = "(&(objectclass=person)(displayname=peter mlich))"; $filter = "(|(sn=Jakub Ivanov)(givenname=Jakub Ivanov))"; // z nejakeho jineho examplu $filter = "(&(objectclass=person)(employeestatus=Active)(employeetype=zam)(displayname=".$name."*))"; $filter = "(objectClass=person)"; SELECT * FROM `ou=system` WHERE `objectClass`='person' SELECT * FROM `ou=system` WHERE `objectClass`='person' AND `displayname`='peter mlich' |
||
Clint Profil |
Tak teď jsem úplně ztracen - čili pokud jsem dostal ip serveru a přihlašovací údaje do LDAP je pro mě málo, tedy? A když chci zkontrolovat nějaké jméno, vůdči AD tak to jméno někde musím získat a pak s ním pracovat - a kde to jméno získám. Z hlaviček prohlížeče nebo z něčeho jiného.
A hodnoty pr filtr objectclass, displayname, sn, givenname atd získám kde to mi musí sdělit správce? ... 16:10hod 4.2.2014 - tak connect a bind je za mnou - při použití ldap_search sestavuji filtr: $filter="(Userlogname=$person)";, Userlogname mi řekl správce a příslušnou osobu mi to nenašlo i když tam je |
||
Davex Profil |
Clint:
Přihlašovací jméno uživatele by v případě integrované autentizace v IIS mělo být v $_SERVER["REMOTE_USER"] $_SERVER["LOGON_USER"] $_SERVER["AUTH_USER"] Kromě toho by mělo být nastaveno i $_SERVER["HTTP_AUTHORIZATION"] . Je-li všechno prázdné, tak by to mohlo znamenat, že uživatel není přihlášen a k webu přistupuje anonymně.
|
||
peta Profil |
Clint:
To si musis vykomunikovat s tim spravcem. On ti prave muze rici, na koho se prihlasit s jakymi udaji, aby ti to zobrazilo treba seznam uzivatelu. V ldap je spousta promennych, ze kterych ten, kdo ho u vas zavadel, nektere vybral a ty pouziva. Urcite musel nastavovat nejaky program, aby s tim umel komunikovat a tak vi, co tam zadaval. Jsem ti uvedl priklad z naseho ldap, jak by asi melo vypadat prihlasovani a filter. Treba to mate v nejake skupine, jako my, objectclass=person + employeestatus=Active + employeestatus=Active, bez ktere to nic nezobrazi. Sak skus zobrazit vsechny (Userlogname=*) Tady jsou treba dalsi priklady filtru http://help.globalscape.com/help/eft6-2/mergedprojects/eft/advanced_ldap_filtering.htm |
||
Clint Profil |
#13 · Zasláno: 5. 2. 2014, 10:27:36
Filtr typu Logon User Name je za mnou ve skutečnosti je to toto: $filter="(sAMAccountName=$person)"; , ještě řeším jednu věc a to nastavení druhého parametru v ldap_search($ldapCon, $baseDN, $filter);, $baseDN je tam DC což je p20.local, pak je tam OU - což je přímo složka ve který se nachází uživateli v mým případě DC=TECH, kde je podsložka Users (a tam jsem už já), takže nastavuji $baseDN takto: $baseDN = "OU=TECH,DC=p20.local"; ale bohužel mi to nic nenajde, jakým způsobem se nastavuje tato věc, chci aby mi to hledalo uživatele v p20.local v TECH a jestli bude mít další podsložky typu E1, E2 ... apod. tak to bude prohledávat ve všech
|
||
peta Profil |
#14 · Zasláno: 5. 2. 2014, 15:08:35
Google? :)
"OU=TECH,DC=p20.local" V tom priklade jsem pouzil pro login uzivatele $LDAP['user'] = 'cn=intercon,ou=system,ou=skup1,o=skup2'; takze hadam, ze se to pise podobne OU=TECH,OU=Users,DC=p20.local |
||
Clint Profil |
#15 · Zasláno: 5. 2. 2014, 15:17:09
tak to bylo takhle OU=TECH,DC=p20,DC=local pokud jsem napsal OU=TECH,DC=p20.local tak to nejelo
|
||
Časová prodleva: 11 let
|
0