OpenLDAP,Samba和密码老化


13

我正在配置一个系统,其中所有IT资源都可以通过一个用户密码对访问,无论是访问服务器上的Shell,登录Samba域,WiFi,OpenVPN,Mantis等(访问受特定服务约束的访问权限)通过组成员身份或用户对象字段)。因为我们的网络中有个人数据,所以我们需要按照欧盟数据保护指令(或更确切地说是波兰语版本)实施密码时效。

问题在于LDAP中的Samba和POSIX帐户使用不同的密码哈希和老化信息。虽然同步密码本身是很容易(在ldap password sync = Yessmb.conf),添加密码老化进来休息的事情:桑巴不更新shadowLastChange。一起obey pam restrictions = Yes创建一个Windows用户不能更改老化密码的系统,但是如果我不使用它,将不会自动创建主目录。替代方法是使用使用LDAP扩展操作来更改密码,但是smbk5pwd模块也未对其进行设置。更糟糕的是,OpenLDAP维护者不会更新/接受补丁程序,因为此字段被认为已弃用。

因此,我的问题是,最佳解决方案是什么?它们的优点和缺点是什么?

  1. 使用LDAP ppolicy和内部LDAP密码老化?

    1. 与NSS,PAM模块,samba,其他系统配合使用时效果如何?
    2. 是否需要以特殊方式配置NSS和PAM模块才能使用ppolicy,而不是影子?
    3. GOsa²是否适用于政策?
    4. 还有其他管理工具可以与ppolicy启用LDAP一起使用吗?
  2. 整理一个更改密码脚本,以更新LDAP中的字段。(使用户自己可以在不更改密码的情况下更新该字段)


这是一个精巧的问题。希望我能为您提供帮助...
gWaldo

Answers:


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 2010年

看起来Debian压缩OpenLDAP中的ppolicysmbk5pwd覆盖确实可以更新shadowLastChange。对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 config中,需要unix password sync将设置为yespasswd chat设置为*OK*passwd program上面的脚本"%u"作为参数。

LDAP_USER需要在LDAP中创建一个在中指定的帐户,并授予其读取uid所有Samba用户的权限和写入权限shadowLastChange


1

(正在进行中,我稍后会添加详细信息)

大家好消息!在测试环境中,我或多或少都使整个工作正常进行...:

  1. 密码策略(包括质量-和时间-wise)被强制执行的OpenLDAP的水平(感谢ppolicynot24getpasswdqc
  2. 密码通过两种方式在Samba和POSIX之间同步smbk5pwd。注意:使用Samba和ppolicy进行质量检查并不明显:password check scriptpwqcheck -1from passwdqc)需要执行LDAP相同的检查,否则用户将获得权限被拒绝,而不是“密码太简单,请尝试不同”。
  3. PAM和Samba都警告用户密码即将过期。
  4. 用户目录使用产生pam_mkhomedir
  5. RFC2307bis(和关联的架构)的GOsa²实现插入uid到组条目中,因此,希望使用NIS(大多数为“ UNIXy”应用程序)或RFC2307bis架构(大多数为“ AD设计”应用程序)的应用程序都可以正常工作。

唯一的问题是,禁用帐户需要使用CLI工具(或编写GOsa后修改脚本),否则该帐户不会仅在PAM和Samba中被锁定在LDAP级别。密码有效期仍将强制执行,因此这不是一个大问题。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.