2016-08-24 52 views
1

以下方法用於在OpenLDAP數據庫中創建具有POSIX登錄能力的用戶。擁有通過以下方法創建的帳戶的用戶可以登錄任何OpenLDAP客戶端Linux機器。在調用此方法時,必須通過以下變量:如何通過PHP在OpenLDAP中創建一個具有POSIX登錄功能的用戶?

  • $ldapconn:由ldap_connect返回。
  • $username:我想創建的用戶名。
  • $password:登錄帳戶的密碼。

public static function createNewUser($ldapconn, $username, $password) { 
     if (!$ldapconn) { return false; } 
     require_once("LDAPConfigurator.php"); 
     $r = ldap_bind($ldapconn, "cn=admin,dc=test,dc=com", "12345"); 

     // Prepare data 
     $info = [ 
      'cn'   => $username, 
      'sn'   => $username, 
      'gidNumber'  => 502, 
      'homedirectory' => "/home/ldap/".$username, 
      'loginShell' => "/bin/sh", 
      'password'  => $password, 
      'uidNumber'  => 2333, // Can I set auto increment for this value? 
      'username'  => $username, 
      'objectclass' => [ 
       'inetOrgPerson', 
       'posixAccount', 
       'top' 
      ] 
     ]; 

     // Add data to directory 
     $r = ldap_add($ldapconn, "cn=".$username",cn=users,ou=groups,dc=test,dc=com", $info); 

     return true; 
    } 

用於設置$info對象,我參考在POSIX的用戶帳戶中使用的屬性在phpLDAPadmin和它們都具有required標籤。不過,我終於收到以下錯誤:

Warning: ldap_add(): Add: Undefined attribute type 

那麼,什麼是正確的$info對象創建POSIX用戶?

回答

1

它看起來像你試圖添加不支持的屬性。 username既不支持inetOrgPerson也不支持posixAccount,根據posixAccount,密碼屬性應爲userPassword

欲瞭解更多信息,看看支持的屬性在http://www.zytrax.com/books/ldap/ape/#objectclasses

+0

測試後,我發現,'uid'用於在'phpLDAPadmin'設置'用戶Name'。另外,如果我評論'gidNumber','homedirectory','loginshell'和'posixAccount',錯誤將會消失。而且,你是正確的'密碼'應該是'userPassword',但是如何將加密設置爲'md5'? – Casper

+0

我只是做了一個快速搜索,這應該給你一個想法如何加密密碼:http://blog.michael.kuron-germany.de/2012/07/hashing-and-verifying-ldap-passwords-in- php/ – heiglandreas

+0

非常感謝!我已經發現如何通過'md5'加密密碼。 – Casper

相關問題