Как создать пользователя с возможностью входа в систему POSIX в OpenLDAP через PHP?

Следующий метод используется для создания пользователя с возможностью входа в систему POSIX в базе данных OpenLDAP. Пользователи, имеющие учетную запись, созданную следующим способом, могут войти в систему на любой клиентской машине OpenLDAP под управлением Linux. При вызове этого метода я должен передать следующие переменные:

  • $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?


person Casper    schedule 24.08.2016    source источник


Ответы (1)


Похоже, вы пытаетесь добавить атрибут, который не поддерживается. username не поддерживается ни inetOrgPerson, ни posixAccount, а атрибут пароля должен быть userPassword в соответствии с posixAccount.

Для получения дополнительной информации просмотрите поддерживаемые атрибуты на странице http://www.zytrax.com/books/ldap/ape/#objectclasses

person heiglandreas    schedule 25.08.2016
comment
После тестирования я обнаружил, что uid используется для установки User Name в phpLDAPadmin. Также, если я прокомментирую gidNumber, homedirectory, loginshell и posixAccount, ошибка исчезнет. И, вы правы, password должно быть userPassword, но как установить шифрование на md5? - person Casper; 25.08.2016
comment
Я только что провел быстрый поиск, и это должно дать вам представление о том, как зашифровать пароль: blog.michael.kuron-germany.de/2012/07/ - person heiglandreas; 25.08.2016
comment
Большое спасибо! Я уже узнал, как зашифровать пароль с помощью md5. - person Casper; 25.08.2016