LDAP pwdLastSet 属性中的 DateTime "invalid per syntax"

DateTime "invalid per syntax" in LDAP pwdLastSet attribute

我正在尝试向我的 LDAP 测试用户添加 pwdLastSet 属性。我创建了这个 ldif 文件:

dn: cn=test,dc=example,dc=com
changetype: add
objectClass: passwordLastSet
add: pwdLastSet
pwdLastSet: 199412161032Z

当我尝试 ldapmodify

sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f add-pwdlastset.ldif

我收到一条错误消息:

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=test,dc=example,dc=com"
ldap_add: Invalid syntax (21)
   additional info: objectClass: value #0 invalid per syntax

我查阅了 RFC4517 中的第 3.3.13 章“广义时间”,其中提供了以下示例:

  Examples:
     199412161032Z
     199412160532-0500

Both example values represent the same coordinated universal time:
10:32 AM, December 16, 1994.

您可能已经注意到,我什至将第一个示例复制粘贴到我的 ldif 文件中,但无济于事。有人能告诉我这个语法有什么问题吗?

忘了说我也试过 unix 时间戳

pwdlastset: 1643988710

产生相同的错误消息。


更新:

当我将 changetypeadd 更改为 modify 并删除 objectClass(如 EricLavault 的回答中所建议的那样)时:

dn: cn=test,dc=example,dc=com
changetype: modify
add: pwdLastSet
pwdLastSet: 1643988710

我收到以下错误:

$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f add-field.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=test,dc=example,dc=com"
ldap_modify: Undefined attribute type (17)
    additional info: pwdlastset: attribute type undefined

当我像这样再次添加 objectClass 定义时

dn: cn=test,dc=example,dc=com
changetype: modify
objectClass: passwordLastSet
add: pwdLastSet
pwdLastSet: 1643988710

我收到以下错误:

$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f add-field.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
ldapmodify: modify operation type is missing at line 3, entry "cn=test,dc=example,dc=com"

我尝试了其他一些修改操作类型 (replace),但没有任何效果。还是卡在这里。

事情(乍一看并不明显)是 ldapmodify 允许 添加 个条目,在这种情况下你设置 changetype: add

您想修改一个现有条目,因此您应该设置changetype: modify以便add: pwdLastSet或(替换|删除)。

如果你还需要在词条中添加objectClass: passwordLastSet或者其他修改,注意每一个操作(添加|替换|删除)都要分开,eg.

dn: cn=test,dc=example,dc=com
changetype: modify
add: objectClass
objectClass: passwordLastSet
-
add: pwdLastSet
pwdLastSet: 199412161032Z

此外,如果我没记错的话,PwdLastSet 属性仅在 Active Directory 中实现。

如果您正在使用 OpenLDAP,您可能应该使用 PwdPolicy 辅助 class(ppolicy 覆盖)。