OpenLDAP, Samba и устаревание пароля

13

Я настраиваю систему, в которой все ИТ-ресурсы доступны через одну пару пароль пользователя, будь то доступ к оболочке на серверах, вход в домен Samba, WiFi, OpenVPN, Mantis и т. Д. (С доступом к определенным службам, управляемым членством в группе или полями объекта пользователя). Поскольку в нашей сети есть личные данные, нам необходимо реализовать устаревание пароля в соответствии с Директивой ЕС о защите данных (или, вернее, ее польской версией).

Проблема заключается в том, что учетные записи Samba и POSIX в LDAP используют различную информацию о хешировании паролей и устаревании. Хотя синхронизация самих паролей проста ( ldap password sync = Yesin-in smb.conf), добавление устаревания пароля в микс разрушает ситуацию: Samba не обновляет shadowLastChange. Вместе с obey pam restrictions = Yesсозданием системы, в которой пользователь Windows не может изменить устаревший пароль, но если я его не использую, домашние каталоги не будут создаваться автоматически. Альтернативой является использование расширенной операции LDAP для смены пароля, но smbk5pwdмодуль также не устанавливает ее. Что еще хуже, сопровождающий OpenLDAP не будет обновлять его / принимать исправления, так как это поле считается устаревшим.

Итак, мой вопрос, что является лучшим решением? Каковы их плюсы и минусы?

  1. Использовать LDAP ppolicyи устаревание внутреннего пароля LDAP?

    1. Насколько хорошо это работает с модулями NSS, PAM, samba, другими системами?
    2. Нужно ли настраивать модули NSS и PAM специальным образом, чтобы использовать ppolicy, а не shadow?
    3. Работает ли GOsa² с ppolicy?
    4. Существуют ли другие инструменты администрирования, которые могут работать с ppolicyLDAP -enabled?
  2. Взломайте скрипт изменения пароля, который обновляет поле в LDAP. (оставляя возможность того, что пользователь сам обновит поле без изменения пароля)

Хьюберт Карио
источник
Это мастерски написанный вопрос. Я хотел бы помочь вам с этим ...
gWaldo

Ответы:

1

Я написал свой собственный оверлей OpenLDAP, вызываемый shadowlastchangeдля обновления shadowLastChangeатрибута при каждом изменении пароля EXOP. Активируется в slapd.conf:

moduleload smbk5pwd
moduleload shadowlastchange
...

database bdb
...
overlay smbk5pwd
overlay shadowlastchange

Я настроил smb.confизменить пароли через EXOP:

ldap passwd sync = Only

Затем для каждой учетной записи установите shadowMaxколичество дней, в течение которых пароль действителен. Модули OpenLDAP позаботятся обо всем остальном!

200_success
источник
Вы пробовали запустить его вместе с ppolicy?
Юбер Карио
Пожалуйста, попробуйте и дайте мне знать, как это происходит.
200_success
Похоже , что либо ppolicyили smbk5pwdналожения в Debian сжимающей OpenLDAP сделать обновление shadowLastChange. Yay для Debian!
Хьюберт Карио
1

В качестве временного промежутка я создал скрипт для Samba, который будет обновлять shadowLastChangeизменение пароля:

#!/bin/sh
# script to update shadowLastChange when samba updates passwords
# it's not needed when using 'passwd', it does update the field,
# even if pam_ldap is using LDAP Extented Operation to change password

LDAP_MODIFY="/usr/bin/ldapmodify"
LDAP_SEARCH="/usr/bin/ldapsearch"
LDAP_USER="uid=shadow-update,ou=Services,dc=example,dc=com"
LDAP_PASSWORD="change-me"
LDAP_HOST="localhost"

# get date
SLC=$((`date '+%s'` / 24 / 3600))

# get user login name
user=$1

# find user's DN
dn=$($LDAP_SEARCH -x -h $LDAP_HOST -LLL -b dc=example,dc=com "(uid=$user)" dn)
dn=${dn#dn:}

# check if DN is not base64 encoded
if [ "${dn:0:1}" = ":" ]; then
        # update password change date
        echo "dn:$dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \
 -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
else
        # update password change date
        echo "dn: $dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \
 -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
fi

err=$?

if [ ! $err -eq 0 ]; then
   echo "error: can't update shadowLastChange: $err"
   echo "`date`: shadow.sh: can't update shadowLastChange: $err"\
       >> /var/log/shadow-update.log
   exit;
fi

echo OK

В конфиге Samba он должен быть unix password syncустановлен на yes, passwd chatустановить на *OK*и passwd programвыше сценарий с "%u"параметром param.

Учетная запись, указанная в, LDAP_USERдолжна быть создана в LDAP и иметь права на чтение uidдля всех пользователей Samba и право на запись shadowLastChange.

Хьюберт Карио
источник
1

(работа продолжается, подробности я добавлю позже)

Хорошие новости всем! У меня все работает, более или менее ..., в среде тестирования ...:

  1. Политика паролей (как по качеству, так и по времени) применяется на уровне OpenLDAP (спасибо ppolicy, not24getи passwdqc)
  2. Пароли синхронизируются между Samba и POSIX обоими способами (спасибо smbk5pwd). Примечание. Проверка качества с помощью Samba и ppolicy неочевидна: password check script( pwqcheck -1от passwdqc) необходимо выполнить те же проверки, что и LDAP, или пользователь получит разрешение «Отказано» вместо «Слишком простой пароль, попробуйте другой».
  3. И PAM, и Samba предупреждают пользователя о том, что срок действия пароля скоро истечет.
  4. Каталоги пользователей будут созданы с использованиемpam_mkhomedir
  5. GOsa² реализация RFC2307bis (и связанной схемы) вставляет uidв записи группы, поэтому приложения, ожидающие либо NIS (большая часть «UNIXy»), либо RFC2307bis схема (большая часть «предназначенная для AD»), работают просто отлично.

Единственная проблема заключается в том, что отключение учетной записи требует использования инструментов CLI (или написания скрипта GOsa postmodify), иначе учетная запись не будет заблокирована на уровне LDAP, только для PAM и Samba. Срок действия пароля по-прежнему будет принудительно установлен, поэтому это не большая проблема.

Хьюберт Карио
источник
0

Я получил ответ от одного из разработчиков GOsa. В настоящее время GOsa никоим образом не поддерживает оверлей ppolicy.

Хьюберт Карио
источник