Автор Тема: Сторонний модуль для проверки сложности паролей  (Прочитано 5682 раз)

ctopmbi4

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Доброго времени суток.
Прикрутил модуль check_password.so

Вроде как все норм установил. Но не работает. Точнее почему то не проверяет пароль на заданные параметры из конфиг. файла check_password.conf
К примеру minUpper
017]: check_password: Got line |minUpper 4 |
Jan  2 22:18:28 slapd[50017]St.: check_password: Validating parameter [minUpper]
slapd[50017]St.: check_password: Parameter accepted.
Пропускает.
Если установить useCracklib 1 то проверяет, то есть конфиг файл подхватывает.
 

slapd.conf
include         /etc/openldap/schema/ppolicy.schema
moduleload      ppolicy.la
overlay         ppolicy
ppolicy_default "cn=policy,ou=Password-Policies,ou=St,ou=Russia,dc=tab,dc=ru"

dn: cn=policy,ou=Password-Policies,ou=St,ou=Russia,dc=tab,dc=ru
objectClass: applicationProcess
objectClass: pwdPolicy
objectClass: pwdPolicyChecker
cn: policy
pwdMaxAge: 2592000
pwdInHistory: 3
pwdExpireWarning: 86400
pwdGraceAuthNLimit: 3
pwdLockout: FALSE
pwdLockoutDuration: 0
pwdMaxFailure: 0
pwdFailureCountInterval: 0
pwdMustChange: FALSE
pwdAllowUserChange: TRUE
pwdSafeModify: FALSE
structuralObjectClass: applicationProcess
pwdCheckQuality: 1
pwdCheckModule: check_password.so
pwdMinAge: 0
pwdAttribute: userPassword
pwdMinLength: 5

Не могу понять в чем может быть косяк. Благодарю за любую помощь.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте! Почти три часа проэкспериментировал с модулем, результаты не слишком утешительны. Чтобы разобраться с логикой работы модуля, пришлось заглянуть в исходный код, и эта логика оказалась весьма своеобразной. В проверке учитываются значения по умолчанию (нули), например, такой вариант настроек:
minPoints 1
useCracklib 0
minUpper 4
по факту превращается в такой:
minPoints 1
useCracklib 0
minUpper 4
minLower 0
minDigit 0
minPunct 0
Проверка пароля происходит посимвольно, и если символ попадает в заданную категорию, то от целочисленного значения, заданного в качестве условия для этой категории символов, отнимается единица. Если полученное в результате значение меньше единицы, то условие по данной категории символов считается выполненным.  А поскольку минимальная длина пароля -- 6 символов (тоже заложено в коде), то, с учётом проверок значений по умолчанию (ноль всегда меньше единицы), под эти настройки подходят, практически, любые пароли. Например, для пароля AAbb11 проверка завершится уже на третьем символе, поскольку совпадёт условия для букв в нижнем регистре, и этого будет достаточно, чтобы пароль считался "правильным" (minPoints 1).

Возможных выходов тут два: либо поиграться с параметрами (см. ниже), чтобы найти приемленый для себя вариант, либо переписать логику работы модуля, так, чтобы она Вас устраивала, взяв за основу имеющийся исходник.

Под такой вариант параметров:
minPoints 3
useCracklib 0
minUpper 3
minLower 3
minDigit 1
minPunct 1
подойдут пароли AAAaaa1    AAAaaa_    AAAaa_1    Aaaaa_1    AAAA_1    aaaa_1

В общем, подобрать "оптимальный" набор параметров можно.

Егор

ctopmbi4

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Благодарю Егор за быстрый ответ.
Игрался с параметрами в conf файле отключая разные параметры. Вроде работает корректно.
Параметром "pwdMinLenght" можно перекрыть мин. кол.во символов в большую сторону как мне и нужно по требованиям.
Вопрос objectClass: applicationProcess. objectClass: namedObject.
Не нашел в чем отличие между этими классами.

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Вопрос objectClass: applicationProcess. objectClass: namedObject.
Не нашел в чем отличие между этими классами.
Объектный класс namedObject не попадался, в какой набор схемы данных он входит?

Класс applicationProcess используется, потому что он структурный (может использоваться для построения записи) и имеет только один обязательный атрибут cn.

Егор

ctopmbi4

  • Новичок
  • *
  • Сообщений: 5
    • Просмотр профиля
Добрый день.
Возникла потребность сделать две разные политики для разных пользователей.
Как я понимаю можно собрать данный модуль и подкинуть ему другой конф. файл с другими параметрами.
либо это не возможно сделать?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Здравствуйте!
Возникла потребность сделать две разные политики для разных пользователей.
Как я понимаю можно собрать данный модуль и подкинуть ему другой конф. файл с другими параметрами.
либо это не возможно сделать?

Расположение конфигурационного файла для модуля check_password.so задаётся на этапе компиляции этого модуля. Поэтому для того. чтобы задать две разные конфигурации, придётся два раза собрать модуль (с разными именами), указав при сборке разные пути к конфигурационному файлу модуля.
Примерно так (пути укажите свои):

make CONFIG="/etc/ldap/check_password1.conf" LDAP_INC="-I/home/egor/openldap-2.4.45/include/ -I/home/egor/openldap-2.4.45/servers/slapd"

sudo cp ./check_password.so /usr/lib/ldap/check_password.1.so

make CONFIG="/etc/ldap/check_password2.conf" LDAP_INC="-I/home/egor/openldap-2.4.45/include/ -I/home/egor/openldap-2.4.45/servers/slapd"

sudo cp ./check_password.so /usr/lib/ldap/check_password.2.so

Егор