Автоматическая смена пароля в Samba

Материал из Xgu.ru

Перейти к: навигация, поиск


Короткий URL: samba/password_age

На этой странице описывается как при использовании Samba в качестве контроллера домена Windows сделать так, чтобы пользователь автоматически получал приглашение сменить пароль при истечении срока его действия; где хранятся информация о времени смене пароля, и как её можно изменить.


Содержание

[править] Автоматическая смена пароля

Если посмотреть информацию о смене пароля пользователю в каталоге LDAP, то она там указана правильная:

%# smbldap-usershow myuser
dn: uid=myuser,...
...
sambaAcctFlags: [U]
...
sambaPwdLastSet: 1191333882
sambaPwdMustChange: 1195221882
...

Тем не менее автоматическая смена пароля при наступлении нужного времени не выполняется и записи к каталоге LDAP игнорируются.

Это связано с тем, что теперь дата смены пароля не берётся в каталоге, а вычисляется Samba динамически на основе информации о смене пароля, и настроек политики:

(фрагмент кода samba)

if (!pdb_get_account_policy(AP_MAX_PASSWORD_AGE, &expire)
    || expire == (uint32)-1 || expire == 0)-
    return get_time_t_max();
return sampass->pass_last_set_time + expire;

Переменная expire получает своё значение из политики, которая в случае, если не используется LDAP, хранится в файле account_policy.tdb:

%# find /var -name account_policy.tdb -exec ls -l {} \;
-rw------- 1 root root 8192 2007-04-18 08:49 /var/lib/samba/account_policy.tdb

В том случае, если используется LDAP, она хранится в каталоге:

# ldapsearch -h 10.1.2.3 -x -b 'dc=mydc,dc=com' '(sambaDomainName=MYDC)'
# extended LDIF
#
# LDAPv3
# base <dc=mydc,dc=com> with scope subtree
# filter: (sambaDomainName=EB)
# requesting: ALL
#

# MYDC, mydc.com
dn: sambaDomainName=MYDC,dc=mydc,dc=com
objectClass: top
objectClass: sambaDomain
objectClass: sambaUnixIdPool
sambaDomainName: MYDC
sambaSID: S-1-5-21-1071641343-70743285-XXXXXXXXX
sambaRefuseMachinePwdChange: 0
sambaLogonToChgPwd: 0
sambaForceLogoff: -1
sambaMinPwdAge: 0
sambaLockoutObservationWindow: 30
gidNumber: 1031
sambaMinPwdLength: 8
sambaLockoutDuration: 30
sambaLockoutThreshold: 8
sambaPwdHistoryLength: 0
uidNumber: 1509
sambaNextRid: 1367
sambaMaxPwdAge: 4294967295

# search result
search: 2
result: 0 Success

(Пример показан для домена MYDC (dc=mydc,dc=com), LDAP-сервер для которого расположен на 10.1.2.3.)

Время жизни пароля находится в атрибуте sambaMaxPwdAge:

   sambaMaxPwdAge: 4294967295

Просмотреть значение того или иного параметра политики можно через Samba с помощью pdbedit -P, например:

%# pdbedit -P "maximum password age"
account policy "maximum password age" description: Maximum password age, in seconds (default: -1 => never expire passwords)
account policy "maximum password age" value is: 4294967295

При таком значении параметра "maximum password age" политики, возникает описанная вверху ситуация.

Изменить значение политики:

%# pdbedit -P "maximum password age" -C 100000

(здесь 10000 — это время в секундах, на протяжении которого пароль можно не менять).

С этого момента времени пароль будет меняться в соответствии с политикой.

[править] Правила

Нужно запомнить:

  • Актуальные параметры, которые использует Samba-сервер нужно смотреть с помощью pdbedit. Некоторые параметры можно посмотреть с помощью smbldap-usershow, но если они противоречат тому, что показывает pdbedit, нужно иметь в виду, что действительны именно параметры pdbedit, поскольку smbldap-usershow показывает значения, установленные в каталоге, а pdbedit — их интерпретацию.
  • Значение времени смены пароля вычисляется динамически и нигде не хранится.
  • Значение вычисляется на основе даты смены пароля + значения параметра maximum password age политики.
  • Параметр maximum password age политики хранится не в каталоге, а в локальном файле на samba-сервере

[править] Дополнительная информация


[править] Материалы по Samba на xgu.ru