PHP5- LDAP

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
PHP5- LDAP
« kdy: 14. 05. 2019, 11:11:58 »
cílem je vytvářet v PHP scriptu adresáře na vzdáleném AD/DC windows serveru(v lokální síti)
na serveru(Debian) kde běží ten php script jsem nainstaloval balíček 'php5-ldap'
není mi ale jasné zda je potřeba ještě měnit konfiguraci php.ini
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #1 kdy: 14. 05. 2019, 11:26:56 »
phpinfo() zobrazuje LDAP enabled, tak snad to bude stačit
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #2 kdy: 14. 05. 2019, 14:33:58 »
Nedaří se mi na LDAP připojit:
PHP:
Kód: [Vybrat]
function ldapQuery($filter, $baseDN = "OU=Users,DC=firma-cz,DC=local", $server = "192.168.1.6") {
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
$ldapCon = ldap_connect($server);
if($ldapCon) {
  ldap_set_option($ldapCon, LDAP_OPT_PROTOCOL_VERSION, 3); 
  ldap_set_option($ldapCon, LDAP_OPT_REFERRALS, 0);           /
  $res = ldap_bind($ldapCon, "CN=muj.uzivatel,OU=Users,DC=firma-cz,DC=local", "moje@heslo");
  if($res === false) {
      echo "Autentizace selhala.";  ldap_close($ldapCon); return false;
      }
....shortened
v konzoli na webu se mi vrací Autentizace selhala.

zvláštní, to co vidím na serveru se mi jeví jako by spojení bylo navázáno
Kód: [Vybrat]
ldap_create
ldap_url_parse_ext(ldap://192.168.1.6:389)
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 192.168.1.6:389
ldap_new_socket: 44
ldap_prepare_socket: 44
ldap_connect_to_host: Trying 192.168.1.6:389
ldap_pvt_connect: fd: 44 tm: -1 async: 0
attempting to connect:
connect success
ldap_open_defconn: successful
ldap_send_server_request
ldap_result ld 0x7f7ffa0e7150 msgid 1
wait4msg ld 0x7f7ffa0e7150 msgid 1 (infinite timeout)
wait4msg continue ld 0x7f7ffa0e7150 msgid 1 all 1
** ld 0x7f7ffa0e7150 Connections:
* host: 192.168.1.6  port: 389  (default)
  refcnt: 2  status: Connected
  last used: Tue May 14 14:25:01 2019


** ld 0x7f7ffa0e7150 Outstanding Requests:
 * msgid 1,  origid 1, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x7f7ffa0e7150 request count 1 (abandoned 0)
** ld 0x7f7ffa0e7150 Response Queue:
   Empty
  ld 0x7f7ffa0e7150 response count 0
ldap_chkResponseList ld 0x7f7ffa0e7150 msgid 1 all 1
ldap_chkResponseList returns ld 0x7f7ffa0e7150 NULL
ldap_int_select
read1msg: ld 0x7f7ffa0e7150 msgid 1 all 1
read1msg: ld 0x7f7ffa0e7150 msgid 1 message type bind
read1msg: ld 0x7f7ffa0e7150 0 new referrals
read1msg:  mark request completed, ld 0x7f7ffa0e7150 msgid 1
request done: ld 0x7f7ffa0e7150 msgid 1
res_errno: 49, res_error: <80090308: LdapErr: DSID-0C090400, comment: AcceptSecurityContext error, data 52e, v1db1>, res_matched: <>
ldap_free_request (origid 1, msgid 1)
ldap_parse_result
ldap_msgfree
ldap_err2string
ldap_free_connection 1 1
ldap_send_unbind
ldap_free_connection: actually freed
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Re:PHP5- LDAP
« Odpověď #3 kdy: 14. 05. 2019, 15:38:09 »
Máš špatné kredence…

Kód: [Vybrat]
res_errno: 49, res_error: <80090308: LdapErr: DSID-0C090400, comment: AcceptSecurityContext error, [b]data 52e[/b], v1db1>, res_matched: <>
https://www.infrasightlabs.com/common-error-codes-for-active-directory-authentication

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #4 kdy: 14. 05. 2019, 15:49:17 »
Máš špatné kredence…
díky za link
každopádně user i password mám dobře
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


Re:PHP5- LDAP
« Odpověď #5 kdy: 14. 05. 2019, 15:55:09 »
Nejspíš nemáš, jinak by to fungovalo, ne?

Zkus ten username napsat ještě ve formátu uzivatel@domena.

Co je to vůbec za verzi toho AD řediče?

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #6 kdy: 14. 05. 2019, 16:16:33 »
Nejspíš nemáš, jinak by to fungovalo, ne?
Zkus ten username napsat ještě ve formátu uzivatel@domena.
Co je to vůbec za verzi toho AD řediče?
Windows Server 2008 R2
zkusil jsem tedy:
muj.uzivatel@moje-firma
muj.uzivatel@moje-firma.local


bez úspěchu
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Re:PHP5- LDAP
« Odpověď #7 kdy: 14. 05. 2019, 16:28:06 »
Okay, víc mě nenapadá.

Nejspíš nemáš, jinak by to fungovalo, ne?
Zkus ten username napsat ještě ve formátu uzivatel@domena.
Co je to vůbec za verzi toho AD řediče?
Windows Server 2008 R2
zkusil jsem tedy:
muj.uzivatel@moje-firma
muj.uzivatel@moje-firma.local


bez úspěchu

Re:PHP5- LDAP
« Odpověď #8 kdy: 14. 05. 2019, 16:50:11 »
Používám to stejně, ale v CN (Common Name) zadávám skutečné jméno (nikoliv uživatelské, ale reálné), takže nějak takto:
"CN=František Ťuňťa,OU=Users,DC=firma,DC=local"

A stejně tak mi funguje když použiji uživatelské jméno s doménou
"domena\frantisek.tunta"

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #9 kdy: 21. 05. 2019, 10:28:51 »
Po několika dnech se znova vracím k tomuto problému.
Na windows DC jsem si pro jistotu zjistil vše ohledně domény:

dsquery user -name Zajdan* ...(vypíš všechny uživatele obsahující zajdan)
"CN=Zajdan Zajdanovic", CN=Users,DC=mojefirma-cz,DC=local"


dsquery ou
"OU=Domain Controllers",DC=mojefirma-cz,DC=local"

upravil jsem tedy PHP:
Kód: [Vybrat]
$res = ldap_bind($ldapCon, "CN=Zajdan Zajdanovic", CN=Users,DC=mojefirma-cz,DC=local","mojeheslo");
ale stále mi to vrací již výše zmíněnou chybu, která napovídá, že jsou špatné credentials(heslo), přičemž jsem si jistý, že to mám správně
« Poslední změna: 21. 05. 2019, 10:34:04 od ZAJDAN »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #10 kdy: 21. 05. 2019, 10:55:30 »
upravil jsem tedy PHP:
Kód: [Vybrat]
$res = ldap_bind($ldapCon, "CN=Zajdan Zajdanovic", CN=Users,DC=mojefirma-cz,DC=local","mojeheslo");
ale stále mi to vrací již výše zmíněnou chybu, která napovídá, že jsou špatné credentials(heslo), přičemž jsem si jistý, že to mám správně

Máš tam nějak divně uvozovky. Tohle nemůže fungovat.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #11 kdy: 21. 05. 2019, 11:02:55 »
Máš tam nějak divně uvozovky. Tohle nemůže fungovat.
Ano máš pravdu, ale toho jsem si všiml ihned co jsem vložil příspěvek, ovšem již jsem neměl možnost ho editovat. I přesto, že to mám takto:
Kód: [Vybrat]
function ldapQuery($filter, $baseDN = "OU=Domain Controllers,DC=mojefirma-cz,DC=local", $server = "ldap://192.168.1.6") {
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
$ldapCon = ldap_connect($server);
if($ldapCon) {
  ldap_set_option($ldapCon, LDAP_OPT_PROTOCOL_VERSION, 3);
  ldap_set_option($ldapCon, LDAP_OPT_REFERRALS, 0);
$res = ldap_bind($ldapCon, "CN=Zajdan Zajdanovic, CN=Users,DC=mojefirma-cz,DC=local","mojeheslo");
.....

problém setrvává
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #12 kdy: 21. 05. 2019, 12:34:17 »
laborováním jsem zjistil:
LdapErr: DSID-0C090252
comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection

pochopil jsem tedy, že server vyžaduje SSL\TLS
změnil jsem tedy port na 636 a vypadá to, že se to chytlo:
Kód: [Vybrat]
ldap_url_parse_ext(ldap://192.168.1.6:636)
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 192.168.1.6:636
ldap_new_socket: 44
ldap_prepare_socket: 44
ldap_connect_to_host: Trying 192.168.1.6:636
ldap_pvt_connect: fd: 44 tm: -1 async: 0
attempting to connect:
connect success
ldap_open_defconn: successful
ldap_send_server_request
ldap_result ld 0x7f7ffa414240 msgid 1
wait4msg ld 0x7f7ffa414240 msgid 1 (infinite timeout)
wait4msg continue ld 0x7f7ffa414240 msgid 1 all 1
** ld 0x7f7ffa414240 Connections:
* host: 192.168.1.6  port: 636  (default)
  refcnt: 2  status: Connected
  last used: Tue May 21 12:30:34 2019


** ld 0x7f7ffa414240 Outstanding Requests:
 * msgid 1,  origid 1, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x7f7ffa414240 request count 1 (abandoned 0)
** ld 0x7f7ffa414240 Response Queue:
   Empty
  ld 0x7f7ffa414240 response count 0
ldap_chkResponseList ld 0x7f7ffa414240 msgid 1 all 1
ldap_chkResponseList returns ld 0x7f7ffa414240 NULL
ldap_int_select
read1msg: ld 0x7f7ffa414240 msgid 1 all 1
ldap_err2string
ldap_free_request (origid 1, msgid 1)
ldap_free_connection 1 1
ldap_free_connection: actually freed
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Re:PHP5- LDAP
« Odpověď #13 kdy: 21. 05. 2019, 14:41:56 »
A kde jsi získal "LdapErr: DSID-0C090252" ?
V předchozích výpisech, co jsi sem dával, nic takového není.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:PHP5- LDAP
« Odpověď #14 kdy: 21. 05. 2019, 15:26:23 »
A kde jsi získal "LdapErr: DSID-0C090252" ?
V předchozích výpisech, co jsi sem dával, nic takového není.
laborováním jsem zkusil jinej PHP zápis:
Kód: [Vybrat]
//LDAP Bind paramters, need to be a normal AD User account.
$ldap_password = 'moje@heslo';
$ldap_username = 'my.user@firma-cz.local';
$ldap_connection = ldap_connect("192.168.1.6);
$ldap_base_dn = 'DC=firma-cz,DC=local,DC=local';

if (FALSE === $ldap_connection){
    // Uh-oh, something is wrong...
echo 'Unable to connect to the ldap server';
}

// We have to set this option for the version of Active Directory we are using.
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');
ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0); // We need this for doing an LDAP search.

if (TRUE === ldap_bind($ldap_connection, $ldap_username, $ldap_password)){

//Your domains DN to query
    $ldap_base_dn = 'DC=firma-cz,DC=local,DC=local';

//Get standard users and contacts
    $search_filter = '(|(objectCategory=person)(objectCategory=contact))';

//Connect to LDAP
$result = ldap_search($ldap_connection, $ldap_base_dn, $search_filter);


    if (FALSE !== $result){
   
$entries = ldap_get_entries($ldap_connection, $result);

// Uncomment the below if you want to write all entries to debug somethingthing
//var_dump($entries);

//Create a table to display the output
echo '<h2>AD User Results</h2></br>';
echo '<table border = "1"><tr bgcolor="#cccccc"><td>Username</td><td>Last Name</td><td>First Name</td><td>Company</td><td>Department</td><td>Office Phone</td><td>Fax</td><td>Mobile</td><td>DDI</td><td>E-Mail Address</td><td>Home Phone</td></tr>';

//For each account returned by the search
for ($x=0; $x<$entries['count']; $x++){

//
//Retrieve values from Active Directory
//

//Windows Usernaame
$LDAP_samaccountname = "";

if (!empty($entries[$x]['samaccountname'][0])) {
$LDAP_samaccountname = $entries[$x]['samaccountname'][0];
if ($LDAP_samaccountname == "NULL"){
$LDAP_samaccountname= "";
}
} else {
//#There is no samaccountname s0 assume this is an AD contact record so generate a unique username

$LDAP_uSNCreated = $entries[$x]['usncreated'][0];
$LDAP_samaccountname= "CONTACT_" . $LDAP_uSNCreated;
}

//Last Name
$LDAP_LastName = "";

if (!empty($entries[$x]['sn'][0])) {
$LDAP_LastName = $entries[$x]['sn'][0];
if ($LDAP_LastName == "NULL"){
$LDAP_LastName = "";
}
}

//First Name
$LDAP_FirstName = "";

if (!empty($entries[$x]['givenname'][0])) {
$LDAP_FirstName = $entries[$x]['givenname'][0];
if ($LDAP_FirstName == "NULL"){
$LDAP_FirstName = "";
}
}

//Company
$LDAP_CompanyName = "";

if (!empty($entries[$x]['company'][0])) {
$LDAP_CompanyName = $entries[$x]['company'][0];
if ($LDAP_CompanyName == "NULL"){
$LDAP_CompanyName = "";
}
}

//Department
$LDAP_Department = "";

if (!empty($entries[$x]['department'][0])) {
$LDAP_Department = $entries[$x]['department'][0];
if ($LDAP_Department == "NULL"){
$LDAP_Department = "";
}
}

//Job Title
$LDAP_JobTitle = "";

if (!empty($entries[$x]['title'][0])) {
$LDAP_JobTitle = $entries[$x]['title'][0];
if ($LDAP_JobTitle == "NULL"){
$LDAP_JobTitle = "";
}
}

//IPPhone
$LDAP_OfficePhone = "";

if (!empty($entries[$x]['ipphone'][0])) {
$LDAP_OfficePhone = $entries[$x]['ipphone'][0];
if ($LDAP_OfficePhone == "NULL"){
$LDAP_OfficePhone = "";
}
}

//FAX Number
$LDAP_OfficeFax = "";

if (!empty($entries[$x]['facsimiletelephonenumber'][0])) {
$LDAP_OfficeFax = $entries[$x]['facsimiletelephonenumber'][0];
if ($LDAP_OfficeFax == "NULL"){
$LDAP_OfficeFax = "";
}
}

//Mobile Number
$LDAP_CellPhone = "";

if (!empty($entries[$x]['mobile'][0])) {
$LDAP_CellPhone = $entries[$x]['mobile'][0];
if ($LDAP_CellPhone == "NULL"){
$LDAP_CellPhone = "";
}
}

//Telephone Number
$LDAP_DDI = "";

if (!empty($entries[$x]['telephonenumber'][0])) {
$LDAP_DDI = $entries[$x]['telephonenumber'][0];
if ($LDAP_DDI == "NULL"){
$LDAP_DDI = "";
}
}

//Email address
$LDAP_InternetAddress = "";

if (!empty($entries[$x]['mail'][0])) {
$LDAP_InternetAddress = $entries[$x]['mail'][0];
if ($LDAP_InternetAddress == "NULL"){
$LDAP_InternetAddress = "";
}
}

//Home phone
$LDAP_HomePhone = "";

if (!empty($entries[$x]['homephone'][0])) {
$LDAP_HomePhone = $entries[$x]['homephone'][0];
if ($LDAP_HomePhone == "NULL"){
$LDAP_HomePhone = "";
}
}

echo "<tr><td><strong>" . $LDAP_samaccountname ."</strong></td><td>" .$LDAP_LastName."</td><td>".$LDAP_FirstName."</td><td>".$LDAP_CompanyName."</td><td>".$LDAP_Department."</td><td>".$LDAP_OfficePhone."</td><td>".$LDAP_OfficeFax."</td><td>".$LDAP_CellPhone."</td><td>".$LDAP_DDI."</td><td>".$LDAP_InternetAddress."</td><td>".$LDAP_HomePhone."</td></tr>";


} //END for loop
} //END FALSE !== $result

ldap_unbind($ldap_connection); // Clean up after ourselves.
echo("</table>"); //close the table

} //END ldap_bind
v tomto stylu zápisu jsem to získal...a i v tomto stylu jsem přidal port 636 a chytlo se to, nezbylo mě nic než experimentovat a hledat chybu takto
« Poslední změna: 21. 05. 2019, 15:28:15 od ZAJDAN »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.