smbk5pwd覆盖在OpenLDAP 2.4上

我有一个OpenLDAP服务器,我想configurationsmbk5pwd覆盖,使得在userPassword发生更改时,OpenLDAP会自动更新sambaNTPasswordsambaLMPassword属性。 版本:

 slapd 2.4.23-7.3 slapd-smbk5pwd 2.4.23-7.3 

 dn: cn=module{1},cn=config objectClass: olcModuleList cn: module{1} olcModuleLoad: smbk5pwd olcModulePath: /usr/lib/ldap 

模块加载没有错误。 如果我尝试添加叠加,会发生以下情况:

 #!RESULT ERROR #!CONNECTION ldap://192.168.10.145:389 #!DATE 2014-03-07T09:55:49.078 #!ERROR [LDAP: error code 80 - <olcSmbK5PwdEnable> handler exited with 1] dn: olcOverlay=smbk5pwd,olcDatabase={1}hdb,cn=config changetype: add objectClass: olcSmbK5PwdConfig objectClass: olcOverlayConfig objectClass: olcConfig objectClass: top olcOverlay: smbk5pwd olcSmbK5PwdEnable: samba 

LDAP日志

 smbk5pwd: unable to find "krb5KDCEntry" objectClass. olcSmbK5PwdEnable: value #0: <olcSmbK5PwdEnable> handler exited with 1! 

我已经包含了以下模式:

 cn={0}core.ldif cn={1}cosine.ldif cn={2}nis.ldif cn={3}inetorgperson.ldif cn={4}mozillaorgperson.ldif cn={5}evolutionperson.ldif cn={6}qmailuser.ldif cn={7}samba.ldif 

我错过了什么? 我是否必须加载另一个模块或模式?

编辑 – 在krb5-kdc.schema之前find并包含krb5-kdc.schema samba.schema

对于那些也在努力寻找的人来说,

 # $Id: krb5-kdc.schema,v 1.1 2004-03-22 17:25:05 quanah Exp $ # Definitions for a Kerberos V KDC schema # OID Base is iso(1) org(3) dod(6) internet(1) private(4) enterprise(1) padl(5322) kdcSchema(10) # # Syntaxes are under 1.3.6.1.4.1.5322.10.0 # Attributes types are under 1.3.6.1.4.1.5322.10.1 # Object classes are under 1.3.6.1.4.1.5322.10.2 # Syntax definitions #krb5KDCFlagsSyntax SYNTAX ::= { # WITH SYNTAX INTEGER #-- initial(0), -- require as-req #-- forwardable(1), -- may issue forwardable #-- proxiable(2), -- may issue proxiable #-- renewable(3), -- may issue renewable #-- postdate(4), -- may issue postdatable #-- server(5), -- may be server #-- client(6), -- may be client #-- invalid(7), -- entry is invalid #-- require-preauth(8), -- must use preauth #-- change-pw(9), -- change password service #-- require-hwauth(10), -- must use hwauth #-- ok-as-delegate(11), -- as in TicketFlags #-- user-to-user(12), -- may use user-to-user auth #-- immutable(13) -- may not be deleted # ID { 1.3.6.1.4.1.5322.10.0.1 } #} #krb5PrincipalNameSyntax SYNTAX ::= { # WITH SYNTAX OCTET STRING #-- String representations of distinguished names as per RFC1510 # ID { 1.3.6.1.4.1.5322.10.0.2 } #} # Attribute type definitions attributetype ( 1.3.6.1.4.1.5322.10.1.1 NAME 'krb5PrincipalName' DESC 'The unparsed Kerberos principal name' EQUALITY caseExactIA5Match SINGLE-VALUE SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.5322.10.1.2 NAME 'krb5KeyVersionNumber' EQUALITY integerMatch SINGLE-VALUE SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) attributetype ( 1.3.6.1.4.1.5322.10.1.3 NAME 'krb5MaxLife' EQUALITY integerMatch SINGLE-VALUE SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) attributetype ( 1.3.6.1.4.1.5322.10.1.4 NAME 'krb5MaxRenew' EQUALITY integerMatch SINGLE-VALUE SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) attributetype ( 1.3.6.1.4.1.5322.10.1.5 NAME 'krb5KDCFlags' EQUALITY integerMatch SINGLE-VALUE SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) attributetype ( 1.3.6.1.4.1.5322.10.1.6 NAME 'krb5EncryptionType' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ) attributetype ( 1.3.6.1.4.1.5322.10.1.7 NAME 'krb5ValidStart' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.5322.10.1.8 NAME 'krb5ValidEnd' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.5322.10.1.9 NAME 'krb5PasswordEnd' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 SINGLE-VALUE ) # this is temporary; keys will eventually # be child entries or compound attributes. attributetype ( 1.3.6.1.4.1.5322.10.1.10 NAME 'krb5Key' DESC 'Encoded ASN1 Key as an octet string' SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 ) attributetype ( 1.3.6.1.4.1.5322.10.1.11 NAME 'krb5PrincipalRealm' DESC 'Distinguished name of krb5Realm entry' SUP distinguishedName ) attributetype ( 1.3.6.1.4.1.5322.10.1.12 NAME 'krb5RealmName' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} ) # Object class definitions objectclass ( 1.3.6.1.4.1.5322.10.2.1 NAME 'krb5Principal' SUP top AUXILIARY MUST ( krb5PrincipalName ) MAY ( cn $ krb5PrincipalRealm ) ) objectclass ( 1.3.6.1.4.1.5322.10.2.2 NAME 'krb5KDCEntry' SUP krb5Principal AUXILIARY MUST ( krb5KeyVersionNumber ) MAY ( krb5ValidStart $ krb5ValidEnd $ krb5PasswordEnd $ krb5MaxLife $ krb5MaxRenew $ krb5KDCFlags $ krb5EncryptionType $ krb5Key ) ) objectclass ( 1.3.6.1.4.1.5322.10.2.3 NAME 'krb5Realm' SUP top AUXILIARY MUST ( krb5RealmName ) ) 

slaptest运行成功,我能够添加覆盖,但是如果我更改userPassword ,其他属性是不变的。 userPassword属性包含SHA1散列。

必须使用RFC 3062密码修改扩展操作。 请参阅源代码发行版中的README (没有手册页,AFAICT)。 你可以在命令行中用OpenLDAP的ldappasswd (这与slappasswd不同, slappasswd是以各种方式散列密码值) slappasswd这一点。

userPassword随着时间的推移已经增长了特殊的语义,没有一个是有意的(并且不严格地符合规范)。 它具有“仅比较”(仅进行身份validation)访问或不具有读取访问权限,并具有依赖于客户端或服务器的转换(例如客户端或服务器端内容哈希)并不罕见。 密码修改定义明确,只接受明文密码,并可以使用pipe理员定义的哈希方法。 这个扩展提供了一个密码抽象层(也允许密码存储从目录中完全分离)。 如果客户端允许将预先哈希值直接写入userPassword ,那么也需要执行密码复杂度。

例如(perl): http : //search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP/Extension/SetPassword.pm

您可以通过查询根DSE(dn“”)来确认支持,例如

 $ ldapsearch -H ldaps://myldap/ [ -D user -w password ] \ -s base -b "" "(objectclass=*)" supportedExtension [...] dn: supportedExtension: 1.3.6.1.4.1.1466.20037 # STARTTLS supportedExtension: 1.3.6.1.4.1.4203.1.11.1 # password modify supportedExtension: 1.3.6.1.4.1.4203.1.11.3 # who am i supportedExtension: 1.3.6.1.1.8 # cancel request